Catch up on everything we announced at this year's Firebase Summit. Learn more

Аутентифицируйтесь с Firebase на платформах Apple, используя номер телефона

Вы можете использовать Firebase Authentication для входа пользователя в систему, отправив SMS-сообщение на телефон пользователя. Пользователь входит в систему, используя одноразовый код, содержащийся в SMS-сообщении.

Самый простой способ добавить номер телефона для входа в системе, чтобы ваше приложение использовать FirebaseUI , который включает в себя каплю в знаке в виджете , который реализует вход в потоках телефонного номер подписей, а также на основе пароля и федеративное знак -в. В этом документе описывается, как реализовать поток входа по номеру телефона с помощью Firebase SDK.

Прежде чем вы начнете

Используйте Swift Package Manager для установки и управления зависимостями Firebase.

  1. В Xcode, с приложением проекта открыто, перейдите в меню Файл> Swift пакеты> Добавить пакет Завис.
  2. При появлении запроса добавьте репозиторий Firebase Apple Platform SDK:
  3.   https://github.com/firebase/firebase-ios-sdk
      
  4. Выберите библиотеку Firebase Authentication.
  5. По завершении Xcode автоматически начнет разрешение и загрузку ваших зависимостей в фоновом режиме.
И проверьте шаг конфигурации:
  1. Если вы еще не подключили приложение к вашему проекту Firebase, сделать это из консоли Firebase .

Проблемы безопасности

Аутентификация с использованием только номера телефона, хотя и удобна, но менее безопасна, чем другие доступные методы, поскольку обладание номером телефона может легко передаваться между пользователями. Кроме того, на устройствах с несколькими профилями пользователей любой пользователь, который может получать SMS-сообщения, может войти в учетную запись, используя номер телефона устройства.

Если вы используете в своем приложении вход на основе номера телефона, вы должны предложить его наряду с более безопасными методами входа и проинформировать пользователей о компромиссах безопасности при использовании входа по номеру телефона.

Включите вход по номеру телефона для своего проекта Firebase

Чтобы входить в систему с помощью SMS, вы должны сначала включить метод входа по номеру телефона для своего проекта Firebase:

  1. В Firebase консоли откройте раздел Проверка подлинности.
  2. На странице входа в методе, включите номер телефона вход в методе.

Квота запросов на вход по телефонному номеру Firebase достаточно высока, поэтому большинство приложений не будут затронуты. Однако, если вам нужно войти в систему очень большого количества пользователей с помощью аутентификации по телефону, вам может потребоваться обновить тарифный план. Смотрите ценовую страницу.

Включить проверку приложения

Чтобы использовать аутентификацию по номеру телефона, Firebase должна иметь возможность проверять, поступают ли запросы на вход по номеру телефона из вашего приложения. Это можно сделать двумя способами:

  • Уведомления Бесшумный APNs: При входе в систему с их номером телефона в первый раз на устройстве, Firebase аутентификации отправляет маркер к устройству с помощью беззвучный толчок уведомления. Если ваше приложение успешно получает уведомление от Firebase, можно продолжить вход по номеру телефона.

    Для iOS 8.0 и новее для тихих уведомлений не требуется явного согласия пользователя, и поэтому на них не влияет отказ пользователя от получения уведомлений APN в приложении. Таким образом, приложению не нужно запрашивать разрешение пользователя на получение push-уведомлений при реализации аутентификации по телефонному номеру Firebase.

  • проверка рекапчи: В случае, если при отправке или получении беззвучный толчок уведомление не представляется возможным, например, когда пользователь отключил фоновое обновление для вашего приложения, или при тестировании приложения на тренажере IOS, Firebase аутентификации использует проверку ReCaptcha для завершения телефона вход в систему. Задача reCAPTCHA часто может быть выполнена без необходимости решать что-либо пользователю.

