几个月前,我刚开始使用Swift来帮助我更好地学习语言,我正在创建一个聊天应用程序。对于登录方法,我使用的是电话号码方法。我已经创建了入职流程,但是我想实现一些东西,让我检查用户是否已经创建了一个带有该电话号码的帐户。如果有的话,我想把它们分到主视图控制器,跳过入职视图控制器。
这是我的电话验证视图控制器代码(一个用于输入电话号码,另一个用于输入发送到用户电话的代码):

import UIKit
import Firebase
import FirebaseAuth
import FirebaseDatabase

class PhoneVerification: UIViewController {

    //MARK: Properties
    @IBOutlet weak var phoneNumber: UITextField!
    @IBOutlet weak var code: UITextField!
    @IBOutlet weak var verifyCodeImage: UIButton!
    @IBOutlet weak var sendCodeImage: UIButton!

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }


    //MARK: Format phone text field
    var phoneFormatter = PhoneNumberFormatter()
    @IBAction func formatPhoneNumber(_ sender: UITextField) {
        sender.text = phoneFormatter.format(sender.text!, hash: sender.hash)
    }

    //MARK: When send secret code button is pressed

    @IBAction func sendCode(_ sender: Any) {
        let submitPhoneNumber = "+1" + phoneNumber.text!
        if submitPhoneNumber.count > 9{
        PhoneAuthProvider.provider().verifyPhoneNumber(submitPhoneNumber, uiDelegate: nil) {(verificationID, error) in
            if error != nil {
                print(error!)
            }else{
                UserDefaults.standard.set(verificationID, forKey: "authVerificationID")
                self.performSegue(withIdentifier: "phoneCode", sender: self)
            }
        }
        }else{
            let phoneNumAlert = UIAlertController(title: "Please enter your phone number", message: "You must enter your phone number to continue.", preferredStyle: .alert)

            phoneNumAlert.addAction(UIAlertAction(title: "Ok", style: .cancel, handler: nil))

            self.present(phoneNumAlert, animated: true)
        }
    }
    let verificationID = UserDefaults.standard.string(forKey: "authVerificationID")

    //MARK: When verify code button is pressed
    @IBAction func verifyCode(_ sender: Any) {
        let credential = PhoneAuthProvider.provider().credential(
            withVerificationID: verificationID!,
            verificationCode: code.text!)

        //This is where the user is signed in if the verification code is correct
        Auth.auth().signIn(with: credential) { (user, error) in
            if let error = error {

                let invalidCodeAlert = UIAlertController(title: "That code is incorrect", message: "Please input the correct code", preferredStyle: .alert)

                invalidCodeAlert.addAction(UIAlertAction(title: "Ok", style: .cancel, handler: nil))

                self.present(invalidCodeAlert, animated: true)
                print(error)
                return
            }
                //MARK: User is signed in
                print("Phone number: \(String(describing: user?.phoneNumber))")
                self.performSegue(withIdentifier: "accountCreated", sender: self)
        }
    }

}

非常感谢大家的帮助!谢谢!

最佳答案

您可以使用FirebaseAuthUI和FirebasePhoneAuthUI将您的手机号码注册到firebase中。它是由Firebase本身提供的默认方法和UI。所以你不用担心其他事情。
您只需使用pod安装PhoneAuthUI,并将以下代码写到注册的手机号码:

    FUIAuth.defaultAuthUI()?.delegate = self
    let phoneProvider = FUIPhoneAuth.init(authUI: FUIAuth.defaultAuthUI()!)
    FUIAuth.defaultAuthUI()?.providers = [phoneProvider]
    let currentlyVisibleController = self.navigationController?.visibleViewController
    phoneProvider.signIn(withPresenting: currentlyVisibleController!, phoneNumber: nil)

注册手机号码后,您将得到此方法的回调:
func authUI(_ authUI: FUIAuth, didSignInWith user: User?, error: Error?) {
    if user != nil{
        // here we need to check if current user is registered or not.
        var ref: DatabaseReference!
        ref = Database.database().reference()
        let userID = Auth.auth().currentUser?.uid
        }) { (error) in
            print(error.localizedDescription)
        }
    }else if error != nil{
        print(error?.localizedDescription)
    }
}

有关更多信息,请参见this tutorial

10-05 21:07
查看更多