Facebook iOS Login API 2.0 (SDK 3.15.1)



我对Facebook的2.0登录api非常恼火。对于我(开发人员)和其他开发人员来说,它运行得非常好。但是对于一些用户来说,Login失败了。对于登录过程,我这样做:

    [FBSession openActiveSessionWithReadPermissions:self.readPermissions
                                       allowLoginUI:YES
                                  completionHandler:^(FBSession *session, FBSessionState status, NSError *error)
     {
         dispatch_async(dispatch_get_main_queue(), ^{
             _self.loginInProcess = NO;
             [_self _setSessionState:status error:error];
         });
     }];

正常情况下,FB应用程序打开,用户可以选择接受/拒绝访问。然而,对于一些用户来说,这个屏幕永远不会出现。相反,应用程序会切换到其他应用程序,但一旦它进入Facebook应用程序,它就会立即切换回源应用程序,但没有出现错误。因为我无法在任何自己的设备上复制问题,所以我无法确定,但似乎从未调用完成处理程序。因此,该应用程序处于不确定状态,等待Facebook批准/拒绝从未出现的请求。

注意,我在app委托中有所有正确的调用:
- (BOOL)application:(UIApplication *)application
            openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication
         annotation:(id)annotation {
    BOOL wasHandled = [FBAppCall handleOpenURL:url sourceApplication:sourceApplication];
    return wasHandled;
}

有人处理过类似的事情吗?

所以,事实证明Facebook返回的是正确的数据。为了发现这一点,我不得不创建一堆UIAlertView,推出一个新的测试版,并让一个用户给我发送这些警报的屏幕截图,这样我就可以看到到底发生了什么……这是我能在iPhone上找到的最接近远程调试的东西。

最后,结果是我设置的KVO没有触发(等待登录过程完成)。我还是不知道它为什么不开火。它可以在95%的设备上运行,但我使用的代码来自之前的开发人员,结果发现其中有相当多的地雷。我通过创建一个块完成处理程序并在登录过程完成时使用它来解决这个问题。

最新更新