2017-10-29 101 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) –