При правильной настройке тихих push-уведомлений только очень небольшой процент пользователей будет сталкиваться с потоком reCAPTCHA. Тем не менее, вы должны убедиться, что вход по номеру телефона работает правильно, независимо от того, доступны ли тихие push-уведомления.

Начать получать беззвучные уведомления

Чтобы включить уведомления APN для использования с аутентификацией Firebase:

  1. В Xcode, включить уведомление толчка для вашего проекта.
  2. Загрузите ключ аутентификации APN в Firebase. Если у вас еще нет ключа аутентификации APNs, убедитесь , что создать в компании Apple Developer Center член .

    1. Внутри вашего проекта в Firebase консоли, выберите значок шестеренки, выберите Настройки проекта, а затем выберите вкладку Cloud Messaging.

    2. В APNs ключа аутентификации при конфигурации приложения IOS, нажмите на кнопку Загрузить.

    3. Найдите место , где вы сохранили свой ключ, выберите его и нажмите кнопку Открыть. Добавьте идентификатор ключа для ключа (доступен в компании Apple Developer Center члена ) и нажмите Загрузить.

    Если у вас уже есть сертификат APNs, вы можете загрузить его вместо этого.

Настроить верификацию reCAPTCHA

Чтобы разрешить Firebase SDK использовать проверку reCAPTCHA:

  1. Добавьте настраиваемые схемы URL-адресов в свой проект Xcode:
    1. Откройте конфигурацию проекта: дважды щелкните имя проекта в левом древовидном представлении. Выберите приложение из раздела мишеней, а затем выберите вкладку Info, и разверните раздел Типы URL.
    2. Нажмите кнопку +, и добавить схему URL для обратимого идентификатора клиента. Чтобы найти это значение, откройте GoogleService-Info.plist конфигурационный файл, и внешний вид для REVERSED_CLIENT_ID ключа. Скопируйте значение этого ключа, и вставьте его в URL схема поля на странице конфигурации. Остальные поля оставьте пустыми.

      По завершении ваша конфигурация должна выглядеть примерно так (но со значениями, зависящими от вашего приложения):

  2. Необязательно: Если вы хотите , чтобы настроить способ вашего приложение представляет SFSafariViewController или UIWebView при отображении ReCaptcha пользователя, создать пользовательский класс , который соответствует требованиям FIRAuthUIDelegate протокола, и передать его в verifyPhoneNumber:UIDelegate:completion: .

Отправьте проверочный код на телефон пользователя

Для того, чтобы инициировать телефонный номер входа, представить пользователю интерфейс , который побуждает их указать свой номер телефона, а затем вызвать verifyPhoneNumber:UIDelegate:completion: по запросу , что Firebase отправить код аутентификации на телефон пользователя по SMS:

  1. Получите номер телефона пользователя.

    Юридические требования различаются, но в качестве наилучшей практики и для того, чтобы установить ожидания для ваших пользователей, вы должны сообщить им, что, если они используют вход по телефону, они могут получить SMS-сообщение для проверки и применяются стандартные тарифы.

  2. Вызов verifyPhoneNumber:UIDelegate:completion: , передавая ему номер телефона пользователя.

    Быстрый

    PhoneAuthProvider.provider()
      .verifyPhoneNumber(phoneNumber, uiDelegate: nil) { verificationID, error in
          if let error = error {
            self.showMessagePrompt(error.localizedDescription)
            return
          }
          // Sign in using the verificationID and the code sent to the user
          // ...
      }

    Цель-C

    [[FIRPhoneAuthProvider provider] verifyPhoneNumber:userInput
                                            UIDelegate:nil
                                            completion:^(NSString * _Nullable verificationID, NSError * _Nullable error) {
      if (error) {
        [self showMessagePrompt:error.localizedDescription];
        return;
      }
      // Sign in using the verificationID and the code sent to the user
      // ...
    }];

    Когда вы звоните verifyPhoneNumber:UIDelegate:completion: , Firebase посылает беззвучный толчок уведомление для вашего приложения, или вопросы , вызов ReCaptcha пользователя. После того, как ваше приложение получит уведомление или пользователь выполнит запрос reCAPTCHA, Firebase отправит SMS-сообщение, содержащее код аутентификации, на указанный номер телефона и передаст идентификатор подтверждения вашей функции завершения. Для входа пользователя вам потребуются как проверочный код, так и проверочный идентификатор.

    Сообщение SMS посланного Firebase также может быть локализовано, указав язык аутентификации через languageCode собственность на экземпляре Auth.

    Быстрый

     // Change language code to french.
     Auth.auth().languageCode = "fr";
    

    Цель-C

     // Change language code to french.
     [FIRAuth auth].languageCode = @"fr";
    
  3. Сохраните идентификатор подтверждения и восстановите его при загрузке приложения. Таким образом, вы можете быть уверены, что у вас по-прежнему есть действующий идентификатор подтверждения, если ваше приложение завершается до того, как пользователь завершит процесс входа (например, при переключении на приложение SMS).

    Вы можете сохранить проверочный идентификатор как хотите. Простой способ сохранить проверки ID с NSUserDefaults объекта:

    Быстрый

    UserDefaults.standard.set(verificationID, forKey: "authVerificationID")
    

    Цель-C

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:verificationID forKey:@"authVerificationID"];
    

    Затем вы можете восстановить сохраненное значение:

    Быстрый

    let verificationID = UserDefaults.standard.string(forKey: "authVerificationID")
    

    Цель-C

    NSString *verificationID = [defaults stringForKey:@"authVerificationID"];
    

