"Недопустимый токен" при попытке аутентификации номера телефона с использованием firebase

Это мой код:

import FirebaseAuth


class AuthPhoneNum {

    static func getPhoneNum(phoneNumber: String) {
        PhoneAuthProvider.provider().verifyPhoneNumber(phoneNumber) { (verificationID, error) in
            if let error = error {
                print(error)
                return
            }
            UserDefaults.standard.set(verificationID, forKey: "authVerificationID")
        }
    }

    static func verify(verificationCode: String?) {
        guard let verificationID = UserDefaults.standard.string(forKey: "authVerificationID") else { return }
        if verificationCode != nil {
            let credential = PhoneAuthProvider.provider().credential(
                withVerificationID: verificationID,
                verificationCode: verificationCode!)

            Auth.auth().signIn(with: credential) { (user, error) in
                if let error = error {
                    print(error)
                    return
                }
            }
        } else {
            print("No verification code")
        }
    }

}

Это то, что выдает консоль:

Error Domain = FIRAuthErrorDomain Code = 17048 "Недопустимый токен". UserInfo = {NSLocalizedDescription = Недопустимый токен., Error_name = INVALID_APP_CREDENTIAL}

Что я делаю неправильно? Спасибо

Ответ 1

Я тоже испытывал эту проблему. Проверено следующее:

  • Правильный идентификатор пакета
  • Правильный Google-Info.plist
  • Корректное значение aps-environment
  • Исправьте тип токена APNS при вызове auth.setAPNStoken (.unknown для автоматического обнаружения)

Ничего не помогло, пока в настройках приложения Firebase я не загрузил ключ аутентификации APNS (p8) вместо сертификатов. Я использовал эти сертификаты раньше, чтобы отправлять уведомления только, и все работает нормально, но для уведомлений о номере телефона что-то пошло не так.

Ответ 2

Сначала восстанавливает ключ APNS и загружает его в базу данных для обмена сообщениями в облаке.

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
    }
}

Очень важное примечание: uthAPNSTokenType установлен правильно для [песочница/производство] или для общего .unknown

В моем случае это был неправильный тип токена apns:

Auth.auth().setAPNSToken(deviceToken, type: AuthAPNSTokenType.prod)

должно было:

Auth.auth().setAPNSToken(deviceToken, type: AuthAPNSTokenType.sandbox)

Ответ 3

такие же проблемные вопросы были и раньше на SO. поэтому хотел бы сказать вам настроить все предварительные требования перед запуском кода.

Предварительные шаги:

  • Зарегистрируйте идентификатор пакета в учетной записи разработчика и включите уведомления для идентификатора пакета.

  • Зарегистрируйте тот же идентификатор пакета на странице настроек консоли Firebase и создайте приложение, загрузите файл Google-Info.plist и убедитесь, что имя должно совпадать.

  • Загрузите Push сертификаты на консоль Firebase для песочницы, а также разработки.

  • перейдите по этой ссылке ниже для реализации кода.

код установки для Firebase Auth

Ответ 4

Скорее всего, вам нужно загрузить файл ключа .p8 (у меня есть учетная запись Enterprise, но то же самое для разработчика)
В учетной записи Apple для разработчиков:

  • Все ключи
  • Создать новый ключ (+)
  • Введите Глобальное имя для всех ваших приложений
  • Флажок рядом со службой Apple Push Notifications (APNs)
  • Загрузите ваш файл p8
  • Загрузить на панель управления Firebase

Ответ 5

Убедитесь, что вы выбрали APN в разделе "Основные службы". Количество сертификатов APN на одну учетную запись разработчика ограничено 2. Таким образом, если у вас уже было 2 сертификата ранее, есть вероятность, что вы создали сертификат, установив DeviceCheck вместо APN.

enter image description here