默认FBSDKLoginBehavior.Native无法在iOS 9上运行

时间:2015-09-17 16:40:56

标签: facebook facebook-login ios9 fast-app-switching

我刚刚将我的应用程序升级到Xcode 7 / Swift 2.0,我正在通过AppSwitch进行Facebook登录。我正在使用最新的FBSDK(4.6)并按照upgrade guide执行所有操作。仍然,在iOS9上,Facebook登录通过应用内浏览器发生,应用程序开关不再起作用。我也试过强制设置loginbehavior但没有运气:

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

我有什么办法可以让appswitch再次运作吗?

谢谢!

2 个答案:

答案 0 :(得分:9)

根据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登录您应用的用户提供了最佳体验。

答案 1 :(得分:0)

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

有趣的部分(标记4.6)位于文件FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfigurationManager.m

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

如您所见,它会禁用iOS9 +上的本机流 将行更改为BOOL useNativeFlow = YES;之类的内容应该有效。

P.S。我自己还没有检查过这个补丁。