iOS链接2 firebase帐户

iOS链接2 firebase帐户,ios,swift,firebase,hyperlink,account,Ios,Swift,Firebase,Hyperlink,Account,我正在尝试链接两个firebase帐户,通常用户会使用社交媒体或电子邮件或anonmus帐户登录,然后用户会使用手机登录。我需要把这两个账户联系起来 父视图 import UIKit import FirebaseAuthUI import FirebasePhoneAuthUI class signUpWithPhoneView: UIViewController { fileprivate(set) var authUI = FUIAuth.defaultAuthUI() var d

我正在尝试链接两个firebase帐户,通常用户会使用社交媒体或电子邮件或anonmus帐户登录,然后用户会使用手机登录。我需要把这两个账户联系起来

父视图

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)

    }
 }


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

    if let user = user{

        // link the the two accounts

    }else{

    }

}
将调用父视图中的函数以使用电话号码注册

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)

    }
 }


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

    if let user = user{

        // link the the two accounts

    }else{

    }

}
当用户登录时,子视图将自动取消,并且我有
didSignInWith
功能,该功能将在父视图中调用。我需要链接以前的用户帐户和用户电话帐户

父视图

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)

    }
 }


}
    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)
            }
        })
但凭证中有错误

…previosUser.link中(带有:*凭证*,完成:…

Cannot convert value of type '(String, String) -> PhoneAuthCredential' to expected 
argument type 'AuthCredential'
任何帮助都将不胜感激
谢谢

您正在使用
authUI.auth
获取提供程序,然后不使用它获取凭据,并且您当前正在使用实例方法
凭据的静态引用

实例方法本身接受两个字符串并返回一个
AuthCredential
,这就是您看到
(字符串,字符串)->AuthCredential
的原因。您必须使用必须从用户收集的验证ID和代码创建凭据

guard let auth = authUI.auth else { return }

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

// ...

感谢这为我清除了它,不过,如果我使用的是firbsaeUI?使用FUIPhoneAuth.init(authUI:authUI.sign)(withPresenting:self),如何收集withVerificationID,verificationCode