我刚刚将我的应用程序升级到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=1011596265571252https://developers.facebook.com/bugs/786729821439894/?comment_id=1467419033584031这个行为是设计出来的。在我们最新的iOS sdk中,登录行为现在在服务器端进行控制,以确保最佳的用户体验。
https://developers.facebook.com/bugs/1390559277910338/?comment_id=1661064587442645由于iOS 9中引入的变化,这个新的行为避免了用户被询问是否要打开Facebook应用程序,接受权限/共享/等,然后再次询问是否要切换回你的应用程序。
系统认证不能让人们控制他们与应用程序共享的信息。在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;
应该可以工作。
注: