iOS связать две учетные записи firebase

Я пытаюсь связать две учетные записи firebase, обычно пользователь входит в систему с помощью социальных сетей, электронной почты или учетной записи anonmus, а затем пользователь входит в систему с помощью телефона. Мне нужно связать эти два аккаунта.

родительский вид

функция в родительском представлении будет вызываться для регистрации с номером телефона

class welcomeView: UIViewController, FUIAuthDelegate {

 //stores current user
 var previosUser = FIRUser()


 override func viewDidLoad() {
    super.viewDidLoad()
  if let user = Auth.auth().currentUser {
        previosUser = user 
    }else{
        Auth.auth().signInAnonymously() { (user, error) in

            if error != nil {
                //handle error
            }
            previosUser = user!
        }
    }

 }






 func signUpWithPhone(){ 
    let vc = signUpWithPhoneView()
    vc.authUI?.delegate = self
    vc.auth?.languageCode = "ar"
    self.present(vc, animated: true) 

  }


}

в дочернем представлении (signUpWithPhoneView) я представляю FUIPhoneAuth

phoneProvider.signIn(withPresenting: self)

дочерний вид

import UIKit
import FirebaseAuthUI
import FirebasePhoneAuthUI

class signUpWithPhoneView: UIViewController {

 fileprivate(set) var authUI = FUIAuth.defaultAuthUI()
 var didload = false

 override func viewDidLoad() {
    super.viewDidLoad()
 }


 override func viewWillAppear(_ animated: Bool) {
    if !didload { // stops from looping 
        didload = !didload

        guard let authUI = self.authUI else {return}
        let phoneProvider = FUIPhoneAuth.init(authUI: authUI)
        self.authUI?.providers = [phoneProvider] 
     >> phoneProvider.signIn(withPresenting: self)

    }
 }


}

когда пользователь входит в систему, дочернее представление будет автоматически закрыто, и у меня есть функция didSignInWith, которая будет вызываться в родительском представлении. Мне нужно связать предыдущую учетную запись пользователя и учетную запись телефона пользователя

родительский вид

    func authUI(_ authUI: FUIAuth, didSignInWith user: FirebaseAuth.User?, error: Error?) {

    if let user = user{

        // link the the two accounts

    }else{

    }

}

Я попытался связать, используя

        let provider = PhoneAuthProvider.provider(auth: authUI.auth!)
        let credential = PhoneAuthProvider.credential(provider)


        previosUser.link(with: credential, completion: { (user, error) in
            if error != nil {
                print("this is linking two acounts error : " , error)
            }
        })

но была ошибка в учетных данных

in ...previosUser.link(with: *credential*, completion: ...

Cannot convert value of type '(String, String) -> PhoneAuthCredential' to expected 
argument type 'AuthCredential'

любая помощь будет оценена спасибо


person Jacob Kazal    schedule 29.10.2017    source источник


Ответы (1)


Вы получаете поставщика с помощью authUI.auth, а затем не используете его для получения учетных данных, и в настоящее время вы используете статическую ссылку метода экземпляра credential.

Сам метод экземпляра принимает две строки и возвращает AuthCredential, поэтому вы видите (String, String) -> AuthCredential. Вы должны создать учетные данные, используя идентификатор подтверждения и код, которые вы должны получить от пользователя.

guard let auth = authUI.auth else { return }

let provider = PhoneAuthProvider.provider(auth: auth)
let credential = provider.credential(
   withVerificationID: "XXXXXXXXXXXX", 
   verificationCode: "XXXXXX"
)

// ...
person Callam    schedule 29.10.2017
comment
спасибо, это очистило меня, хотя, как я могу получить withVerificationID, VerificationCode, если я использую firbsaeUI? используя FUIPhoneAuth.init(authUI: authUI).signIn(withPresenting: self) - person Jacob Kazal; 29.10.2017