2015-07-01 91 views
10

我试图用Facebook功能实现登录,但我收到以下错误回报。(com.facebook.sdk.login错误304.)与FBSDK 4.2错误

Login Failed with error: The operation couldn’t be completed. (com.facebook.sdk.login error 304.)

这里是我的代码

- (void)loginWithFacebook { 
     NSString *const read_actions = @"email"; 

     [[[FBSDKLoginManager alloc] init] 
     logInWithReadPermissions:@[read_actions] handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) 
     { 
      if (error) { 
       NSLog(@"Login Failed with error: %@", error.localizedDescription); 
      } 
      else if (result.isCancelled) 
      { 
       NSLog(@"Login Failed due to Cancel"); 
      } 
      else 
      { 
       if ([result.grantedPermissions containsObject:read_actions]) { 
        NSLog(@"Permission granted"); 

       } 
      } 
     }]; 
    } 
+0

该代码工作使用SDK的最新版本(现在的4.3版)适合我,在更新到最新版本后是否会失败并显示相同的消息?你是在真实的设备上还是在模拟器上运行? –

回答

4

看来登录操作时,我被做

[FBSDKAccessToken refreshCurrentAccessToken:^(FBSDKGraphRequestConnection *connection, id result, NSError *error){} 
在后台线程

。我删除了它,它工作得很好。

26

这可能是因为之前的登录令牌未被清除。所以在登录之前只需登出。

NSString *const read_actions = @"email"; 
FBSDKLoginManager *loginManager = [[FBSDKLoginManager alloc] init]; 
[loginManager logOut]; 
[loginManager logInWithReadPermissions:@[read_actions] 
           handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) { 
            if (error) { 
             NSLog(@"Login Failed with error: %@", error.localizedDescription); 
            } 
            else if (result.isCancelled) { 
             NSLog(@"Login Failed due to Cancel"); 
            } else { 
             if ([result.grantedPermissions containsObject:read_actions]) { 
              NSLog(@"Permission granted"); 
             } 
            } 
           }]; 
+0

我试过了,但是当刷新访问令牌在后台被调用时,currentAccessToken又被设置了。所以,我不得不停止该线程并添加 [loginManager logOut];如您所述,在登录尝试之前使用 。 –

+0

感谢您的信息,我没有实现注销,所以我刚删除了应用程序,重建它,它工作。 – Nitesh

0

试试这个,但其在迅速2 “注销之前登录的登录按钮行动” 让登录:FBSDKLoginManager = FBSDKLoginManager() login.logOut()

1

注销fblogin管理器正在执行的登录api之前登录的操作: -

fbLoginManager.logOut()

fbLoginManager.logIn(withReadPermissions: ["public_profile","email"], from: self) { (result, error) -> Void in 
1

斯威夫特4更新:

每当你完成这样的事情 FBSDKLoginManager().login(withReadPermission: ["email"], from: self) { (result, error) in // Check for error and then login } 登录代码之前插入此代码: FBSDKLoginManager().logOut() ,它应该正常工作:)