Facebook SDK 3.1.1和iOS 6.1登录错误

Bon*_*geh 2 facebook facebook-ios-sdk ios6

我知道这似乎是一个重复的问题,但我已经查看了与此相关的堆栈溢出的每一个问题,我仍然收到以下错误:

Error Domain=com.facebook.sdk Code=2 "The operation couldn’t be completed. 
(com.facebook.sdk error 2.)" UserInfo=0x1ecbf8e0       
{com.facebook.sdk:ErrorLoginFailedReason=com.facebook.sdk:ErrorLoginFailedReason}
Run Code Online (Sandbox Code Playgroud)

这是NSError的整个NSLog ..

我已按照教程进行身份验证;

  • 在developers.facebook.com上,我已经将我的应用程序设置为Native iOS应用程序,并输入我的bundle id
  • 在我的info.plist中,我已经包含了URL类型>项目0> URL方案>项目0> fb123456和FacebookAppID = 123456,密钥.

我正在尝试使用以下代码进行身份验证;

[FBSession openActiveSessionWithReadPermissions:permissions
                               allowLoginUI:YES
                          completionHandler:
 ^(FBSession *session,
   FBSessionState state, NSError *error) {
     [self sessionStateChanged:session state:state error:error];
 }];
Run Code Online (Sandbox Code Playgroud)

权限设置为nil.

我的app委托中也有以下设置

- (void)applicationDidBecomeActive:(UIApplication *)application
{
[FBSession.activeSession handleDidBecomeActive];
}

- (void)applicationWillTerminate:(UIApplication *)application
{
[FBSession.activeSession close];
}

- (BOOL)application:(UIApplication *)application
        openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication
     annotation:(id)annotation {
return [FBSession.activeSession handleOpenURL:url];
}

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
return [FBSession.activeSession handleOpenURL:url];
}
Run Code Online (Sandbox Code Playgroud)

我注意到的一件事是,在我松开按钮后,错误消息立即触及我的屏幕,我将手机置于飞行模式并且速度相同,我认为该命令甚至没有离开手机并转到Facebook服务器开始..我肯定有网络连接,因为我在Facebook电话之前访问谷歌API时刻.

编辑:

如果我使用下面弃用的方法

[FBSession openActiveSessionWithPermissions:nil allowLoginUI:YES completionHandler:
 ^(FBSession *session,
   FBSessionState state, NSError *error) {
     [self sessionStateChanged:session state:state error:error];
 }];
Run Code Online (Sandbox Code Playgroud)

我可以通过Facebook验证.

返回的会话是

<FBSession: 0x20038450, state: FBSessionStateOpen, loginHandler: 0x2006ba90, appID: 3895930xxxxxxxx, urlSchemeSuffix: , tokenCachingStrategy:<FBSessionTokenCachingStrategy: 0x1ed4ce30>, expirationDate: 2013-04-08 16:25:19 +0000, refreshDate: 2013-02-07 16:25:19 +0000, attemptedRefreshDate: 0001-12-30 00:00:00 +0000, permissions:(
)>
Run Code Online (Sandbox Code Playgroud)

与使用更新的3.1.1方法失败尝试的此会话进行比较

<FBSession: 0x1e8970b0, state: FBSessionStateClosedLoginFailed, loginHandler: 0x0, appID: 3895930xxxxxxxx, urlSchemeSuffix: , tokenCachingStrategy:<FBSessionTokenCachingStrategy: 0x1d5853b0>, expirationDate: (null), refreshDate: (null), attemptedRefreshDate: 0001-12-30 00:00:00 +0000, permissions:(
)>
Run Code Online (Sandbox Code Playgroud)

我假设在成功登录后创建了缺少的loginHandler对象.

虽然这允许我使用我的登录令牌继续开发我的应用程序的其余部分,但我无法接受现场发送我的应用程序.有谁知道为什么会发生这种情况/可能导致这种情况的原因?

小智 14

我在2个实例上遇到了同样的错误.

  1. 当你的iPhone中的开关没有在设置 - > Facebook - > YourAppName下打开,以允许你的应用程序使用Facebook帐户.在这种情况下,我正在显示一个警告,要求用户打开应用程序的开关.

  2. 当您的应用的捆绑包标识符与您在应用的"Facebook应用设置"页面上指定的捆绑包标识符不匹配时.

由于即使没有互联网连接也会发生错误,我认为应该是案例1.