PFUser currentUser在使用Parse SDK登录Facebook后返回nil



我目前正在开发一款允许通过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一旦用户已经登录?

最新更新