Ios FBSDKLoginManager LOGINWITHREADPERCESSIONS:fromViewController:处理程序:未在应用程序首次运行时调用完成
我有一个启用Facebook登录的应用程序,由于某些原因,安装后第一次运行我的应用程序时不会调用带有ReadPermissions:fromViewController:handler:的FBSDKLoginManager登录。如果我只是关闭了我的应用程序(即使没有尝试登录Facebook或做任何事情:尝试先登录或不登录都不会改变任何事情),然后再打开它,它会工作得很好 为什么? (我已经检查了传递给方法的视图控制器不是nil,而是当前的视图控制器) 这是我的登录码:Ios FBSDKLoginManager LOGINWITHREADPERCESSIONS:fromViewController:处理程序:未在应用程序首次运行时调用完成,ios,facebook,facebook-login,ios10,fbsdkloginkit,Ios,Facebook,Facebook Login,Ios10,Fbsdkloginkit,我有一个启用Facebook登录的应用程序,由于某些原因,安装后第一次运行我的应用程序时不会调用带有ReadPermissions:fromViewController:handler:的FBSDKLoginManager登录。如果我只是关闭了我的应用程序(即使没有尝试登录Facebook或做任何事情:尝试先登录或不登录都不会改变任何事情),然后再打开它,它会工作得很好 为什么? (我已经检查了传递给方法的视图控制器不是nil,而是当前的视图控制器) 这是我的登录码: +(void)loginW
+(void)loginWithFacebookWithCompletion:(ULCompletion)completion{
[[[FBSDKLoginManager alloc] init] logInWithReadPermissions:FACEBOOK_READ_PERMISSIONS fromViewController:[ULMasterViewController instance] handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) {
if(result.token){
...
}
[...]
其余部分与此无关,因为根本不调用完成块(即使有错误也不调用)。我已经获得了FACEBOOK\u READ\u权限
硬编码:
#定义FACEBOOK的阅读权限(@[@“用户朋友”、“用户生日”、“电子邮件”、“用户照片”)
最后,
[ULMasterViewController实例]
是有效的(不是空的,它的视图在层次结构中(否则它会抱怨视图不在层次结构中,也会尝试这样做))。这在我的案例中起作用
1.在接口中创建FBloginManager实例
FBSDKLoginManager *manager
2.在ViewDidLoad中初始化
manager = [FBSDKLoginManager new]
3.最后使用FBLoginManager的此安装调用登录权限方法。这在我的案例中有效 1.在接口中创建FBloginManager实例
FBSDKLoginManager *manager
2.在ViewDidLoad中初始化
manager = [FBSDKLoginManager new]
3.最后使用此安装的FBLoginManager调用login permission方法。这没有多大关系,但请尝试单独创建FBSDKLoginManager对象,就像我为自己做的一样
FBSDKLoginManager *loginManager = [[FBSDKLoginManager alloc] init];
这没有多大关系,但请尝试单独创建FBSDKLoginManager对象,就像我为自己做的一样
FBSDKLoginManager *loginManager = [[FBSDKLoginManager alloc] init];
我遇到了这个问题,非常令人沮丧。修复它的关键在于我的应用程序代码生成了大量并发存在的FBSDKLoginManager对象。对代码进行重构以使用单例共享实例(而不是到处运行[FBSDKLoginManager new]
)为我消除了这个bug/问题
奇怪的是,我一直不明白为什么会这样。我使用调试器跟踪FBSDK代码,我发现唯一(非常)神秘的问题是,在loginWithReadPermissions
方法中,fromViewController
参数被设置为nil
,即使我传入了一个非nil
值。奇怪…我遇到了这个确切的问题,非常令人沮丧。修复它的关键在于我的应用程序代码生成了大量并发存在的FBSDKLoginManager对象。对代码进行重构以使用单例共享实例(而不是到处运行[FBSDKLoginManager new]
)为我消除了这个bug/问题
奇怪的是,我一直不明白为什么会这样。我使用调试器跟踪FBSDK代码,我发现唯一(非常)神秘的问题是,在
loginWithReadPermissions
方法中,fromViewController
参数被设置为nil
,即使我传入了一个非nil
值。奇怪…您是否编写了-(BOOL)应用程序:(UIApplication*)应用程序openURL。。。方法在appdeligate.m文件中?@SatishMavani是。它有适当的调用FBSDKLoginManager的功能,但在任何情况下都没有调用它(无论是在第一次运行“失败”时,还是在第二次运行成功登录时),您是否创建了使用facebook按钮登录的自定义操作?@SatishMavani您确切的意思是什么?我的意思是,您是否使用FBSDKLoginButton登录facebook?您是否编写了-(BOOL)应用程序:(UIApplication*)应用程序openURL。。。方法在appdeligate.m文件中?@SatishMavani是。它有适当的调用FBSDKLoginManager的功能,但在任何情况下都没有调用它(无论是在第一次运行“失败”时,还是在第二次运行成功登录时),您是否创建了使用facebook按钮登录的自定义操作?@SatishMavani您确切的意思是什么?我的意思是,你使用FBSDKLoginButton登录facebook了吗?哦,你的意思是在类范围内初始化实例,是的,成功了。哦,你的意思是在类范围内初始化实例,是的,成功了。我认为这不仅仅是单独创建,而是在类/全局范围内创建,而不是在方法范围内创建。可能Facebook SDK对manager的引用较弱,函数返回时就会发布,因此在回调时为零。我认为这不是单独创建,而是在类/全局范围创建,而不是在方法范围创建。可能,facebooksdk对manager的引用很弱,函数返回时就会释放它,因此在回调时为零。