Facebook SDK - iOS6 登录弹出窗口无法关闭

Posted

技术标签:

【中文标题】Facebook SDK - iOS6 登录弹出窗口无法关闭【英文标题】:Facebook SDK - iOS6 login popup cannot be dismissed 【发布时间】:2012-10-07 22:51:53 【问题描述】:

在我的 iPhone 应用中,我希望用户能够在 Facebook 上分享链接。

当他们点击“分享”时,我使用以下代码使用新的 SDK 3.1 登录 Facebook,然后在完成处理程序中使用 FBRequestConnection(一个简单的 publish_action)。

[FBSession openActiveSessionWithPublishPermissions:@[@"publish_actions"] defaultAudience:FBSessionDefaultAudienceFriends allowLoginUI:true completionHandler:^(FBSession *session, FBSessionState status, NSError *error) 

    // Now call FBRequestConnection to post in the stream

];

当用户安装了 Facebook 应用程序时,它只是将登录委托给该应用程序。但是,当他们不这样做时,它会在 WebView 中打开登录页面。

ios 5 中,它会打开 Mobile Safari:

我的问题是在 iOS 6 上,我得到了相同的流程,但在一个模式弹出窗口中(在我的应用程序顶部)。

弹出窗口有 2 个问题:

1.关闭它

它不能被取消或解除。相比之下,SDK 中的 HelloFacebookSample 应用程序具有相同的弹出窗口,但带有一个十字按钮来关闭它。

注意: 感谢 ravi 现在解决了,我错过了包含“关闭”图像的 Facebook 资源包。

2。接受权限

在弹出窗口的第二步(参见上面的屏幕),按 Okay 不会执行任何操作。按“X”会调用带有错误的完成处理程序,这很好,但是 Okay 没有任何反应。这是使用 SDK 3.1 登录 Facebook 的正确方法吗?我是否错过了专门对弹出窗口做出反应的回调?

更多说明:

这只发生在 iOS6 中,当 Facebook 应用程序不是 已安装并且 Facebook 帐户在 iOS 中未配置 设置。

谢谢!

【问题讨论】:

+1 我在 FB 更新到 3.0SDk 后遇到类似的问题 可能是 SDK 中的错误。只是一个注释; Facebook 鼓励在您实际发布时(而不是在连接时)请求发布权限:developers.facebook.com/docs/howtos/ios-6 感谢 Kristofer - “稍后执行 publish_action”实际上是指登录回调到达时。我觉得应该没问题 拆分读取和发布权限请求的原因是为了确保用户在开始代表他们发布之前对应用程序感到满意。登录后连续请求发布权限将使您的权限接受率下降同样多。 (加上您希望用户开始执行的更多操作) 在用户选择在 Facebook 上发帖之前,应用程序不会做任何事情,之后它使用 openActiveSessionWithPublishPermissions 登录,然后使用 FBRequestConnection。这可以接受吗?据我了解,您说当应用程序在启动时开始登录 Facebook 时,我必须小心? 【参考方案1】:

我无法发表评论,因为我的声誉低于 50,因此试图指出我的观察结果作为答案。

我在 ios6 上使用 Facebook sdk3.1 时也注意到了这个问题。就我而言,我使用的是旧式 facebook 对象创建并在其上调用 [facebook authorize:permissions],但我将源代码修改为始终使用“FBSessionLoginBehaviorForcingWebView”,以便我的登录始终通过应用内 Web 登录。

在我的情况下,我缺少 FBUserSettingsViewResources.bundle 和 FacebookSDKResources.bundle,所以我看不到十字按钮(但我能够点击那个位置并得到回电 - (void)fbDidNotLogin:(BOOL)cancelled )。

【讨论】:

非常感谢,这绝对是朝着正确方向迈出的一步!我也错过了资源包。我现在可以看到并点击关闭按钮。右侧的“确定”按钮仍然没有执行任何操作,这可能是另一个问题。 即使添加了 FBUserSettingsViewResources.bundle 和 FacwebookSDKResources.bundle 我也看不到取消按钮.. @ravi:如果你不介意我问,第二个弹出 WebView 说 You have already authorized this app [Okay] 是什么意思?如果是这样,您知道单击Okay 时会调用哪个方法吗?我似乎无法理解为什么我的接线不正确。 @Gromix:我尝试删除 FB 应用程序,删除了 IOS FB 凭据。我在我的 ios6 设备上运行了 Hackbook 示例,但我没有看到你提到的第二个弹出 Webview。 但几周前,我读到 Facebook 工程师对 SO 本身说 OK 按钮不起作用,从某种意义上说,它没有再次打开应用程序。他们计划在下一个 dot 版本中修复它 我试图寻找我读到这个但找不到的链接 @Gromix:尝试向用户 [***.com/users/1025173/shireesh-asthana] 询问 OAuth 工作流程并在单击确定时切换到应用程序【参考方案2】:

我也遇到了这个问题,它似乎是一个已知的错误:

https://developers.facebook.com/bugs/539702426044893?browse=search_507daefc9af416244781488

我还没有解决这个问题,但对我来说,它似乎只发生在模拟器中。安装在设备上时,我的应用似乎总是通过 safari 登录

编辑:所以经过更多挖掘后,我遇到了这个堆栈溢出线程: FBConnect login, share with a webview?

我意识到我们看到的对话框是一个 uiWebView,如果应用程序无法在 safari 中打开对话框,它实际上是备用。我能够解决我重置模拟器的问题,这基本上会清除 cookie。从您的屏幕截图中,我相信您也在模拟器中工作。我想知道如果你会得到相同的结果,你是否重置了模拟器?

从菜单 iOS 模拟器 -> 重置内容和设置...

【讨论】:

以上是关于Facebook SDK - iOS6 登录弹出窗口无法关闭的主要内容,如果未能解决你的问题,请参考以下文章

facebook-ios-sdk 是不是使用 iOS 6 Facebook 集成来支持登录而不打开本机 Facebook 应用程序?

用户更改密码后 Facebook iOS SDK 不会打开登录 UI (iOS 6)

登录 facebook 时无法完成操作。(com.facebook.sdk 错误 2.0)错误。 iOS 6,iPhone3gs

如何使用 Facebook SDK 3.1 使用弹出视图登录 Facebook,而不是通过 safari? [关闭]

Facebook sdk:登录屏幕出现在弹出窗口中,而不是连接 Facebook 应用程序

在 facebook ios6 中没有进入 if(granted) 循环“使用 Facebook 登录”