Если вызов verifyPhoneNumber:UIDelegate:completion: преуспевает, вы можете предложить пользователю ввести код подтверждения , когда они получают его в сообщении SMS.

Авторизуйтесь пользователем с проверочным кодом

После того как пользователь предоставляет приложение с кодом подтверждения из сообщения SMS, подпишите пользователя в создавая FIRPhoneAuthCredential объект из кода проверки и проверки ID и передачи этого объекта signInWithCredential:completion: .

  1. Получите проверочный код от пользователя.
  2. Создать FIRPhoneAuthCredential объект из кода проверки и проверки ID.

    Быстрый

    let credential = PhoneAuthProvider.provider().credential(
      withVerificationID: verificationID,
      verificationCode: verificationCode
    )

    Цель-C

    FIRAuthCredential *credential = [[FIRPhoneAuthProvider provider]
        credentialWithVerificationID:verificationID
                    verificationCode:userInput];
  3. Вход пользователя с FIRPhoneAuthCredential объекта:

    Быстрый

    Auth.auth().signIn(with: credential) { authResult, error in
        if let error = error {
          let authError = error as NSError
          if isMFAEnabled, authError.code == AuthErrorCode.secondFactorRequired.rawValue {
            // The user is a multi-factor user. Second factor challenge is required.
            let resolver = authError
              .userInfo[AuthErrorUserInfoMultiFactorResolverKey] as! MultiFactorResolver
            var displayNameString = ""
            for tmpFactorInfo in resolver.hints {
              displayNameString += tmpFactorInfo.displayName ?? ""
              displayNameString += " "
            }
            self.showTextInputPrompt(
              withMessage: "Select factor to sign in\n\(displayNameString)",
              completionBlock: { userPressedOK, displayName in
                var selectedHint: PhoneMultiFactorInfo?
                for tmpFactorInfo in resolver.hints {
                  if displayName == tmpFactorInfo.displayName {
                    selectedHint = tmpFactorInfo as? PhoneMultiFactorInfo
                  }
                }
                PhoneAuthProvider.provider()
                  .verifyPhoneNumber(with: selectedHint!, uiDelegate: nil,
                                     multiFactorSession: resolver
                                       .session) { verificationID, error in
                    if error != nil {
                      print(
                        "Multi factor start sign in failed. Error: \(error.debugDescription)"
                      )
                    } else {
                      self.showTextInputPrompt(
                        withMessage: "Verification code for \(selectedHint?.displayName ?? "")",
                        completionBlock: { userPressedOK, verificationCode in
                          let credential: PhoneAuthCredential? = PhoneAuthProvider.provider()
                            .credential(withVerificationID: verificationID!,
                                        verificationCode: verificationCode!)
                          let assertion: MultiFactorAssertion? = PhoneMultiFactorGenerator
                            .assertion(with: credential!)
                          resolver.resolveSignIn(with: assertion!) { authResult, error in
                            if error != nil {
                              print(
                                "Multi factor finanlize sign in failed. Error: \(error.debugDescription)"
                              )
                            } else {
                              self.navigationController?.popViewController(animated: true)
                            }
                          }
                        }
                      )
                    }
                  }
              }
            )
          } else {
            self.showMessagePrompt(error.localizedDescription)
            return
          }
          // ...
          return
        }
        // User is signed in
        // ...
    }

    Цель-C

    [[FIRAuth auth] signInWithCredential:credential
                              completion:^(FIRAuthDataResult * _Nullable authResult,
                                           NSError * _Nullable error) {
        if (isMFAEnabled && error && error.code == FIRAuthErrorCodeSecondFactorRequired) {
          FIRMultiFactorResolver *resolver = error.userInfo[FIRAuthErrorUserInfoMultiFactorResolverKey];
          NSMutableString *displayNameString = [NSMutableString string];
          for (FIRMultiFactorInfo *tmpFactorInfo in resolver.hints) {
            [displayNameString appendString:tmpFactorInfo.displayName];
            [displayNameString appendString:@" "];
          }
          [self showTextInputPromptWithMessage:[NSString stringWithFormat:@"Select factor to sign in\n%@", displayNameString]
                               completionBlock:^(BOOL userPressedOK, NSString *_Nullable displayName) {
           FIRPhoneMultiFactorInfo* selectedHint;
           for (FIRMultiFactorInfo *tmpFactorInfo in resolver.hints) {
             if ([displayName isEqualToString:tmpFactorInfo.displayName]) {
               selectedHint = (FIRPhoneMultiFactorInfo *)tmpFactorInfo;
             }
           }
           [FIRPhoneAuthProvider.provider
            verifyPhoneNumberWithMultiFactorInfo:selectedHint
            UIDelegate:nil
            multiFactorSession:resolver.session
            completion:^(NSString * _Nullable verificationID, NSError * _Nullable error) {
              if (error) {
                [self showMessagePrompt:error.localizedDescription];
              } else {
                [self showTextInputPromptWithMessage:[NSString stringWithFormat:@"Verification code for %@", selectedHint.displayName]
                                     completionBlock:^(BOOL userPressedOK, NSString *_Nullable verificationCode) {
                 FIRPhoneAuthCredential *credential =
                     [[FIRPhoneAuthProvider provider] credentialWithVerificationID:verificationID
                                                                  verificationCode:verificationCode];
                 FIRMultiFactorAssertion *assertion = [FIRPhoneMultiFactorGenerator assertionWithCredential:credential];
                 [resolver resolveSignInWithAssertion:assertion completion:^(FIRAuthDataResult * _Nullable authResult, NSError * _Nullable error) {
                   if (error) {
                     [self showMessagePrompt:error.localizedDescription];
                   } else {
                     NSLog(@"Multi factor finanlize sign in succeeded.");
                   }
                 }];
               }];
              }
            }];
         }];
        }
      else if (error) {
        // ...
        return;
      }
      // User successfully signed in. Get user data from the FIRUser object
      if (authResult == nil) { return; }
      FIRUser *user = authResult.user;
      // ...
    }];

