我正在开发允许用户通过Facebook登录的应用程序(使用Facebook SDK)。当用户已在iPhone设置中登录Facebook时出现错误。如果不是 - 一切正常。
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)>}
有时也出现Code 7的错误。 我几乎阅读了与此错误相关的所有主题。
我的步骤是:
[FBSession openActiveSessionWithReadPermissions:permissions
更改为[FBSession openActiveSessionWithPermissions:permissions
- 它有效。但它被弃用了。 答案 0 :(得分:13)
是的,看到此错误后,如果转到“设置”,您会看到此应用的设置已“关闭”。但是在这种情况下的问题是从未提示用户允许访问 - 即在第一次访问时自动将设置变为OFF。如果用户被问到,那当然这是可以理解的,但事实并非如此(就好像SDK默默地自动按下Do not Allow for the user)。这就是为什么这是一个问题。
在您进一步阅读之前,我想要注意的是,一旦设置了设置,您就不能简单地重复该过程来测试它,因为一旦设置了设置,它就永远不会询问用户(甚至删除并重新安装应用程序没有帮助)。要测试此问题,您需要转到设置 - &gt;重置权限。一般 - &gt;重置 - &gt;重置位置&amp;隐私,在您再次尝试复制之前。
从测试开始,我发现如果您在首次请求的权限中有offline_access,则会出现此登录错误(并且不会提示用户并将权限设置为OFF)。 SDK不会检查并告诉您不允许此权限;它只是无法登录。
答案 1 :(得分:3)
这就是我的工作方式 - 将它传递给空权限数组。
NSArray *permissionsArray = @[];
但是,请确保您拥有在我的Facebook应用页面中设置的权限。我只需要默认的一个,所以我没事。
我有一种感觉,facebook改变了它的服务器端代码。我的应用程序工作正常,然后我的FB登录破了。
答案 2 :(得分:0)
我认为这些代码很模糊,会有很多不同的东西。
最后,我发现问题在于,当我为应用商店准备应用时,我的应用套件ID尚未更新。登录您的Facebook开发者帐户并确保应用ID正确无误。
答案 3 :(得分:0)
检查您是否正确地将Facebook XML粘贴到Info.plist中! (as seen here)
<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>
我忘了省略大括号,而是替换了内部文本,产生了这篇文章引用的错误。确保完全替换“{your-app-id}”!