Невозможно отправить SMS с кодом, SwiftUI, аутентификацией FireBase, ОШИБКА 17999 и ОШИБКА 17010.IOS

Программируем под IOS
Ответить
Anonymous
 Невозможно отправить SMS с кодом, SwiftUI, аутентификацией FireBase, ОШИБКА 17999 и ОШИБКА 17010.

Сообщение Anonymous »

Я разрабатываю приложение для iOS 17+, мой Firebase-ios-sdk 10.18.0, Xcode 15.4. Мне нужно реализовать вход и регистрацию в приложении по номеру телефона. Но из-за нескольких видов ошибок я не могу отправить смс.
Первая ошибка:

Ошибка во время Проверка номера телефона: произошла внутренняя ошибка. Распечатайте и просмотрите сведения об ошибке для получения дополнительной информации. Код ошибки Firebase: FIRAuthErrorCode(rawValue: 17999)

он ​​появляется чаще всего и сопровождается ошибкой

https://www.googleapis.com/identitytool ... cationCode, код ответа: 503

также поскольку ошибка появляется реже

Ошибка при проверке номера телефона: Мы заблокировали все запросы с этого устройства из-за необычной активности. Попробуйте позже. Код ошибки Firebase: FIRAuthErrorCode(rawValue: 17010)

и сопровождается ошибкой

https://www.googleapis.com/identitytool ... cationCode, код ответа: 400

Я пробовал много решений и вот что я могу сказать

[*]Конечно, я включил регистрацию по номеру телефона в FireBase и Google Cloud Platform

[*]Регистрация и аутентификация работают корректно, если добавить тестовый номер телефона.

[*]Ошибка не связано с reCaptcha, так как он проходит успешно, и я перепроверил схемы URL

[*]В Google Cloud Platform я включил «Cloud Identity» и «Identity Toolkit API»

[*]Ошибка также не имеет ничего общего с ключом аутентификации APN, поскольку я могу отправлять уведомления через Cloud Messaging без каких-либо проблемы.

[*]Я также привязал свою кредитную карту.


Вот мой код для AppDelegate и функций, связанных с отправкой сообщения
func startAuth(phoneNumber: String, completion: @escaping (Bool) -> Void) {
print("Starting phone number verification for: \(phoneNumber)")

// Установить isAppVerificationDisabledForTesting в true для тестирования
// Auth.auth().settings?.isAppVerificationDisabledForTesting = true

PhoneAuthProvider.provider().verifyPhoneNumber(phoneNumber, uiDelegate: nil) { verificationID, error in
if let error = error {
print("Error during phone number verification: \(error.localizedDescription)")
if let errorCode = AuthErrorCode.Code(rawValue: (error as NSError).code) {
print("Firebase Error Code: \(errorCode)")
}
completion(false)
return
}
UserDefaults.standard.set(verificationID, forKey: "authVerificationID")
completion(true)
}
}

func verifyCode(smsCode: String, completion: @escaping (Bool) -> Void) {
guard let verificationID = UserDefaults.standard.string(forKey: "authVerificationID") else {
completion(false)
return
}
let credential = PhoneAuthProvider.provider().credential(withVerificationID: verificationID, verificationCode: smsCode)
Auth.auth().signIn(with: credential) { authResult, error in
if let error = error {
print("Error verifying code: \(error)")
completion(false)
return
}
completion(true)
}
}

func resendCode(completion: @escaping (Bool) -> Void) {
guard let phoneNumber = tempUserData?["phoneNumber"] as? String else {
completion(false)
return
}

startAuth(phoneNumber: phoneNumber) { success in
completion(success)
}
}

func registerUser(userData: [String: Any], completion: @escaping (Bool) -> Void) {
let db = Firestore.firestore()
guard let uid = Auth.auth().currentUser?.uid else {
completion(false)
return
}
db.collection("users").document(uid).setData(userData) { error in
if let error = error {
print("Error registering user: \(error)")
completion(false)
return
}
completion(true)
}
}

и
class AppDelegate: NSObject, UIApplicationDelegate {
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil) -> Bool {

// let providerFactory = AppCheckDebugProviderFactory()
// AppCheck.setAppCheckProviderFactory(providerFactory)
let providerFactory = YourAppCheckProviderFactory()
AppCheck.setAppCheckProviderFactory(providerFactory)

FirebaseApp.configure()
print("App Check provider factory set")

// Запрос разрешения на отправку уведомлений
UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .badge, .sound]) { granted, error in
print("Permission granted: \(granted)")
}
application.registerForRemoteNotifications()
print("Remote notifications registered")

return true
}

func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
// Обработка регистрации удаленных уведомлений
Auth.auth().setAPNSToken(deviceToken, type: .unknown)
print("Remote notifications token registered")
}

func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {
// Обработка ошибки регистрации удаленных уведомлений
print("Failed to register for remote notifications: \(error.localizedDescription)")
}

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
// Обработка полученных уведомлений
if Auth.auth().canHandleNotification(userInfo) {
completionHandler(.noData)
return
}
// This notification is not handled by Firebase Authentication.
// Handle the notification yourself, as appropriate.
}
}

class YourAppCheckProviderFactory: NSObject, AppCheckProviderFactory {
func createProvider(with app: FirebaseApp) -> AppCheckProvider? {
if #available(iOS 14.0, *) {
return AppAttestProvider(app: app)
} else {
return DeviceCheckProvider(app: app)
}
}


Подробнее здесь: https://stackoverflow.com/questions/786 ... -17999-and
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»