我有一个Facebook登录的应用程序,由于某种原因,FBSDKLoginManager logInWithReadPermissions: fromViewController: handler:
在安装后的第一次运行时没有被调用。如果我只是杀死我的应用程序(即使没有尝试登录Facebook或做任何事情:尝试登录第一次打开或不做任何改变),然后再次打开它,它会完美地工作。
为什么?
(我已经检查了传递给方法的视图控制器不是nil并且是当前视图控制器)
这是我的登录码:
+(void)loginWithFacebookWithCompletion:(ULCompletion)completion{
[[[FBSDKLoginManager alloc] init] logInWithReadPermissions:FACEBOOK_READ_PERMISSIONS fromViewController:[ULMasterViewController instance] handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) {
if(result.token){
...
}
[...]
其余部分是不相关的,因为完成块根本没有被调用(甚至没有错误)。我已经硬编码了FACEBOOK_READ_PERMISSIONS
:
#define FACEBOOK_READ_PERMISSIONS (@[@"user_friends", @"user_birthday", @"email", @"user_photos"])
最后,[ULMasterViewController instance]
是有效的(不是nil,并且在层次结构中有其视图(否则它会抱怨视图不在层次结构中,也尝试过))。
这在我的案例中起作用。
1 .在接口中创建FBloginManager实例
FBSDKLoginManager *manager
2 .初始化在ViewDidLoad。
manager = [FBSDKLoginManager new]
我遇到了这个确切的问题,这是非常令人沮丧的。修复它的关键是我的应用程序代码正在制作许多并发存在的FBSDKLoginManager对象。重构我的代码以使用单例共享实例(而不是到处运行[FBSDKLoginManager new]
)为我消除了这个bug/问题。
不可思议的是,我一直不明白为什么会这样。我使用调试器跟踪FBSDK代码,我发现的唯一(非常)神秘的问题是,从loginWithReadPermissions
方法内部,fromViewController
参数被设置为nil
,即使我传递的是非nil
值。<<em>奇怪/em>…
这是不太相关,但尝试分别创建FBSDKLoginManager对象,因为我已经做了同样的工作,为我。
FBSDKLoginManager *loginManager = [[FBSDKLoginManager alloc] init];