目标c - iOS 10 Facebook登录空白屏幕

Nir*_*Nir 11 objective-c ios facebook-login facebook-ios-sdk ios10

在我的应用程序中,可以选择使用Facebook登录.

在iOS 9.3上,它可以正常工作.

当我在iOS 10.0.1上测试时,它会显示一个空白屏幕. 在此输入图像描述

我正在使用此代码启动登录过程:

- (void)FacbookLoginButtonPressed:(id)sender {

    [self showLoader];

    FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init];
    [login
     logInWithReadPermissions: @[@"public_profile", @"email"]
     fromViewController:self
     handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) {
         if (error) {
             NSLog(@"Process error");
             [self hideLoader];
             [self showError:@"Error" message:@"Please try to use other login option"];
         } else if (result.isCancelled) {
             NSLog(@"Cancelled");
             [self hideLoader];
             [self showError:@"Error" message:@"Please try to use other login option"];
         } else {
             [self loginButton:sender didCompleteWithResult:result error:error];
             NSLog(@"Logged in");
         }
     }];
}
Run Code Online (Sandbox Code Playgroud)

self是我的ViewController调用loginViewController,显示按钮,它继承自UIViewController

我的应用程序使用此库进行幻灯片导航:https://github.com/aryaxt/iOS-Slide-Menu

loginViewController屏幕显示有两个选项:

1.从常规屏幕(继承自UIViewController),有一个按钮,单击此代码运行:

UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController *vc =  [sb instantiateViewControllerWithIdentifier:@"loginScreen";
[self presentViewController:vc animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)

这项工作很好,我能够成功登录Facebook.

2.从其他屏幕也继承UIViewController,但这个屏幕是幻灯片菜单,我有这个代码AppDelegate

UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
MenuViewController *menu =  [sb instantiateViewControllerWithIdentifier:@"MenuViewController";
[SlideNavigationController sharedInstance].rightMenu = menu;
Run Code Online (Sandbox Code Playgroud)

使用此选项,Facebook登录不起作用(空白屏幕)

我为了尝试使它有效的行动:

  1. 更新至最新的Facebook SDK -使用此:https://developers.facebook.com/docs/ios/getting-started
  2. 启用钥匙串共享 - 使用此:https://stackoverflow.com/a/38799196/867694

loginViewController从菜单(第二个选项)出现时,我在日志中唯一的东西是:

Presenting view controllers on detached view controllers is discouraged <loginViewController: 0x7622fb0>.
Run Code Online (Sandbox Code Playgroud)

我能做什么?

Nir*_*Nir 10

我终于修复了它,在MenuViewController我改变了呈现方式loginViewController:

[self.view.window.rootViewController presentViewController:vc animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)


小智 10

在iOS 10中,您需要另一个openURL实现:

#ifdef __IPHONE_9_0
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary *)options {

  [[FBSDKApplicationDelegate sharedInstance] application:application openURL:url sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey] annotation:options[UIApplicationOpenURLOptionsAnnotationKey]];

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

  return YES;
}
#endif
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

4196 次

最近记录:

7 年,5 月 前