"Недопустимый токен" при попытке аутентификации номера телефона с использованием 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.