默认的FBSDKLoginBehavior.Native在iOS 9上不起作用

6

我刚把我的应用程序升级到Xcode 7 / Swift 2.0,但在通过AppSwitch进行Facebook登录时遇到了麻烦。我使用最新的FBSDK(4.6)并根据升级指南做了一切。然而,在iOS9上,Facebook登录通过应用内浏览器进行,AppSwitch不再起作用。我还尝试了强制设置loginbehavior,但没有成功:

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

有没有什么办法可以让Appswitch再次正常工作呢?
谢谢!
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,再一次从Facebook返回。我们认为,在iOS 9上v4.6的默认SDK行为为使用Facebook登录您的应用程序的人们提供了最佳体验。

3
为什么还要在SDK中包含以下内容 -> loginManager.loginBehavior = FBSDKLoginBehavior.Native. - TYRONEMICHAEL
它用于iOS < 9。 - zxcat

0

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

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

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

正如您所见,它在iOS9+上禁用了本机流程。
将该行更改为BOOL useNativeFlow = YES;应该可以解决问题。

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


无法工作,但我认为这会起作用。我正在URL Scheme中添加“fbapi”。 - Kumar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接