在我的应用程序中,我通过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().结果,该应用程序认为我取消了登录并给了我一个零用户和错误.