问题是我没有在 AppDelegate 调用中调用 FBAppCall.handleOpenURL() :
application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject?)
当我从网络身份验证回来时。通过不调用 FBAppCall.handleOpenURL(),Parse 认为我们取消了身份验证。 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()。结果,应用程序认为我取消了登录,并给了我一个零用户和错误。