ios - 将 Facebook 登录与 Parse 集成

标签 ios swift facebook parse-platform swift3

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

  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 ?? "---")")
            }
        }
    }
}

关于ios - 将 Facebook 登录与 Parse 集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45624497/

相关文章:

ios - 如何在iOS中格式化UINavigationItem的标题?

ios - GameKit iOS5 - 处理回合制游戏超时

objective-c - 场景的 Sprite 套件快速边界

swift - 未调用自定义委托(delegate)

facebook - 拒绝在框架中显示 facebook.com/xti.php,因为它将 X-Frame-options 设置为 sameorigin

android - Facebook api 无效的应用 ID

Facebook 开放图谱对象类型 - 文章?

iphone - 我怎样才能避免来自 AlassetLibrary 的位置服务?

ios - Swift 3 - 将 UIBarButtonItem 添加到每个 ViewController 上的导航栏而无需重复代码

ios - 完全滑动可删除 UITableViewCell,部分滑动可显示选项