Google is committed to advancing racial equity for Black communities. See how.
Эта страница была переведа с помощью Cloud Translation API.
Switch to English

Аутентификация с Firebase на iOS с использованием номера телефона

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

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

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

  1. Добавьте Firebase в свой проект iOS .
  2. Включите в ваш Podfile следующие Podfile :
    pod 'Firebase/Auth'
    
  3. Если вы еще не подключили свое приложение к проекту Firebase, сделайте это с консоли Firebase .

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

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

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

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

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

  1. В консоли Firebase откройте раздел Аутентификация .
  2. На странице « Метод входа» включите метод входа по номеру телефона .

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

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

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

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

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

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

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

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

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

  1. В Xcode включите push-уведомления для вашего проекта.
  2. Загрузите свой ключ аутентификации APNs в Firebase. Если у вас еще нет ключа аутентификации APN, см. Раздел Настройка APN с помощью FCM .

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

    2. В ключе аутентификации APN в разделе конфигурации приложения iOS нажмите кнопку « Загрузить» .

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

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

Настройте проверку reCAPTCHA

Чтобы включить Firebase SDK для использования проверки reCAPTCHA:

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

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

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

Отправить код подтверждения на телефон пользователя

Чтобы инициировать вход в телефонный номер, предоставьте пользователю интерфейс, который предлагает ему 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
      // ...
    }

    Objective-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 отправляет push-уведомление в ваше приложение verifyPhoneNumber:UIDelegate:completion: сообщений или выдает пользователю вызов reCAPTCHA. После того, как ваше приложение получит уведомление или пользователь выполнит вызов reCAPTCHA, Firebase отправит SMS-сообщение с кодом аутентификации на указанный номер телефона и передаст идентификационный код вашей функции завершения. Для входа в систему вам потребуется и код подтверждения, и идентификатор подтверждения.

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

    стриж

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

    Objective-C

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

    Вы можете сохранить идентификатор подтверждения любым удобным для вас способом. Простой способ - сохранить идентификатор проверки с NSUserDefaults объекта NSUserDefaults :

    стриж

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

    Objective-C

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

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

    стриж

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

    Objective-C

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

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

Войдите в систему с кодом подтверждения

После того, как пользователь предоставит вашему приложению код подтверждения из SMS-сообщения, войдите в него, создав объект FIRPhoneAuthCredential из кода проверки и идентификатора проверки и передав этот объект в signInWithCredential:completion:

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

    стриж

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

    Objective-C

    FIRAuthCredential *credential = [[FIRPhoneAuthProvider provider]
        credentialWithVerificationID:verificationID
                    verificationCode:userInput];
  3. Войдите в систему с FIRPhoneAuthCredential объекта 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
      // ...
    }

    Objective-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-сообщения.
  • Запускайте последовательные тесты с одним и тем же номером телефона без удушья. Это сводит к минимуму риск отклонения в процессе проверки в App Store, если рецензент использует один и тот же номер телефона для тестирования.
  • Легко тестируйте в средах разработки без каких-либо дополнительных усилий, таких как возможность разработки в симуляторе iOS или эмуляторе Android без Google Play Services.
  • Пишите интеграционные тесты, не блокируясь проверками безопасности, обычно применяемыми на реальных телефонных номерах в производственной среде.

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

  1. Убедитесь, что вы используете вымышленные номера, которые еще не существуют. Аутентификация Firebase не позволяет вносить в белый список существующие телефонные номера, используемые реальными пользователями. Один из вариантов - использовать 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 создается с этим номером телефона. Пользователь имеет то же поведение и свойства, что и пользователь с реальным номером телефона, и может получить доступ к базе данных реального времени / облачному хранилищу пожаров и другим службам таким же образом. Идентификационный токен, полученный во время этого процесса, имеет ту же подпись, что и реальный номер телефона пользователя.

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

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

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

В iOS параметр 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
    }];
}];

Objective-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;
    }];
}];

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

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

Если вы предпочитаете не использовать Swizzling, вы можете отключить его, добавив флаг FirebaseAppDelegateProxyEnabled в файл Info.plist вашего приложения и установив для него значение NO . Обратите внимание, что установка этого флага на NO также отключает переключение для других продуктов 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
  // ...
}

Objective-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, вызвав FIRAuth 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.
}

Objective-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: , а application:openURL:options: метод для устройств под управлением iOS 9 и более application:openURL:options: , и в них передайте 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.
}

Objective-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: метод scene:openURLContexts: и в них передайте URL FIRAuth 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.
}

Objective-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 Realtime и облачного хранилища вы можете получить уникальный идентификатор пользователя auth в систему пользователя из переменной auth и использовать его для управления тем, к каким данным пользователь может получить доступ.

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

Чтобы выйти из системы, позвоните signOut:

стриж

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

Objective-C

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

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