更新 iOS 9 和 Facebook sdk 4.6 后,登录窗口未打开

Posted

技术标签:

【中文标题】更新 iOS 9 和 Facebook sdk 4.6 后,登录窗口未打开【英文标题】:After update iOS 9 and Facebook sdk 4.6 the login window not open 【发布时间】:2015-09-24 22:20:17 【问题描述】:

我将我的 Xcode 更新为 7 ,将 Facebook 更新为 4.6 sdk。

这是我的警告:

Warning: Attempt to present <FBSDKContainerViewController: 0x159337700> on <UIAlertController: 0x159262700> whose view is not in the window hierarchy!

在我的项目中,BitCode 为 NO - 因为如果我将其设置为 Yes,我会收到此错误:

ld:'/Users/MyName/Desktop/MyProjectName/ProjectName/ProjectName/Resources/Frameworks/Fabric.framework/Fabric(Fabric.o)' does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target. for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

这是解析方法:

-(void)signInWithFacebookClicked

NSArray *permissions = [NSArray arrayWithObjects:@"email",@"user_friends", nil];
[PFFacebookUtils logInInBackgroundWithReadPermissions:permissions block:^(PFUser *user, NSError *error)
 
     if (!user) // The user cancelled the Facebook login
     
         NSLog(@"Uh oh. The user cancelled the Facebook login.");
     
     else if (user.isNew) // New user (not stored on DB) - User signed up and logged in through Facebook
     
         [self handleNewUser];
     
     else if (user) // the user is exist at DB
     
       // the user is exist at DB  
     
     else if (error)
     
        // showAlertOfSomethingWentWrong
     
 ];

这是 FBSDKGraphRequest :

-(void)handleNewUser


FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] initWithGraphpath:@"me" parameters:@@"fields": @"friends, first_name, gender, last_name, link, name, verified, picture, email"];
[request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error)
 
     NSMutableDictionary *userData = (NSMutableDictionary *)result;
];

我的问题是那一行:

[PFFacebookUtils logInInBackgroundWithReadPermissions:permissions block:^(PFUser *user, NSError *error)

在 iPhone 中运行永远不会进入这个块,在模拟器中这个工作正常。

【问题讨论】:

我认为这个链接 ***.com/a/29637893/4516605 可以帮助你: 不适合我)-:我编辑问题 您找到解决方案了吗? 【参考方案1】:

我有一个类似的问题,我试图在 FBSDKContainerViewController 顶部显示登录警报。

在本次通话中

- (void)logInWithReadPermissions:(NSArray *)permissions
          fromViewController:(UIViewController *)fromViewController
                     handler:(FBSDKLoginManagerRequestTokenHandler)handler;

Facebook 提供了自己的视图控制器,如果您不指定 fromViewController,“将尽可能自动确定最顶层的视图控制器。”

在您的情况下,听起来 Facebook 正试图在已解除的警报之上呈现,即使这不是被调用的呼叫。

【讨论】:

嗨!我也有同样的问题!但是在 LogInWithWritePermissions... 你是怎么解决的? @rickrvo - 我无法再访问我的代码了,但我想我要么指定了 fromViewController 以便 Facebook 不会推断出不正确的视图,要么我确保我呈现的警报不是不再显示。 我找到了解决方法!问题是 loginwithWritePermissions 是在另一个 loginWithReadPermissions 之后被调用的......而且 ios 在调用 loginWithWritePermissions 之前没有时间返回应用程序,所以它有一个不同的 viewController。一个快速解决方法是在 WritePermissions 调用之前添加 1 秒延迟,以便 iOS 可以更改回应用程序,然后第二个调用正常【参考方案2】:

您是否将 NSAppTransportSecurityLSApplicationQueriesSchemes 密钥添加到您的 info.plist?

【讨论】:

在模拟器中打开 Facebook 登录但在 iPhone 中没有打开窗口。【参考方案3】:

感谢@PastryPup 的回答,我确实找到了解决方法。

当试图在已关闭的警报视图上显示 Facebook 登录视图控制器时会显示警告。然而,切换到 UIAlertController 解决了这个问题。

我的印象是,这是因为 UIAlertController 是一个成熟的控制器,因此它存在于视图层次结构中,即使它已被关闭。

解决方案基本上是用 UIAlertController 替换 UIAlertView,并在 UIAlerController 的默认操作中调用[PFFacebookUtils logInInBackgroundWithReadPermissions:permissions block:^(PFUser *user, NSError *error)

Link on how to implement a UIAlertController

【讨论】:

【参考方案4】:

我做了一些技巧来完成这项工作。我不知道这是否是最好的方法。但我只是在活动执行之前创建了一个错误的布尔值(点击了 fb 按钮)。因此,在它返回后,只需将布尔值设置为 true 并在 ViewDidAppear 中设置一个条件,如果布尔值为 true,则继续执行您想要进入的下一个窗口。 希望对你有帮助!

【讨论】:

以上是关于更新 iOS 9 和 Facebook sdk 4.6 后,登录窗口未打开的主要内容,如果未能解决你的问题,请参考以下文章

通过cocoapods更新ParseUI和Facebook SDK

ParseFacebookUtilsV4 和 Facebook-iOS-SDK 4.0

如何在 iOS 9 fb sdk 4.8 或更高版本中从 facebook 获取好友列表?

Facebook SDK 登录永远不会在 iOS 9 上回调我的应用程序

无法识别的选择器在 iOS9 上的 facebook sdk 4.6 中发送到 facebook 登录管理器的实例

iOS:Facebook SDK AppInvite 错误 9