更新 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】:您是否将 NSAppTransportSecurity 和 LSApplicationQueriesSchemes 密钥添加到您的 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 上回调我的应用程序