2017-10-29 9 views
1

私は2つのfirebaseアカウントをリンクしようとしています。通常、ユーザーはソーシャルメディアや電子メール、またはanonmusアカウントでログインし、ユーザーは電話でサインインします。私はこれらの2つのアカウントをリンクする必要があります。iOSリンクの2つのfirebaseアカウント

親ビュー

親ビュー内の関数は、電話番号と子ビュー(signUpWithPhoneView)で

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) 

    } 


} 

をサインアップするために呼び出されます私は

phoneProvider.signIn(withPresenting: self) 
FUIPhoneAuthを提示

子ビュー

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' 

すべてのヘルプは、あなたがauthUI.authで、プロバイダを取得して、資格を得るためにそれを使用していない、あなたは現在、インスタンスメソッドcredentialの静的参照を使用しているされている おかげ

答えて

0

をいただければ幸いです。

インスタンスメソッド自体は2つの文字列を取り、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

私はfirbsaeUIを使用している場合、withVerificationID、verificationCodeはどのようにして収集できますか? を使用 FUIPhoneAuth.init(authUI:authUI).signIn(withPresenting:self) –

関連する問題