Тест с вымышленными номерами телефонов

Вы можете настроить вымышленные номера телефонов для разработки через консоль Firebase. Тестирование с использованием вымышленных телефонных номеров дает следующие преимущества:

  • Протестируйте аутентификацию по номеру телефона, не используя квоту использования.
  • Проверьте аутентификацию телефонного номера без отправки фактического SMS-сообщения.
  • Выполняйте последовательные тесты с одним и тем же номером телефона без ограничений. Это сводит к минимуму риск отказа в процессе проверки в магазине приложений, если рецензент использует тот же номер телефона для тестирования.
  • Легко тестируйте в средах разработки без каких-либо дополнительных усилий, таких как возможность разработки в симуляторе iOS или эмуляторе Android без сервисов Google Play.
  • Написание интеграционных тестов без блокировки проверок безопасности, обычно применяемых к реальным телефонным номерам в производственной среде.

Вымышленные номера телефонов должны соответствовать следующим требованиям:

  1. Убедитесь, что вы используете номера телефонов, которые действительно вымышлены и еще не существуют. Firebase Authentication не позволяет вам устанавливать существующие телефонные номера, используемые реальными пользователями, в качестве тестовых. Одним из вариантов является использование 555 префиксами числа как тест США телефонных номеров, например: +1 650-555-3434
  2. Номера телефонов должны быть правильно отформатированы с учетом длины и других ограничений. Они по-прежнему будут проходить такую ​​же проверку, что и номер телефона реального пользователя.
  3. Вы можете добавить до 10 номеров телефонов для разработки.
  4. Используйте тестовые телефонные номера / коды, которые сложно угадать, и часто меняйте их.

