iOS Facebook SDK错误域com.facebook.sdk代码2和代码7

我正在开发允许用户通过Facebooklogin的应用程序(使用Facebook SDK)。 当用户已经在iPhone设置中loginFacebook时出现错误。 如果没有 – 所有工作都正常。

NSArray *permissions = [[NSArray alloc] initWithObjects:@"email", nil]; [FBSession openActiveSessionWithReadPermissions:permissions allowLoginUI:YES completionHandler: ^(FBSession *session, FBSessionState state, NSError *error) { [self fbSessionStateChanged:session state:state error:error]; }]; 

我已经尝试将权限设置为nil数组 – 没有任何更改。

日志是:

 Error Domain=com.facebook.sdk Code=2 "The operation couldn't be completed. (com.facebook.sdk error 2.)" UserInfo=0x1552c6c0 {com.facebook.sdk:ErrorLoginFailedReason=com.facebook.sdk:SystemLoginDisallowedWithoutError, com.facebook.sdk:ErrorSessionKey=<FBSession: 0xabe8100, state: FBSessionStateClosedLoginFailed, loginHandler: 0x0, appID: APPIDHERE, urlSchemeSuffix: , tokenCachingStrategy:<FBSessionTokenCachingStrategy: 0x14b8f3d0>, expirationDate: (null), refreshDate: (null), attemptedRefreshDate: 0001-12-30 00:00:00 +0000, permissions:(null)>} 

有时代码7的错误也出现了。 我已经阅读了几乎所有与这个错误有关的话题。

我的步骤是:

  1. 在.plist文件中将我的应用程序ID与FB包ID进行比较。 他们是一样的!!!
  2. 我的应用程序不在沙盒模式!
  3. 如果我从[FBSession openActiveSessionWithReadPermissions:permissions更改为[FBSession openActiveSessionWithPermissions:permissions – 它的工作原理。 但它已被弃用。

是的,当你看到这个错误后,如果你去设置,你会看到这个应用程序的设置被closures。 但在这种情况下的问题是,从来没有提示用户允许访问 – 即在第一次访问时,设置被自动closures。 如果用户被问到了,那么当然这是可以理解的,但事实并非如此(就好像SDK默默地,自动地按下了不允许的用户)。 这就是为什么这是一个问题。

在进一步阅读之前,我想要注意的是,一旦设置设置,你不能简单地重复这个过程来testing它,因为一旦设置设置,它将永远不会问用户(即使删除和重新安装应用程序没有帮助)。 要testing此问题,您需要重置权限,方法是转到设置 – >常规 – >重置 – >重置位置和隐私,然后再尝试复制。

从testing中,我发现如果第一次请求的权限有offline_access,那么它会给这个login错误(而不会提示用户并将权限设置为OFF)。 SDK不检查并告诉你,这个权限是不允许的; 它只是无法login。

这是我得到我的工作 – 传递一个空的权限数组。

 NSArray *permissionsArray = @[]; 

但是,请确保您有我想在Facebook应用程序页面设置的权限。 我只需要默认的,所以我没事。

我有一种感觉,Facebook改变了它的服务器端代码。 我的应用程序工作正常,然后我的FBlogin失败。

我认为这些代码足够模糊,会有很多不同的东西。

最后我发现问题在于我的应用程序包ID没有被更新,当我准备了我的应用程序商店的应用程序。 login到您的Facebook开发者帐户,并确保应用程序ID是正确的。

检查您是否正确地将Facebook XML粘贴到Info.plist中! (如图所示)

 <key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleURLSchemes</key> <array> <string>fb{your-app-id}</string> </array> </dict> </array> <key>FacebookAppID</key> <string>{your-app-id}</string> <key>FacebookDisplayName</key> <string>{your-app-name}</string> <key>LSApplicationQueriesSchemes</key> <array> <string>fbapi</string> <string>fb-messenger-api</string> <string>fbauth2</string> <string>fbshareextension</string> </array> 

我忘了省略大括号,取而代之的内部文本,产生错误这篇文章引用。 确保完全replace“{your-app-id}”!