我目前正在使用iOS 11 beta(Xcode 9 beta 4),以便将新功能集成到我的应用程序中 . 我有Facebook登录(Facebook graphAPI版本2.8,sdkVersion 4.17.0) .

Apple在iOS 11中删除了社交帐户,现在,在测试我的应用时,我在Facebook登录流程中遇到了奇怪的行为 .

它是如何工作的:用户按下了“使用Facebook登录”按钮,如果他在设备上有Facebook帐户,他会自动进入下一个屏幕 . 如果他没有帐户 - 打开Safari并要求用户登录Facebook或打开Facebook应用程序,并将用户重定向到我的应用程序 .

我在iOS 11的设备(iPhone 5s)上有什么奇怪的行为:

  • 我按下“使用Facebook登录”按钮 .

  • 使用选项打开Safari:使用Facebook应用程序登录,使用电话或邮件登录 .

  • 我按Facebook登录应用程序 .

  • 出现警报:在Facebook中打开 .

  • 我按开 .

  • 打开Facebook应用程序 . 此刻没有任何反应 .

  • 所以我必须按回按钮回到我的应用程序 . 我看到Safari屏幕并重复步骤2-5 .

  • 之后我看到确认登录屏幕:您之前登录过Facebook . 我按下按钮“继续” .

  • 登录后我被重定向回我的应用程序并转到下一个屏幕 .

在步骤6之后的某些时候,我转到步骤8和9.这是随机发生的 . 我不明白为什么 .

我在iOS 10.3,10.2(iPhone 6 Plus,iPhone 7)和FBSDKLoginBehaviorNative(在设置中使用Facebook帐户且在设置中没有Facebook帐户)的其他设备上进行了测试 . 在其他设备上,当我按下“使用Facebook登录”按钮时,我会看到具有确认登录屏幕的Safari(如步骤8中所述) .

这是Facebook登录的代码,我使用:

-(void)loginWithFacebook
{
FBSDKLoginManager *loginManager = [[FBSDKLoginManager alloc] init];
 loginManager.loginBehavior = FBSDKLoginBehaviorSystemAccount;
[loginManager logInWithReadPermissions: @[ @"email", @"user_birthday", @"user_friends" ]  fromViewController: self handler: ^(FBSDKLoginManagerLoginResult *result, NSError *error) 
{
            if(error == nil)
            {
               //  here I get user data and go to next screen
            }
            else
            {
                //here I show error alert to user
            }
        }];
    }
}

在AppDelegate中:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//…
[[FBSDKApplicationDelegate sharedInstance] application: application didFinishLaunchingWithOptions: launchOptions];
//…
}

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
return [[FBSDKApplicationDelegate sharedInstance] application: application
                                                                        openURL: url
                                                                  sourceApplication: sourceApplication
                                                                          annotation: annotation];
}

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary *)options
{
return [[FBSDKApplicationDelegate sharedInstance] application:app openURL:url options: options];
}

所以,我的问题是,你是否在iOS 11上遇到过这种行为?我应该怎么做(如果我可以做某事)来解决它?在iOS 11的新版本发布后,用户必须通过所有这些步骤才能登录Facebook吗?

感谢您的回复和帮助 .