Как войти в систему пользователь бросил Facebook и сохранить данные этого пользователя в Cloud Firestore - PullRequest
0 голосов
/ 31 марта 2020

Я пытаюсь войти в свое приложение через Facebook, а затем сохранить пользователей в моем облачном хранилище пожаров. Я просто не очень уверен, как об этом go. Это код, который у меня есть сейчас

 @IBAction func buttTapped(_ sender: Any) {


    let fbLoginManager = LoginManager()
          fbLoginManager.logIn(permissions: ["public_profile", "email"], from: self) { (result, error) in
              if let error = error {
                  print("Failed to login: \(error.localizedDescription)")
                  return
              }

              guard let accessToken = AccessToken.current else {
                  print("Failed to get access token")
                  return
              }

              let credential = FacebookAuthProvider.credential(withAccessToken: accessToken.tokenString)

              // Perform login by calling Firebase APIs
              Auth.auth().signIn(with: credential, completion: { (user, error) in
                  if let error = error {
                      print("Login error: \(error.localizedDescription)")
                      let alertController = UIAlertController(title: "Login Error", message: error.localizedDescription, preferredStyle: .alert)
                      let okayAction = UIAlertAction(title: "OK", style: .cancel, handler: nil)
                      alertController.addAction(okayAction)
                      self.present(alertController, animated: true, completion: nil)

                      return
                  }

                  // Present the main view
                self.dismiss(animated: true, completion: nil)

              })

          }

}//

Какой код мне нужно добавить, чтобы получить определенные значения, такие как адрес электронной почты и имя, и сохранить их в Cloud Firestore. Приведенное ниже изображение является примером того, что я использую при регистрации по электронной почте. enter image description here

1 Ответ

1 голос
/ 31 марта 2020

Вы только что завершили аутентификацию на Facebook и получили токен доступа. Чтобы получить информацию пользователя publi c, вам нужен графовый запрос. Полный код запроса аутентификации Facebook и Graph будет выглядеть так:

func facebookLogin(){
     let loginManager = LoginManager()
       loginManager.logIn(permissions: [.publicProfile, .email], viewController: self) { loginResult in
                switch loginResult {
                case .failed(let error):
                    print(error)
                case .cancelled:
                    print("User cancelled login.")
                case .success(let grantedPermissions, let declinedPermissions, let accessToken):
                 print("Logged in!")
                 self.fetchUserProfile()
              }
        }

}

func fetchUserProfile() {
     let graphRequest : GraphRequest = GraphRequest(graphPath: "me", parameters: ["fields":"id, email, name, picture.width(480).height(480)"])

    graphRequest.start(completionHandler: { (connection, result, error) -> Void in
         if ((error) != nil)
        {
             print("Error took place: \(error ?? "" as! Error)")
        }
        else
        {
            let result = result as! Dictionary<String, Any>
            let picture = result["picture"] as! Dictionary<String, Any>
            let dataObj = picture["data"] as! Dictionary<String,Any>

            var emailValue = result["email"] as! String?

            if emailValue == nil {
                emailValue = ""
            }
            let name = result["name"] as? String
            let id = result["id"] as? String
            let imageUrl = result["url"] as? String

            // Update data to firestore 

        }
    })
}

Надеюсь, вы понимаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...