2017-08-10 32 views
0

整合Facebook登录在我的Xcode项目我已经有了,他们创建了一个使用用户的用户名在功能的标志和密码。现在我想在该项目中集成Facebook登录。我能够在Facebook上撰写简单的注册表,将项目连接到他们的Facebook。这一步我就两个问题难倒后:使用Parse

  1. 要通过实拍一个用户,我需要保存某种形式的独特标识,使他们可以通过用户再次登录时。但我不知道这个标识是什么或从哪里得到。

  2. 我只知道如何通过自己的用户名和密码,我保存在解析去他们的个人资料登录用户。这与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") 
     } 

回答

2

如果您使用解析,有一个名为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 ?? "---")") 
      } 
     } 
    } 
} 
+0

在哪里/什么我应该从他们的Facebook个人资料中保存唯一的身份证明,以便我知道当他们使用Facebook登录时要提供哪个账户。截至目前,人们输入他们的用户名和密码登录,并根据用户名提出他们的个人资料。但是,如果他们使用Facebook登录,我将不会拥有该初始用户名。 **我该怎么救?** – fphelp

+0

按简介你的意思是在分析一个用户?一旦你使用'PFFacebookUtils.logInInBackground',图书馆将在必要时在用户表中创建一个新的行。从那里你可以访问所有用户的详细信息。如果您确实需要用户名,您可以向用户提出昵称。 – nathan

+0

通过'PFFacebookUtils.logInInBackground'返回的用户变量是'PFUser?'。您不需要用户名,但是如果您的应用程序需要用户名,则需要询问昵称(用户名是由Parse在使用第三方认证服务时自动生成的)。 – nathan