我目前正在开发一款允许通过Facebook/Parse登录的iOS应用程序。登录流程如下所示:
-
点击登录按钮,打开Facebook登录窗口;
-
用户登录并授予Facebook权限;
-
app检索Facebook accessToken信息;
-
app执行[PFFacebookUtils logInInBackGroundWithAccessToken:(accessToken) ^block{}]进行Parse登录认证;
-
app进入一个视图,并尝试执行一个查询,从Parse获取与该用户相关的数据。
问题是:在logInInBackgroundWithAccessToken执行后,[PFUser currentUser]返回nil,我得到一个"不能做类型的比较查询:(null)"错误。
Ok!解决它!
在深入研究了代码之后,我意识到
[PFFacebookUtils logInInBackgroundWithAccessToken:(accessToken) block:^(nullable__block){}];
回调未被执行,原因不明。
为了解决这个问题,我在视图的-viewDidLoad方法中添加了一个检查,看看是否有一个有效的[FBSDKAccessToken currentAccessToken],但不是一个有效的[PFUser currentUser],如果是这样,我强制执行该方法。
如果你需要更彻底的解释,不要犹豫,留下你的评论!谢谢!
if ((currentUser != nil)) {
if (PFFacebookUtils.isLinkedWithUser(currentUser!)) {
proccessCurrent(currentUser!)
} else {
PFFacebookUtils.linkUserInBackground(currentUser!, withReadPermissions: self.facebookReadPermissions, block: {(success, error) in
if (success) {
self.proccessCurrent(currentUser!)
} else {
self.presentWalkThroughViewController()
}
})
}
} else {
//var currentToken: FBSDKAccessToken = FBSDKAccessToken.currentAccessToken()
if (FBSDKAccessToken.currentAccessToken() == nil) {
self.presentWalkThroughViewController()
} else {
var currentToken: FBSDKAccessToken = FBSDKAccessToken.currentAccessToken()
PFFacebookUtils.logInInBackgroundWithAccessToken(currentToken, block: {(user, error) in
if (error == nil) {
user?.pinInBackgroundWithBlock({(success, error) in
if (success) {
self.proccessCurrent(user!)
} else {
self.presentWalkThroughViewController()
}
})
} else {
self.presentWalkThroughViewController()
}
})
}
}
方法processCurrentUser,继续处理我的程序执行和presentWalkThroughViewController呈现登录屏幕。这是一个安全的方式来处理跳过登录屏幕上的facebook一旦用户已经登录?