Аутентификация Firebase: аутентификация номера телефона в Swift - PullRequest
0 голосов
/ 29 сентября 2019

В моей выходной консоли печатается локализованное описание со словами: «невозможно получить подтверждение: необязательно (« Если отключено свитирование делегата приложения, удаленные уведомления, полученные UIApplicationDelegate, должны быть перенаправлены в canHandleNotificaton: метод FIRAuth \ ».») "

Несмотря на то, что я получаю OTP в своем телефоне, а также подтверждение для подтверждения, оно не выводит меня на следующую страницу, где мы должны проверить полученный OTP.

Мой код до получения OTP работает нормально, но после этого он показывает ту же страницу, где мне нужно ввести свой номер.

Мой viewcontroller.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)
                }
            }



}

, а мой otpverificationviewcontroller.swift имеет следующий код:

     class OTPVerificationViewController: UIViewController { 

       var verifyid : String = ""
       let userdefault = UserDefaults()

       @IBOutlet weak var OTPVerifyCode: UITextField!

       override func viewDidLoad() {
           super.viewDidLoad()

           let valust = self.userdefault.dictionary(forKey: "verifyID")
           print(verifyid) 

       }

       @IBAction func verificationSubmitButton(_ sender: Any) {

            guard let verifycode = OTPVerifyCode.text else {return}
            let credentials = PhoneAuthProvider.provider().credential(withVerificationID: verifyid, verificationCode: verifycode)
            Auth.auth().signInAndRetrieveData(with: credentials) { (result, error) in
            if error == nil {
                 if let viewController = self.storyboard?.instantiateViewController(withIdentifier: "ServiceViewControllerID") as? ServiceViewController {

                 UIApplication.shared.keyWindow?.rootViewController = viewController
                 self.dismiss(animated: true, completion: nil)
             }
           } else{
               print(error?.localizedDescription)
        } 
    }
} 

}

Я ожидаю, что действие mobileNumberSubmitButton подтолкнет страницу проверки otpverification для проверки OTP-кода.

Может кто-нибудь дать мне несколько решений?

1 Ответ

0 голосов
/ 29 сентября 2019

Сделайте это в главном потоке как:

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