iOS link 两个firebase账户
iOS link two firebase account
我正在尝试 link 两个 firebase 帐户,通常用户会使用社交媒体或电子邮件或 anonmus 帐户登录,然后用户会使用 phone 登录。我需要link这两个帐号。
父视图
将调用父视图中的一个函数来注册 phone 号码
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
函数将在父视图中调用。我需要link之前的用户账号和phone用户账号
父视图
func authUI(_ authUI: FUIAuth, didSignInWith user: FirebaseAuth.User?, error: Error?) {
if let user = user{
// link the the two accounts
}else{
}
}
我尝试 link 使用
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(with: *credential*, completion: ...
Cannot convert value of type '(String, String) -> PhoneAuthCredential' to expected
argument type 'AuthCredential'
如有任何帮助,我们将不胜感激
谢谢
您正在使用 authUI.auth
获取提供程序,然后没有使用它来获取凭据,并且您当前正在使用实例方法的静态引用 credential
。
实例方法本身采用两个字符串和 returns 一个 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"
)
// ...
我正在尝试 link 两个 firebase 帐户,通常用户会使用社交媒体或电子邮件或 anonmus 帐户登录,然后用户会使用 phone 登录。我需要link这两个帐号。
父视图
将调用父视图中的一个函数来注册 phone 号码
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
函数将在父视图中调用。我需要link之前的用户账号和phone用户账号
父视图
func authUI(_ authUI: FUIAuth, didSignInWith user: FirebaseAuth.User?, error: Error?) {
if let user = user{
// link the the two accounts
}else{
}
}
我尝试 link 使用
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(with: *credential*, completion: ...
Cannot convert value of type '(String, String) -> PhoneAuthCredential' to expected
argument type 'AuthCredential'
如有任何帮助,我们将不胜感激 谢谢
您正在使用 authUI.auth
获取提供程序,然后没有使用它来获取凭据,并且您当前正在使用实例方法的静态引用 credential
。
实例方法本身采用两个字符串和 returns 一个 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"
)
// ...