菜鸟教程小白 发表于 2022-12-11 19:08:52

iOS链接两个firebase帐户


                                            <p><p>我正在尝试链接两个 firebase 帐户,通常用户会使用社交媒体或电子邮件或匿名帐户登录,然后用户会使用电话登录。我需要链接这两个帐户。 </p>

<p><strong>父 View </strong></p>

<p>将调用父 View 中的函数以使用电话号码进行注册</p>

<pre><code>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 = &#34;ar&#34;
    self.present(vc, animated: true)

}


}
</code></pre>

<p>在 subview (signUpWithPhoneView)中,我展示了 FUIPhoneAuth </p>

<pre><code>phoneProvider.signIn(withPresenting: self)
</code></pre>

<p><strong> subview </strong></p>

<pre><code>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 =
   &gt;&gt; phoneProvider.signIn(withPresenting: self)

    }
}


}
</code></pre>

<p>当用户登录时, subview 将自动关闭,我有 <code>didSignInWith</code> 函数,该函数将在父 View 中调用。我需要关联之前的用户账号和用户手机账号</p>

<p><strong>父 View </strong></p>

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

    if let user = user{

      // link the the two accounts

    }else{

    }

}
</code></pre>

<p>我尝试使用链接</p>

<pre><code>      let provider = PhoneAuthProvider.provider(auth: authUI.auth!)
      let credential = PhoneAuthProvider.credential(provider)


      previosUser.link(with: credential, completion: { (user, error) in
            if error != nil {
                print(&#34;this is linking two acounts error : &#34; , error)
            }
      })
</code></pre>

<p>但是凭证有错误</p>

<p>在 <code>...previosUser.link(with: *credential*, completion: ...</code> </p>

<pre><code>Cannot convert value of type &#39;(String, String) -&gt; PhoneAuthCredential&#39; to expected
argument type &#39;AuthCredential&#39;
</code></pre>

<p>任何帮助将不胜感激
谢谢</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>您正在使用 <code>authUI.auth</code> 获取提供程序,然后没有使用它来获取凭据,并且您当前正在使用实例方法 <code>credential</code> 的静态引用。</p>

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

<pre><code>guard let auth = authUI.auth else { return }

let provider = PhoneAuthProvider.provider(auth: auth)
let credential = provider.credential(
   withVerificationID: &#34;XXXXXXXXXXXX&#34;,
   verificationCode: &#34;XXXXXX&#34;
)

// ...
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于iOS链接两个firebase帐户,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/46997670/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/46997670/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: iOS链接两个firebase帐户