Создавайте вымышленные номера телефонов и коды подтверждения

  1. В Firebase консоли откройте раздел Проверка подлинности.
  2. В Знаменске на вкладке методы, позволяют поставщик телефона , если вы еще не сделали.
  3. Откройте номера телефона для тестирования меню аккордеона.
  4. Укажите номер телефона , который вы хотите проверить, например: +1 650-555-3434.
  5. Обеспечить код подтверждения 6 цифр для этого конкретного числа, например: 654321.
  6. Добавить номер. При необходимости вы можете удалить номер телефона и его код, наведя курсор на соответствующую строку и щелкнув значок корзины.

Ручное тестирование

Вы можете сразу начать использовать вымышленный номер телефона в своем приложении. Это позволяет выполнять тестирование вручную на этапах разработки без проблем с квотами или ограничения. Вы также можете протестировать прямо из симулятора iOS или эмулятора Android без установленных сервисов Google Play.

Когда вы указываете вымышленный номер телефона и отправляете проверочный код, фактическое SMS не отправляется. Вместо этого вам необходимо предоставить ранее настроенный проверочный код для завершения входа.

По завершении входа создается пользователь Firebase с этим номером телефона. У пользователя такое же поведение и свойства, как у пользователя с реальным номером телефона, и он может получить доступ к базе данных в реальном времени / облачному хранилищу Firestore и другим службам таким же образом. Идентификационный токен, отчеканенный во время этого процесса, имеет ту же подпись, что и пользователь с реальным номером телефона.

Другим вариантом является установить тестовую роль с помощью пользовательских требований по этим пользователям , чтобы дифференцировать их пользователей поддельными , если вы хотите еще больше ограничить доступ.

Интеграционное тестирование

В дополнение к ручному тестированию Firebase Authentication предоставляет API-интерфейсы, которые помогают писать интеграционные тесты для проверки подлинности телефона. Эти API отключают проверку приложений, отключая требование reCAPTCHA в Интернете и беззвучные push-уведомления в iOS. Это делает возможным автоматическое тестирование в этих потоках и упрощает его реализацию. Кроме того, они помогают тестировать потоки мгновенной проверки на Android.

КСН, то appVerificationDisabledForTesting установка должна быть установлена в значение TRUE перед вызовом verifyPhoneNumber . Это обрабатывается без необходимости использования токена APN или отправки тихих push-уведомлений в фоновом режиме, что упрощает тестирование в симуляторе. Это также отключает резервный поток reCAPTCHA.

