我一直在将我的应用程序从旧版Facebook SDK转换为新版Facebook SDK 3.1,以便使用iOS6本地功能以及其他Facebook功能。但是我遇到了一个问题,模拟器上会经常出现,设备上则很少出现。
当我尝试登录Facebook时,我的应用程序背景不再通过Safari或Facebook应用程序进行身份验证,而是出现了一个模态窗口来完成登录(我相信这始于iOS6,甚至在切换到Facebook SDK 3.0 / 3.1之前就开始发生)。这个窗口允许我输入用户名和密码,但当我点击右上角的"Okay"进行身份验证时,没有任何反应。在AppDelegate中的application: openURL:sourceApplication:annotation:回调函数中,应用程序并未收到任何返回值。
在我共享的FacebookController代码中(我将其用于多个项目),我正在按照Facebook的示例代码初始化FBSession进行授权。
FBSession *session = [[FBSession alloc] initWithAppID:nil permissions:readPermissions defaultAudience:FBSessionDefaultAudienceNone urlSchemeSuffix:self.fbUrlSchemeSuffix tokenCacheStrategy:nil];
if(session.state == FBSessionStateCreated || session.state == FBSessionStateCreatedTokenLoaded)
{
[FBSession setActiveSession:session];
// we open after the fact, in order to avoid overlapping close
// and open handler calls for blocks
[session openWithBehavior:FBSessionLoginBehaviorUseSystemAccountIfPresent completionHandler:^(FBSession *session, FBSessionState status, NSError *error) {
...
完成处理程序的代码除非我点击对话框上的x取消按钮(在这种情况下,我会像预期的那样收到错误消息),否则永远不会被执行。
我正在iOS目标属性(info.plist)中设置FacebookAppID,并且我已经设置了URL Schemes,其中fb###[url_scheme_suffix]也是如此。
我和Facebook示例代码之间唯一的区别是,我使用了URL方案后缀,因为我们的应用有免费和付费版本。
如果应用程序使用Safari登录,则根据给定的代码可以工作。如果它快速切换到Facebook应用程序,它也可以工作。此外,共享的Facebook iOS6帐户设置也有效。只有当应用程序使用应用内模态时才会失败。
有其他人遇到过这个问题吗?
-initWithAppID:permissions...
方法中是否真的提供了nil
作为应用程序 ID。 - Kristofer Sommestad