6

在我的 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 上,我得到了相同的流程,但在一个模式弹出窗口中(在我的应用程序顶部)。

在此处输入图像描述

弹出窗口有两个问题:

1. 关闭它

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

在此处输入图像描述

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

2. 接受权限

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

更多说明:

仅当未安装Facebook 应用且未在 iOS 设置中配置Facebook 帐户时,才会在iOS6中发生这种情况。

谢谢!

4

2 回答 2

7

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

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

就我而言,我缺少 FBUserSettingsViewResources.bundle 和 FacebookSDKResources.bundle,所以我看不到十字按钮(但我能够点击那个位置并获得回调- (void)fbDidNotLogin:(BOOL)cancelled{) 。

于 2012-10-10T22:03:29.530 回答
0

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

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

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

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

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

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

于 2012-10-16T19:20:12.970 回答