Обратите внимание, что когда проверка приложений отключена, использование вымышленного номера телефона не приведет к завершению входа в систему. С этим API можно использовать только вымышленные номера телефонов.

Быстрый

let phoneNumber = "+16505554567"

// This test verification code is specified for the given test phone number in the developer console.
let testVerificationCode = "123456"

Auth.auth().settings.isAppVerificationDisabledForTesting = TRUE
PhoneAuthProvider.provider().verifyPhoneNumber(phoneNumber, uiDelegate:nil) {
                                                            verificationID, error in
    if (error) {
      // Handles error
      self.handleError(error)
      return
    }
    let credential = PhoneAuthProvider.provider().credential(withVerificationID: verificationID ?? "",
                                                               verificationCode: testVerificationCode)
    Auth.auth().signInAndRetrieveData(with: credential) { authData, error in
      if (error) {
        // Handles error
        self.handleError(error)
        return
      }
      _user = authData.user
    }];
}];

Цель-C

NSString *phoneNumber = @"+16505554567";

// This test verification code is specified for the given test phone number in the developer console.
NSString *testVerificationCode = @"123456";

[FIRAuth auth].settings.appVerificationDisabledForTesting = YES;
[[FIRPhoneAuthProvider provider] verifyPhoneNumber:phoneNumber
                                        completion:^(NSString *_Nullable verificationID,
                                                     NSError *_Nullable error) {
    if (error) {
      // Handles error
      [self handleError:error];
      return;
    }
    FIRAuthCredential *credential =
        [FIRPhoneAuthProvider credentialWithVerificationID:verificationID
                                          verificationCode:testVerificationCode];
    [FIRAuth auth] signInWithAndRetrieveDataWithCredential:credential
                                                completion:^(FIRUser *_Nullable user,
                                                             NSError *_Nullable error) {
      if (error) {
        // Handles error
        [self handleError:error];
        return;
      }
      _user = user;
    }];
}];

Приложение: Использование входа в систему с телефона без swizzling

Firebase Authentication использует переключение методов для автоматического получения токена APN вашего приложения, для обработки тихих push-уведомлений, которые Firebase отправляет вашему приложению, и для автоматического перехвата перенаправления настраиваемой схемы со страницы проверки reCAPTCHA во время проверки.

Если вы предпочитаете не использовать swizzling, вы можете отключить его, добавив флаг FirebaseAppDelegateProxyEnabled в файл Info.plist вашего приложения и установить его в NO . Обратите внимание , что установка этого флага NO также отключает swizzling для других Firebase продуктов, в том числе Firebase Cloud Messaging.

Если вы отключите swizzling, вы должны явно передать токен устройства APN, push-уведомления и URL-адрес перенаправления настраиваемой схемы в Firebase Authentication.

Для того, чтобы получить маркер APNs устройства, реализовать application:didRegisterForRemoteNotificationsWithDeviceToken: метод, и в нем, передать маркер устройство для FIRAuth «ы setAPNSToken:type: метод.

Быстрый

func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
  // Pass device token to auth
  Auth.auth().setAPNSToken(deviceToken, type: .prod)

  // Further handling of the device token if needed by the app
  // ...
}

Цель-C

- (void)application:(UIApplication *)application
    didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
  // Pass device token to auth.
  [[FIRAuth auth] setAPNSToken:deviceToken type:FIRAuthAPNSTokenTypeProd];
  // Further handling of the device token if needed by the app.
}

Для ручки Push - уведомления, в application:didReceiveRemoteNotification:fetchCompletionHandler: метод, проверка на Firebase AUTH соответствующих уведомлений, позвонив FIRAuth «s canHandleNotification: метод.

Быстрый

func application(_ application: UIApplication,
    didReceiveRemoteNotification notification: [AnyHashable : Any],
    fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
  if Auth.auth().canHandleNotification(notification) {
    completionHandler(.noData)
    return
  }
  // This notification is not auth related, developer should handle it.
}

Цель-C

