默认FBSDKLoginBehavior.原生版本无法在iOS 9上运行



我刚刚将我的应用程序升级到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再次工作吗?

谢谢!

事实证明这不是一个问题,而是根据这些来自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登录应用程序提供了最佳体验。

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

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

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

你可以看到,它在iOS9+上禁用了原生流。
将行改为BOOL useNativeFlow = YES;应该可以工作。

注:

最新更新