Swift - Ошибка при входе в Facebook - PullRequest
0 голосов
/ 28 мая 2018

просто для начала я посмотрел на множество примеров, но не могу найти решение.Ну, я думал, что сделал, но, похоже, это не работает.

Я пытаюсь использовать метод авторизации Firebase для входа в Facebook, который работает, кстати.Моя проблема заключается в том, что я хочу связать учетные данные аутентификации пароля и учетные данные авторизации facebook, когда метод facebook выдает ошибку, что электронная почта / учетные данные уже существуют.Я прочитал здесь , что я мог бы использовать error.email, но это не дает мне возможность получить доступ к email.error.Я мог что-то упустить, и я потратил много времени, пытаясь выяснить это.

Вот мой код:

func signInFacebookUser() {
    let fbLoginManager = FBSDKLoginManager()
    fbLoginManager.logIn(withReadPermissions: ["public_profile", "email"], from: self) { (result, error) in
        if let error = error {
            self.errorMessagePopUp(title: "Failed to login", message: error)
            return
        }

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

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

   Auth.auth().signIn(with: credential, completion: { (user, error) in
        if let error = error {

        let errCode = AuthErrorCode(rawValue: error._code)!

        switch errCode {

              case .accountExistsWithDifferentCredential:
              // somehow obtain email right here.
              self.showSigninForm(attributes: self.attributes(), style: .light)
              return

             default:
             return
          }
       }

       self.performSegue(withIdentifier: "signInBtnPressed", sender: nil)
    })
  }
}

Ответы [ 2 ]

0 голосов
/ 28 мая 2018

Это работает для меня Swift4

@objc func loginButtonClicked() {
    var alertController = UIAlertController()
    let loginManager = LoginManager()
    loginManager.logIn(readPermissions: [ReadPermission.email], >viewController: self, completion: {loginResult in
                    switch loginResult {
                    case .failed(let error):
                        print(error)
                    case .cancelled:
                        print("User cancelled login.")
                    case .success(_, _, let accessToken):
                        print(accessToken)

                    }

    })
}
 func getDataUser() {
        let request = GraphRequest(graphPath: "me?fields=first_name,last_name,email",
                                   parameters:[:],
                                   httpMethod: .GET)
        request.start { httpResponse, result in
            switch result {
            case .success(let response): do {
                print("Graph Request Succeeded: \(response)")
                let dicval = response.dictionaryValue
                let email = dicval?.keys
                print("Graph Request Succeeded: \(String(describing: email))")
                }
            case .failed(let error):
                print("Graph Request Failed: \(error)")
            }

        }
    }
}
0 голосов
/ 28 мая 2018

Попробуйте этот код

@IBAction func facebookLoginButtonTapped(_ sender: UIButton) {
        if Utility.checkInternet(){
            let fbLoginManager: FBSDKLoginManager = FBSDKLoginManager()
            fbLoginManager.logIn(withReadPermissions: ["email", "public_profile"], from: self) { (result, error) in
                if (error == nil){
                    let fbLoginResult: FBSDKLoginManagerLoginResult = result!
                    if fbLoginResult.grantedPermissions != nil {
                        if(fbLoginResult.grantedPermissions.contains("email")){
                            self.facebookLogin()
                        }
                    }
                }
            }
        }
        else{
            Utility.showAlert("Connection Error!", message: "Please check internet connection and retry.", viewController: (self.window?.rootViewController)!)
        }
    }

func facebookLogin() {
        Utility.showProgress("")
        if((FBSDKAccessToken.current()) != nil) {

            FBSDKGraphRequest(graphPath: "me", parameters: ["fields":"id, name, first_name, last_name, picture.type(large), email "]).start(completionHandler: { (connection, result, error) in
                if result == nil {
                }
                else{
                    self.userResults = result as! [String : AnyObject]
                    self.email = (self.userResults["email"] as? String) ?? ""
                    if (self.email != "") {

                    }
                    else{
                        Utility.showAlert("Login Faild", message: error?.localizedDescription, viewController: self)
                    }
                }
            })
        }
    }
...