Войдите в систему с помощью Apple с помощью Firebase — неверный токен/учетные данные IDP. Работаем на симуляторе, но не IOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Гость
 Войдите в систему с помощью Apple с помощью Firebase — неверный токен/учетные данные IDP. Работаем на симуляторе, но не

Сообщение Гость »


У меня есть приложение, поддерживающее методы входа по электронной почте и паролю, Google, Apple и анонимный вход с Firebase в качестве серверной части.

Интересно, что вход в симулятор всеми способами проходит успешно. На моем рабочем устройстве (использующем тот же AppleID, что и симулятор) я получаю сообщение об ошибке .invalidCredential. Из документации Firebase «Указывает, что токен IDP или requestUri недействителен».

В симуляторе установлена ​​iOS 16.2, а на моем iPhone — iOS 17. Я не понимаю, почему я получаю несоответствие при успешном выполнении Apple SSO. Остальные способы входа в систему работают нормально на обоих устройствах.

Это мой знак в Apple Flow. Его вызывают с помощью

func SignInApple() асинхронно выдает { пусть помощник = SignInAppleHelper() let tokens = попробуйте await helper.startSignInWithAppleFlow() let authDataResult = попробуйте дождаться AuthenticationManager.shared.signInWithApple (токены: токены) пусть пользователь = DBUser (аутентификация: authDataResult) попробуйте дождаться UserManager.shared.createNewUser(пользователь: пользователь) } А это помощник

struct SignInWithAppleResult { пусть токен: строка пусть nonce: строка пусть имя: Строка? пусть электронное письмо: Строка? } структура SignInWithAppleButtonViewResentable: UIViewRepresentable { введите тип: ASAuthorizationAppleIDButton.ButtonType пусть стиль: ASAuthorizationAppleIDButton.Style func makeUIView(context: Context) -> some UIView { вернуть ASAuthorizationAppleIDButton (тип: тип, стиль: стиль) } func updateUIView(_ uiView: UIViewType, context: Context) { } } @Главный актер окончательный класс SignInAppleHelper: NSObject { частная переменная currentNonce: String? частный var CompleteHandler: ((Result) -> Void)? = ноль func startSignInWithAppleFlow() асинхронные броски -> SignInWithAppleResult { попробуйте await withCheckedThrowingContinuation {продолжение в self.startSignInWithAppleFlow { результат результат переключения { случай .success(пусть SignInAppleResult): продолжение.resume(возвращение: SignInAppleResult) возвращаться случай .failure(пусть ошибка): продолжение.резюме(выбрасывание: ошибка) возвращаться } } } } func startSignInWithAppleFlow(завершение: @escaping (Result) -> Void) { Guard let topVC = Utilities.shared.topViewController() else { завершение(.failure(URLError(.badURL))) возвращаться } пусть одноразовый номер = случайныйNonceString() текущийНонсе = одноразовый номер завершениеHandler = завершение пусть appleIDProvider = ASAuthorizationAppleIDProvider() пусть запрос = appleIDProvider.createRequest() request.requestedScopes = [.fullName, .email] request.nonce = sha256(nonce) пусть авторизацияController = ASAuthorizationController (authorizationRequests: [запрос]) авторизацияController.delegate = сам авторизацияController.presentationContextProvider = topVC авторизацияController.performRequests() } частная функция randomNonceString (длина: Int = 32) -> String { предварительное условие (длина > 0) var randomBytes = [UInt8](повторение: 0, количество: длина) пусть errorCode = SecRandomCopyBytes (kSecRandomDefault, randomBytes.count, &randomBytes) if errorCode != errSecSuccess { фатальная ошибка( «Невозможно сгенерировать nonce. Ошибка SecRandomCopyBytes с OSStatus \(errorCode)" ) } пусть кодировка: [Символ] = Array("0123456789ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvwxyz-._") let nonce = randomBytes.map { байт в // Выбираем случайный символ из набора, при необходимости перебирая его. charset[Int(byte) % charset.count] } вернуть строку (нонс) } @доступно(iOS 13, *) частная функция sha256 (_ input: String) -> String { пусть inputData = Данные (input.utf8) пусть hashedData = SHA256.hash(данные: inputData) пусть hashString = hashedData.compactMap { Строка (формат: «%02x», $0) }.joined() вернуть хеш-строку } } расширение SignInAppleHelper: ASAuthorizationControllerDelegate { func авторизацияController (контроллер: ASAuthorizationController, DidCompleteWithAuthorization авторизация: ASAuthorization) { сторожить пусть appleIDCredential = авторизация.credential как? АСАуторизацияAppleIDCredential, пусть appleIDToken = appleIDCredential.identityToken, let idTokenString = String (данные: appleIDToken, кодировка: .utf8), пусть nonce = currentNonce else { завершениеHandler?(.failure(URLError(.badServerResponse))) print("ОШИБКА ВХОДА В APPLE") возвращаться } let name = appleIDCredential.fullName?.givenName пусть электронная почта = appleIDCredential.email let tokens = SignInWithAppleResult (токен: idTokenString, nonce: nonce, name: name, email: email) завершениеHandler?(.success(токены)) func авторизацияController (контроллер: ASAuthorizationController, DidCompleteWithError ошибка: Ошибка) { // Обработка ошибки. print("Ошибка входа в систему Apple: \(ошибка)") завершениеHandler?(.failure(firebaseErrorHandler(ошибка: ошибка как NSError) как! Ошибка)) } } } расширение UIViewController: ASAuthorizationControllerPresentationContextProviding { публичная функция PresentationAnchor (для контроллера: ASAuthorizationController) -> ASPresentationAnchor { вернуть self.view.window! } } Есть идеи? Нигде не могу найти разрешение
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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