- (void)application:(UIApplication *)application
    didReceiveRemoteNotification:(NSDictionary *)notification
          fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
  // Pass notification to auth and check if they can handle it.
  if ([[FIRAuth auth] canHandleNotification:notification]) {
    completionHandler(UIBackgroundFetchResultNoData);
    return;
  }
  // This notification is not auth related, developer should handle it.
}

Для обработки перенаправления URL пользовательской схемы, реализация application:openURL:sourceApplication:annotation: метод для устройств , работающих под управлением IOS 8 и старше, а также application:openURL:options: метод для устройств , работающих под управлением IOS 9 и новее, и в них, пройти URL для FIRAuth «s canHandleURL методы.

Быстрый

// For iOS 9+
func application(_ application: UIApplication, open url: URL,
    options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool {
  if Auth.auth().canHandle(url) {
    return true
  }
  // URL not auth related, developer should handle it.
}

// For iOS 8-
func application(_ application: UIApplication,
                 open url: URL,
                 sourceApplication: String?,
                 annotation: Any) -> Bool {
  if Auth.auth().canHandle(url) {
    Return true
  }
  // URL not auth related, developer should handle it.
}

Цель-C

// For iOS 9+
- (BOOL)application:(UIApplication *)app
            openURL:(NSURL *)url
            options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options {
  if ([[FIRAuth auth] canHandleURL:url]) {
    return YES;
  }
  // URL not auth related, developer should handle it.
}

// For iOS 8-
- (BOOL)application:(UIApplication *)application
            openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication
         annotation:(id)annotation {
  if ([[FIRAuth auth] canHandleURL:url]) {
    return YES;
  }
  // URL not auth related, developer should handle it.
}

Если вы используете SwiftUI или UISceneDelegate , для обработки перенаправления URL, реализовать scene:openURLContexts: метод, и в них, передать URL в FIRAuth «s canHandleURL метода.

Быстрый

func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
  for urlContext in URLContexts {
      let url = urlContext.url
      Auth.auth().canHandle(url)
  }
  // URL not auth related, developer should handle it.
}

Цель-C

- (void)scene:(UIScene *)scene openURLContexts:(NSSet<UIOpenURLContext *> *)URLContexts {
  for (UIOpenURLContext *urlContext in URLContexts) {
    [FIRAuth.auth canHandleURL:urlContext.url];
    // URL not auth related, developer should handle it.
  }
}

Следующие шаги

После того, как пользователь входит в систему в первый раз, создается новая учетная запись пользователя, связанная с учетными данными, то есть с именем пользователя и паролем, номером телефона или информацией о провайдере аутентификации, с которыми пользователь вошел в систему. Эта новая учетная запись хранится как часть вашего проекта Firebase и может использоваться для идентификации пользователя в каждом приложении в вашем проекте, независимо от того, как пользователь входит в систему.

  • В приложениях, вы можете получить основную информацию о профиле пользователя из FIRUser объекта. См Управление пользователей .

  • В вашей базе данных в реальном времени и Firebase Cloud Storage правил безопасности , вы можете получить подписанный в уникальном пользователя идентификатор пользователя из auth переменной и использовать его , чтобы контролировать , какие данные пользователь заходит может.

Вы можете позволить пользователям входить в ваше приложение с помощью нескольких поставщиков проверки подлинности с помощью ссылки AUTH учетных данных поставщика к существующему учетной записи пользователя.

Чтобы выйти пользователь, вызовите signOut: .

Быстрый

    let firebaseAuth = Auth.auth()
do {
  try firebaseAuth.signOut()
} catch let signOutError as NSError {
  print("Error signing out: %@", signOutError)
}
  

Цель-C

    NSError *signOutError;
BOOL status = [[FIRAuth auth] signOut:&signOutError];
if (!status) {
  NSLog(@"Error signing out: %@", signOutError);
  return;
}

Вы также можете добавить код обработки ошибок для всего диапазона ошибок аутентификации. См ошибки Берите .