将 Facebook 登录与 Parse 集成

Integrate Facebook Login with Parse

在我的 Xcode 项目中,我已经有一个使用用户创建的用户名和密码的登录功能。现在我想在项目中集成一个 Facebook 登录。我能够编写简单的 Facebook 注册,它将项目连接到他们的 Facebook。在这一步之后,我遇到了 2 个问题:

  1. 要通过 Facebook 注册用户,我需要保存某种形式的唯一标识,以便他们在登录时可以再次使用它。但是我不知道这个标识是什么,也不知道从哪里得到的。

  2. 我只知道如何通过我保存在 parse 中的用户名和密码登录用户,以获取他们的个人资料。这如何与 Facebook 一起使用?

谁能帮我解决这两个问题?

我已经复制了我的 Facebook 登录代码:

 @IBOutlet var facebookSignUpButton: FBSDKLoginButton!
    var fullnameFB = String()
    var emailFB = String()
    var isFBSignUp = Bool()

    override func viewDidLoad() {
            super.viewDidLoad()

            signUpWithFacebook()
        }

        //
        // Facebook Sign Up Functions =>
        //
        func signUpWithFacebook() {
            facebookSignUpButton.readPermissions = ["email", "public_profile"]
            facebookSignUpButton.delegate = self
            self.view.addSubview(facebookSignUpButton)

        }
        //what to do when logged in
        func loginButton(_ loginButton: FBSDKLoginButton!, didCompleteWith result: FBSDKLoginManagerLoginResult!, error: Error!) {
            if error != nil { //if theres an error
                print(error)
            } else if result.isCancelled { // if user cancels the sign up request
                print("user cancelled login")
            } else {
                if result.grantedPermissions.contains("email") {
                    if let graphRequest = FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "email, name"]) {
                        graphRequest.start(completionHandler: { (connection, result, error) in
                            if error != nil {
                                print(error?.localizedDescription ?? String())
                            } else {
                                if let userDetails = result as? [String: String]{
                                    print(userDetails)
                                    self.fullnameFB = userDetails["name"]!                                       
                                    self.emailFB = userDetails["email"]!
                                    self.isFBSignUp = true                                
                                }
                                self.performSegue(withIdentifier: "SignUpP2VC", sender: nil)
                            }
                        })
                    }
                } else {
                    print("didnt get email")
                    createAlert(title: "Facebook Sign Up", message: "To signup with Facebook, we need your email address")                
                }
            }
        }
        //logout function
        func loginButtonDidLogOut(_ loginButton: FBSDKLoginButton!) {
            print("logged out")
        }

如果您使用的是 Parse,则有一个名为 PFFacebookUtils 的帮助程序库可以处理用户链接

func loginButton(_ loginButton: FBSDKLoginButton!, didCompleteWith result: FBSDKLoginManagerLoginResult!, error: Error!) {
    if error != nil { //if theres an error
        print(error)
    } else if result.isCancelled { // if user cancels the sign up request
        print("user cancelled login")
    } else {
        // TODO: guard against nil => result?.token
        PFFacebookUtils.logInInBackground(with: result!.token!) { (user, error) in

            if let user = user {

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

                // Get user email using FBSDKGraphRequest
            } else {
                    print("Error while trying to login using Facebook: \(error?.localizedDescription ?? "---")")
            }
        }
    }
}