Swift:将Facebook用户与不在Parse Server上工作的现有PFUser链接起来

时间:2016-07-11 23:58:24

标签: ios swift facebook parse-platform parse-server

我试图将Facebook登录/注册集成到我的应用程序中,与标准登录/注册一起使用电子邮件。我正在使用Swift并已迁移到Parse Server。

我已经关注Facebook用户的Parse iOS指南。但是,使用Parse Server,根据所有教程和文档,Facebook集成并没有正常工作。

如何在应用中使用Facebook登录时,如何将现有的PFU与其Facebook帐户相关联?

我正在使用指南(https://parse.com/docs/ios/guide#users-linking)的此部分中的Swift代码将现有的PFUser与Facebook帐户相关联(请参阅下面的代码),但是,此代码由于某些未知原因而未执行,因此没有将他们通过电子邮件注册创建的用户现有帐户与具有相同电子邮件的Facebook帐户相关联。 为什么此代码没有执行?

更新isLinkedWithUser方法要求用户登录。但是,当用户退出/刚下载应用时,PFUser.currentUser()为零,因为用户未登录。因此,linkUserInBackground方法无法知道要将Facebook帐户链接到哪个PFUser。我相信这些方法现在没用了,因为它们要在事后(在他们登录后)链接。但我不想创建两个用户。 是否有Cloud Code示例或其他Swift逻辑来实现此目的?

我不确定问题是什么。感谢任何帮助!

来源:https://parse.com/docs/ios/guide#users-facebook-users

func fbLoginButtonTapped() {
    print("fbLoginButtonTapped")

    let permissions = ["public_profile", "email"]
    PFFacebookUtils.logInInBackgroundWithReadPermissions(permissions, block: {
        (user: PFUser?, error: NSError?) -> Void in

        if let user = user {
            if user.isNew {
                print("User signed up and logged in through Facebook!")
            } else {
                print("User logged in through Facebook!")

                // This API doesn't seem to be working with Parse Server
                if !PFFacebookUtils.isLinkedWithUser(user) {
                    PFFacebookUtils.linkUserInBackground(user, withReadPermissions: nil, block: {
                        (succeeded: Bool?, error: NSError?) -> Void in
                        if error == nil {
                            print("Woohoo, the user is linked with Facebook!")
                        } else {
                            print("User is not linked with Facebook.")
                        }
                    })
                }


                dispatch_async(dispatch_get_main_queue(), { () -> Void in
                    let viewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("HomeNavigationController") as! UINavigationController
                    self.presentViewController(viewController, animated: true, completion: nil)
                })

            }
        } else {
            print("User cancelled the Facebook login.")
        }           

}

1 个答案:

答案 0 :(得分:0)

您是否在Swift应用中正确配置了FBSDK?您应该在应用程序委托中添加一些处理FBSDK(https://developers.facebook.com/docs/ios/getting-started/)的回调。

此外,该应用程序是在parse.com上运行还是您是第一次在解析服务器上使用它?