iOS / Swift:PFFacebookUtils.logInWithPermissions返回nil用户和错误

在我的应用程序中,我通过Parse的PFFacebookUtil类登录用户.如果用户存在于手机上(即在设置> Facebook中登录到FB),则一切都按预期工作.

但是如果他们没有通过设置登录,那么用户将被带到Web视图以登录.在用户输入他们的凭据后,返回块应该接收用户或错误,但在这种情况下,用户和错误是零.

    let permissionsArray = ["user_about_me", "email"];
    PFFacebookUtils.logInWithPermissions(permissionsArray, block: {
        (user: PFUser!, error: NSError!) -> Void in
        if user != nil {
              //successful login
        } else if error != nil{
              //unsuccessful login 
        } else {
              //this is what I get
        }
    }

我们目前正在运行Parse 1.4.2

最佳答案 问题是我没有在AppDelegate调用中调用FBAppCall.handleOpenURL():

application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject?) 

当我从网络身份验证回来.通过不调用FBAppCall.handleOpenURL(),Parse认为我们取消了我们的身份验证.解析文档声明“用户和错误都是零 – 如果用户通过切换回应用程序取消了身份验证”.

该方法应该调用FBAppCall.handleOpenURL将身份验证传递回应用程序.在我的情况下,我也使用这个调用深度链接,我没有正确处理逻辑.我最初检查sourceApplication对象是否是“com.facebook.Facebook”.如果它返回true,那么我调用了FBAppCall.handleOpenURL().当我今天调试它时,我注意到源应用程序实际上是“com.apple.mobilesafari”.检查sourceApplication不是最好的检查(尝试类似url.host),但在这种情况下,这是问题.

这是固定的代码片段:

func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject?) {
    if (url.host == DEEP_LINKING_HOST) {
       //Deep linking code here...
    } else if sourceApplication == "com.apple.mobilesafari" {
       return FBAppCall.handleOpenURL(url, sourceApplication: sourceApplication, withSession: PFFacebookUtils.session())
   }
}

这里的要点是我没有调用FBAppCall.handleOpenURL().结果,该应用程序认为我取消了登录并给了我一个零用户和错误.

点赞