iOS loginWithFacebookSDK

Hello. I am reading documentation for login user with facebookin iOS SDK. I already have an implementation of login with facebook, so i understand i have to call backendless methods after facebook session has established:

[[FBRequest requestForMe] startWithCompletionHandler:

 ^(FBRequestConnection *connection,

   NSDictionary<FBGraphUser> *user,

   NSError *error) {

     // Here

 }];

There are two methods in backendless SDK for this:

// Sync

-(id)loginWithFacebookSDK:(FBSession *)session user:(NSDictionary<FBGraphUser> *)user fieldsMapping:(NSDictionary *)fieldsMapping;

//Async

-(void)loginWithFacebookSDK:(FBSession *)session user:(NSDictionary *)user fieldsMapping:(NSDictionary<FBGraphUser> *)fieldsMapping response:(void(^)(id))responseBlock error:(void(^)(Fault *))errorBlock;

-(void)loginWithFacebookSDK:(FBSession *)session user:(NSDictionary *)user fieldsMapping:(NSDictionary<FBGraphUser> *)fieldsMapping response:(void(^)(id))responseBlock error:(void(^)(Fault *))errorBlock;

I believe there is a mistake with async methods: user is NSDictionary, and fieldsMapping is required to be NSDictionary<FBGraphUser>, while in sync method is the opposite. ¿Are these methods correct?

Does sync method returns logged user? Or do I have to retrieve it with backendless.userService.currentUser?

Hi Andres,

You are correct, it is an oversight on our part and we will fix it.

Meanwhile, you could use the following methods which do not require Facebook SDK (make sure to configure Facebook keys in the console (Manage > App Settings > Social Settings):

-(void)easyLoginWithFacebookFieldsMapping:(NSDictionary *)fieldsMapping permissions:(NSArray *)permissions response:(void(^)(id))responseBlock error:(void(^)(Fault *))errorBlock;
-(void)easyLoginWithTwitterFieldsMapping:(NSDictionary *)fieldsMapping response:(void(^)(id))responseBlock error:(void(^)(Fault *))errorBlock;
-(void)easyLoginWithFacebookFieldsMapping:(NSDictionary *)fieldsMapping permissions:(NSArray *)permissions responder:(id&lt;IResponder&gt;)responder;
-(void)easyLoginWithTwitterFieldsMapping:(NSDictionary *)fieldsMapping responder:(id&lt;IResponder&gt;)responder;
-(void)easyLoginWithFacebookFieldsMapping:(NSDictionary *)fieldsMapping permissions:(NSArray *)permissions;
-(void)easyLoginWithTwitterFieldsMapping:(NSDictionary *)fieldsMapping;

Regards,
Mark

Hi Mark. ¿Any updates on this?

I am trying with other facebook login methods in iOS SDK, and i am getting an error for this one:

-(id)loginWithFacebookSDK:(FBSession *)session user:(NSDictionary<FBGraphUser> *)user fieldsMapping:(NSDictionary *)fieldsMapping;

Error message is:

2014-03-03 22:45:20.263 Fidelizacion_UsuarioFinal[778:70b] Fault, detail: Requested Facebook application is not permitted., message: Requested Facebook application is not permitted.

It seems it is a handled error. Could you please tell me in what cases is this message shown?

Hi Andres,

Did you follow all the steps for setting up your Facebook app exactly as their SDK requires?

Regards,
Mark

Hi Mark.

Yes, I did. I have followed the steps for the “Login with Facebook SDK” part (http://backendless.com/documentation/users/ios/ios_facebook_login.htm). I am not using the Easy Facebook Login.