6

我刚刚将我的应用程序升级到 Xcode 7 / Swift 2.0,我正在努力通过 AppSwitch 登录 Facebook。我在最新的 FBSDK (4.6) 上,并按照升级指南做了一切。尽管如此,在 iOS9 上,Facebook 登录是通过应用内浏览器进行的,appswitch 不再起作用。我也尝试强制设置登录行为但没有运气:

let manager = FBSDKLoginManager()
manager.loginBehavior = FBSDKLoginBehavior.Native
manager.logInWithReadPermissions(facebookReadPermissions, fromViewController: nil, handler: { (loginResult, error) -> Void in

我能做些什么来让 appswitch 再次工作吗?

谢谢!

4

2 回答 2

10

事实证明,这不是问题,而是根据 Facebook 的这些帖子的新期望行为:

https://developers.facebook.com/bugs/1636969533209725/?comment_id=1011596265571252

此行为是设计使然。在我们最新的 iOS SDK 中,登录行为现在在服务器端进行控制,以确保最佳的用户体验。

https://developers.facebook.com/bugs/786729821439894/?comment_id=1467419033584031

由于 iOS 9 中引入的更改,这种新行为避免了用户被询问是否要打开 Facebook 应用程序,接受权限/共享/等,然后再次询问他们是否要切换回您的应用程序.

https://developers.facebook.com/bugs/1390559277910338/?comment_id=1661064587442645

系统身份验证不会让人们控制他们与应用程序共享的信息。在 iOS 9 中,快速应用切换到 Facebook 原生应用会导致额外的对话框(“ExampleApp 想要打开 Facebook”)出现两次 - 一次是在从 ExampleApp 到 Facebook 的途中,另一次是在回程中。我们相信 iOS 9 上 v4.6 中的默认 SDK 行为为使用 Facebook 登录您的应用程序的用户提供了最佳体验。

于 2015-09-18T19:20:34.530 回答
0

您可以修补 FacebookSDK 源代码以使用快速应用切换。

有趣的部分(对于标签 4.6)在文件中FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfigurationManager.m

+ (FBSDKServerConfiguration *)_defaultServerConfigurationForAppID:(NSString *)appID
{
    …
    BOOL useNativeFlow = ![FBSDKInternalUtility isOSRunTimeVersionAtLeast:iOS9Version];

如您所见,它在 iOS9+ 上禁用了原生流。
将线路更改为类似的东西BOOL useNativeFlow = YES;应该可以。

PS我自己还没有检查这个补丁。

于 2016-02-22T02:47:46.937 回答