Facebooklogin – iOS 9 – 没有Safari

在iOS 8中使用logInWithReadPermissionslogin工作正常,但是在更新到iOS 9之后,它一直打开Safari或模态UIWebView。

有没有人有同样的问题?

FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init]; [login setLoginBehavior:FBSDKLoginBehaviorNative]; [login logInWithReadPermissions:@[@"public_profile",@"email"] fromViewController:nil handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) { NSLog(@""); }]; 

似乎没有办法在iOS9 +中使用最新的FB SDK获得以前的行为。 你可以使用旧的SDK来做到这一点。 这是来自Facebook的回应: 在这里输入图像说明

从现在开始,您可以将loginBehavior更改为FBSDKLoginBehaviorSystemAccount,以便FBSDKLoginManager从Facebook Facebook设置中获取Facebooklogin用户;)

 FBSDKLoginManager *fbLogin = [[FBSDKLoginManager alloc] init]; fbLogin.loginBehavior = FBSDKLoginBehaviorSystemAccount; 

从FBSDKLoginManager:

声明 :FBSDKLoginBehaviorSystemAccount
说明 :如果该帐户对应用程序不可用(不是由用户configuration或由SDK确定),则此行为将回退到FBSDKLoginBehaviorNative。
注意 :如果该帐户对应用程序不可用(或者未由用户configuration或由SDK确定),则此行为将回退到FBSDKLoginBehaviorNative。

使用20150708在iOS 9中为我解决了它。

链接到SDK: https : //developers.facebook.com/resources/FacebookSDKs-iOS-20150708.pkg

如果您想要使用最新的SDK,以及iOS 9上的本机login行为

编辑FBSDKServerConfiguration.m的函数总是返回true

 - (BOOL)useNativeDialogForDialogName:(NSString *)dialogName { return @YES; } 

如果未安装Facebook应用程序,则回到Safari仍然可以正常工作

我注意到在这两个更新日志,以及:

Facebook SDK for iOS更新日志v4.x

(v4.6.0 – 2015年9月10日)此外,诸如Login,Like,Share对话框之类的SDK对话框会自动确定基于设备的最佳UI,包括SFSafariViewController而不是Safari。 按照我们的准备iOS 9指南。

适用于iOS的Facebook SDK Changelog v3.x

(v3.24.0 – 2015年9月10日)此外,诸如Login,Like,Share对话框之类的SDK对话框会自动确定基于设备的最佳UI,包括SFSafariViewController而不是Safari。 按照我们的准备iOS 9指南。

我在这里跟随文档: https : //developers.facebook.com/docs/ios/ios9

添加点2和3后,我的应用程序切换到本地Facebook应用程序login…

如果你想要一个模式打开,并从Safari或Facebook应用程序单独要求Facebook的凭据,只需使用最新的Facebook SDK,并设置login行为

 FBSDKLoginManager *fbLogin = [[FBSDKLoginManager alloc] init]; [login setLoginBehavior:FBSDKLoginBehaviorWeb]; 

这将使注销过程更方便,并且减less用户的混淆。

与CocoaPods一起使用这个版本:

 pod 'FBSDKCoreKit', '4.4.0' pod 'FBSDKLoginKit', '4.4.0' pod 'FBSDKShareKit', '4.4.0' 

在swift中当你select的login行为是Web时,然后打开webView popUp。 没有loginredirect到Safari浏览器

 // Try to login with permissions let fbLoginManager : FBSDKLoginManager = FBSDKLoginManager() fbLoginManager.loginBehavior = FBSDKLoginBehavior.Web 

您想要更改默认的login行为,如下所示

 FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init]; [login logOut]; 

login.loginBehavior = FBSDKLoginBehaviorSystemAccount;

 [login logInWithReadPermissions:@[@"public_profile", @"email", @"gender",@"user_friends"] fromViewController:self handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) { if (error) { // Process error } else if (result.isCancelled) { // Handle cancellations } else { // Now that we are authorized to view public profile and email, request that data get data from 'me' [[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:@{@"fields" : @"first_name, last_name,email,name,gender,birthday"}] startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { }]; } }]; 

如果用户在“ 设置”应用下没有填写自己的Facebook用户名和密码,则Safari会popup。

解! iOS 9.2.1 Facebook SDK 4.10.0

  1. 通过Cocoapods安装Facebook SDK

  2. 组:

    FBSDKLoginManager * loginManager = [[FBSDKLoginManager alloc] init]; loginManager.loginBehavior = FBSDKLoginBehaviorNative;

  3. 在〜/ FBSDKCoreKit / FBSDKServerConfigurationManager.m中

更改:

 NSOperatingSystemVersion iOS9Version = { .majorVersion = 9, .minorVersion = 0, .patchVersion = 0 }; BOOL useNativeFlow = ![FBSDKInternalUtility isOSRunTimeVersionAtLeast:iOS9Version]; 

至:

 BOOL useNativeFlow = YES; 
  1. 在〜/ FBSDKLoginKit / FBSDKLoginManager.m中

更改:

 BOOL useNativeDialog = [serverConfiguration useNativeDialogForDialogName:FBSDKDialogConfigurationNameLogin]; 

至:

 BOOL useNativeDialog = YES; 
  1. 在豆荚中查找:

    BOOL useNativeDialog

如果您想使用其他function,请进行相同的更改。 例如:应用程序邀请。

现在,应用使用原生Facebook应用login。

这个解决scheme适用于我。 希望能帮助到你。

PS不要忘记升级FB SDK后进行更改。