【问题标题】:App crashes with Firebase Phone Auth应用程序因 Firebase 电话身份验证而崩溃
【发布时间】:2018-08-20 14:21:33
【问题描述】:

我希望这个问题不要重复,因为我找不到任何类似的东西。

我有两个视图控制器:

NEWPhoneAuthViewController

NEWVerifyCodeViewController

NEWPhoneAuthViewController 代码:

        import UIKit
import Firebase

class NEWPhoneAuthViewController: UIViewController {

    @IBOutlet weak var phoneTxtField: UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    @IBAction func submitPressed(_ sender: Any) {

        let phoneNumber = phoneTxtField.text!

        PhoneAuthProvider.provider().verifyPhoneNumber(phoneNumber, uiDelegate: nil, completion: { (verificationID, error) in

            if let error = error {
                debugPrint(error.localizedDescription)
                return
            }

            guard let verificationID = verificationID else { return }
            print("Verification ID")
            print(verificationID)
            let verifyScene = NEWVerifyCodeViewController()
            verifyScene.verificationID = verificationID

            self.performSegue(withIdentifier: "toCodefromPhoneAuth", sender: nil)
            //self.navigationController?.pushViewController(verifyScene, animated: true)
        })

    }


}

我的 NEWVerifyCodeViewController 代码是:

    import UIKit
import Firebase

class NEWVerifyCodeViewController: UIViewController {

    @IBOutlet weak var codeTxtField: UITextField!

    var verificationID:String?

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    @IBAction func verifyPressed(_ sender: Any) {
        if let verificationCode = codeTxtField.text {
            let credential = PhoneAuthProvider.provider().credential(withVerificationID: verificationID!, verificationCode: verificationCode)
            Auth.auth().signIn(with: credential) { (user, error) in
                if let error = error {
                    debugPrint(error.localizedDescription)
                }else {
                    debugPrint("Verified successfully")

                    print("Navigating to SignUp")

                    //self.performSegue(withIdentifier: "toSignUpfromCode", sender: nil)

                    //let newSignUp = NEWSignUp()
                    //self.navigationController?.pushViewController(newSignUp, animated: true)

                    //self.performSegue(withIdentifier: "toSignUpFromPhone", sender: nil)
                    //Once you have verified your phone number kill the firebase session.
                    //try? Auth.auth().signOut()

                }
            }
        }
    }
}

现在的问题是:当我点击 NEWVerifyCodeViewController 中的验证按钮时,应用程序崩溃了,

注意事项:

  • 我打印了验证 ID,它不是 NULL。
  • 我打印了用户收到的代码,它不为 NULL。

所以我不确定为什么会发生这种情况,我的控制台在点击后没有显示任何错误,除了这些:

【问题讨论】:

    标签: ios firebase-authentication swift4 ios11 xcode9


    【解决方案1】:

    所以我做了一个小调整,使我的项目正常工作。

    我在NEWPhoneAuthViewController中更改了这部分:

    let verifyScene = NEWVerifyCodeViewController()
    verifyScene.verificationID = verificationID
    

    到:

    首先创建了一个名为:gVerificationID 的全局变量并将其设置为:

    gVerificationID = verificationID
    

    就是这样,不确定这是否是最佳实践,也不确定为什么第一个代码不起作用,但这就是我修复它的方法。

    【讨论】:

      猜你喜欢
      • 2021-10-03
      • 2021-04-26
      • 2019-12-20
      • 2018-06-23
      • 1970-01-01
      • 2021-02-24
      • 2018-10-21
      • 1970-01-01
      • 2019-04-14
      相关资源
      最近更新 更多