Facebook登录 - iOS 9 - 没有Safari

问题描述 投票:32回答:11

在iOS 8中使用logInWithReadPermissions登录时效果很好,但是在更新到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(@"");
}];
ios objective-c facebook ios9 xcode7
11个回答
39
投票

似乎在iOS9 +中使用newests FB SDK无法获得以前的行为。您可以使用旧的SDK来执行此操作。这是facebook对这个问题的回应:enter image description here


0
投票

您想要更改默认登录行为,如下所示

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。


-1
投票

解! 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. 在Pods中查找: BOOL useNativeDialog

如果要使用其他功能,请进行相同的更改。例如:App Invite。

现在,应用程序使用原生Facebook应用程序登录。

这个解决方案适合我。希望能帮助到你。

附:升级FB SDK后别忘了进行更改。


15
投票

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

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

来自FBSDKLoginManager:

声明:FBSDKLoginBehaviorSystemAccount 描述:如果该应用程序无法使用该帐户(未由用户配置或由SDK确定),则此行为将回退到FBSDKLoginBehaviorNative。 注意:如果该应用程序无法使用该帐户(未由用户配置或由SDK确定),则此行为将回退到FBSDKLoginBehaviorNative。


9
投票

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

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


2
投票

如果要在iOS 9上使用最新的SDK以及本机登录行为

编辑FBSDKServerConfiguration.m的函数以始终返回true

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

如果没有安装Facebook应用程序,回归Safari仍然有效


1
投票

我注意到在两个更改日志中:

Facebook SDK for iOS Changelog v4.x

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

Facebook SDK for iOS Changelog v3.x

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


1
投票

我按照这里的文件:https://developers.facebook.com/docs/ios/ios9

添加第2点和第3点后,我的应用程序切换到原生的Facebook应用程序登录...


1
投票

如果你想要一个模态打开并从Safari或Facebook应用程序中单独询问facebook凭据,只需使用最新的facebook sdk并设置登录行为

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

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


0
投票

将此版本与CocoaPods一起使用:

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

0
投票

在swift中当您选择登录行为是Web时,然后打开webView popUp。没有登录重定向到safari浏览器

// Try to login with permissions
    let fbLoginManager : FBSDKLoginManager = FBSDKLoginManager()

    fbLoginManager.loginBehavior = FBSDKLoginBehavior.Web
© www.soinside.com 2019 - 2024. All rights reserved.