Firebase身份验证:Swift中的电话号码身份验证

时间:2019-09-29 10:29:16

标签: ios swift firebase-authentication swift4 one-time-password

我的输出控制台中正在打印一个本地化的说明,上面写着:“无法获得验证:可选(如果禁用应用程序委托模糊处理,则需要将UIApplicationDelegate收到的远程通知转发到FIRAuth的canHandleNotificaton:方法。” )”

尽管如此,即使我在手机中收到了OTP信息,也需要重新验证以进行验证,但并没有带我进入下一页,我们需要在该页面上验证收到的otp。

我的代码在收到OTP之前可以正常工作,但是在此之后,它显示了我需要输入号码的同一页面。

我的viewcontroller.swift具有以下代码:

            .ForMember(entity => entity.Active, options => options.MapFrom((dto, entity) => dto.Id == 0 ? true : entity.Active))

和我的otpverificationviewcontroller.swift具有以下代码:

    @IBAction func mobileNumberSubmitButton(_ sender: Any) {

     guard  let phonenumber = mobileNumberText.text else {return}

     PhoneAuthProvider.provider().verifyPhoneNumber(phonenumber, uiDelegate: nil) {(verificationid, error) in
                if error == nil{
                    print(verificationid)
                    guard let verify = verificationid else {return}
                    self.userdefault.set("verify", forKey: "verifyID")
                    self.userdefault.synchronize()
                    let viewController = self.storyboard?.instantiateViewController(withIdentifier: "OTPVerificationID") as! OTPVerificationViewController
                    viewController.verifyid = verificationid! 
                    self.navigationController?.pushViewController(viewController, animated: true)

                }else{
                    print("unable to get verification:", error?.localizedDescription)
                }
            }



}

}

我希望mobileNumberSubmitButton动作可以推送otpverification页面,以便验证OTPcode。

有人可以给我一些解决方案吗?

1 个答案:

答案 0 :(得分:0)

在主线程上执行以下操作:

DispatchQueue.main.async{
    let viewController =
     self.storyboard?.instantiateViewController(withIdentifier: "OTPVerificationID") as! OTPVerificationViewController
     viewController.verifyid = verificationid!
     self.navigationController?.pushViewController(viewController, animated: true) 
    }