2017-10-29 102 views
1

我試圖鏈接兩個Firebase帳戶,通常用戶將使用社交媒體或電子郵件或anonmus帳戶登錄,然後用戶將用手機登錄。我需要鏈接這兩個帳戶。iOS鏈接兩個Firebase帳戶

父視圖

父視圖的功能將被稱爲與電話號碼

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函數。我需要連接我嘗試用

 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) 
      } 
     }) 

鏈接以前的用戶帳戶和用戶手機賬戶中

父視圖

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

    if let user = user{ 

     // link the the two accounts 

    }else{ 

    } 

} 

但在證書

有錯誤

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

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

任何幫助,將不勝感激 感謝

回答

0

您與authUI.auth得到供應商,然後不使用它來獲得證書,目前正在使用的實例方法credential的靜態參考。

實例方法本身需要兩個字符串並返回AuthCredential這就是爲什麼你會看到(String, String) -> AuthCredential。您必須使用您必須從用戶處收集的驗證ID和代碼創建憑證。

guard let auth = authUI.auth else { return } 

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

// ... 
+0

感謝這清除了我,雖然,我如何收集withVerificationID,verificationCode如果我使用firbsaeUI? 使用 FUIPhoneAuth.init(authUI:authUI).signIn(withPresenting:self) –