Несоответствие токена с использованием аутентификации номера телефона - iOS - PullRequest
0 голосов
/ 24 декабря 2018

Я пытаюсь войти в учетную запись, используя аутентификацию по номеру телефона с помощью firebase.

Изначально я развернул приложение на своем устройстве, и оно работает нормально.Но когда я пытался развернуть приложение на другом устройстве, а затем выдает ошибку Token Mismatch.

Я искал несколько ответов в stackoverflow, а затем нашел этот ответ , и я последовал, но у меня не получилось.

Я проверил следующее:

  1. Убедитесь, что у меня есть действительный сертификат разработки и производства APNS, загруженный на панель мониторинга Firebase, в разделе «Параметры проекта»> «Облачные сообщения».(Мой сертификат APNS действителен до следующего года).
  2. В Xcode, в файле .entitlements, убедитесь, что в качестве значения среды APS задано либо «разработка», либо «производство», в зависимости от ситуации тестирования.(Я также проверил).
  3. Наконец (это то, чего мне не хватало), проверьте внутри вашего AppDelegate.swift и внутри метода значение didRegisterForRemoteNotificationsWithDeviceToken, измените значение с .sandbox на .prod илина .unknown, чтобы позволить пакету приложения определять, какой тип токена использовать, основываясь на вашем профиле обеспечения.

Этот третий я также изменил

    let token = deviceToken.map { String(format: "%02.2hhx", $0) }.joined()
    print("==== This is device token ",token)
    let data = Data(token.utf8)
    Auth.auth().setAPNSToken(data, type: AuthAPNSTokenType.unknown)

Но все же, когда я запускаюэто приложение на другом устройстве, которое всегда выдает мне эту ошибку.

Но когда я комментирую эту строку кода // Auth.auth().setAPNSToken(data, type: AuthAPNSTokenType.unknown), а затем запускаю приложение, я раскомментирую эту строку кода Auth.auth().setAPNSToken(data, type: AuthAPNSTokenType.unknown), а затемснова запустите приложение и, наконец, оно работает.Но, к сожалению, когда я запускаю другое устройство iOS, оно все равно выдает мне ошибку.Интересно почему?

1 Ответ

0 голосов
/ 24 декабря 2018

Выполните шаги

1) Импортируйте Firebase и FirebaseAuth

import Firebase import FirebaseAuth

2) В didFinishLaunchingWithOptions Настройте Firebase.

FirebaseApp.configure()

3)Запишите эти две функции в AppDelegate.

  func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
    let firebaseAuth = Auth.auth()
    firebaseAuth.setAPNSToken(deviceToken, type: AuthAPNSTokenType.prod)

}

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
    let firebaseAuth = Auth.auth()
    if (firebaseAuth.canHandleNotification(userInfo)){
        print(userInfo)
        return
    }
}

4) В своем классе ViewController повторите шаг first и напишите код для отправки OTP на номер мобильного телефона, который вы хотите.

@IBAction func sendCodeAction(_ sender: Any) {
    let ugrMgr = UserManager.userManager
    let phoneNumber = Auth.auth().currentUser?.phoneNumber
    print(phoneNumber!)
    print(ugrMgr.mobile!)
    PhoneAuthProvider.provider().verifyPhoneNumber("+91" + ugrMgr.mobile!, uiDelegate: nil) { (verificationID, error) in
        if let error = error {
            print(error.localizedDescription)
            mainInstance.ShowAlertWithError(error.localizedDescription as NSString, msg: error.localizedDescription as NSString)
            return
        }
    self.verificationID = verificationID

    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...