Google 致力于为黑人社区推动种族平等。查看具体举措

Легко добавьте вход в приложение iOS с помощью FirebaseUI

FirebaseUI библиотека построена на вершине Firebase Authentication SDK , который обеспечивает снижение в UI потоков для использования в вашем приложении. FirebaseUI предоставляет следующие преимущества:

  • Несколько поставщиков: вход в потоках для электронной почты / пароль, адрес электронной связи, аутентификации телефона, Вход в Google, Facebook Вход и Twitter Вход.
  • Управление счета: потоки для решения задач управления учетных записей, таких как создание учетной записи и сброс пароля.
  • Anonymous счет ссылок: потоки автоматически связывать анонимные счета для провайдеров удостоверений.
  • Настраиваемый: настроить внешний вид FirebaseUI в соответствии с вашим приложением. Кроме того, поскольку FirebaseUI имеет открытый исходный код, вы можете выполнить форк проекта и настроить его в точном соответствии со своими потребностями.

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

  1. Добавить Firebase в свой проект IOS .

  2. Добавьте FirebaseUI в свой подфайл:

    pod 'FirebaseUI'
    

    При желании вы можете добавить только компонент Auth и поставщиков, которых хотите использовать:

    pod 'FirebaseUI/Auth'
    
    pod 'FirebaseUI/Google'
    pod 'FirebaseUI/Facebook'
    pod 'FirebaseUI/OAuth' # Used for Sign in with Apple, Twitter, etc
    pod 'FirebaseUI/Phone'
    
  3. Если вы еще не подключили приложение к вашему проекту Firebase, сделать это из консоли Firebase .

Настроить методы входа

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

Адрес электронной почты и пароль

В Firebase консоли откройте раздел Проверка подлинности и включить адрес электронной почты и пароль аутентификации.

  1. В Firebase консоли откройте раздел Проверка подлинности. На вкладке Вход в метод, позволяют поставщику Email / пароль. Обратите внимание, что вход по электронной почте / паролю должен быть включен, чтобы использовать ссылку для входа по электронной почте.

  2. В том же разделе включить ссылку по электронной почте ( без пароля входа в) входе в методе и нажмите кнопку Сохранить.

  3. Вы можете включить электронную ссылку в знак при инициализации FUIEmailAuth экземпляра с FIREmailLinkAuthSignInMethod . Вам также необходимо предоставить действительный FIRActionCodeSettings объект с handleCodeInApp значение ИСТИНА.

Быстрый

var actionCodeSettings = ActionCodeSettings()
actionCodeSettings.url = URL(string: "https://example.appspot.com")
actionCodeSettings.handleCodeInApp = true
actionCodeSettings.setAndroidPackageName("com.firebase.example", installIfNotAvailable: false, minimumVersion: "12")

let provider = FUIEmailAuth(authUI: FUIAuth.defaultAuthUI()!,
                            signInMethod: FIREmailLinkAuthSignInMethod,
                            forceSameDevice: false,
                            allowNewEmailAccounts: true,
                            actionCodeSetting: actionCodeSettings)

Цель-C

FIRActionCodeSettings *actionCodeSettings = [[FIRActionCodeSettings alloc] init];
actionCodeSettings.URL = [NSURL URLWithString:@"https://example.appspot.com"];
actionCodeSettings.handleCodeInApp = YES;
[actionCodeSettings setAndroidPackageName:@"com.firebase.example"
                    installIfNotAvailable:NO
                           minimumVersion:@"12"];

id<FUIAuthProvider> provider = [[FUIEmailAuth alloc] initWithAuthUI:[FUIAuth defaultAuthUI]
                                                       signInMethod:FIREmailLinkAuthSignInMethod
                                                    forceSameDevice:NO
                                              allowNewEmailAccounts:YES
                                                  actionCodeSetting:actionCodeSettings];
  1. Кроме того, вам необходимо внести в белый список URL-адрес, который вы передаете инициализатору. Вы можете сделать это в консоли Firebase , откройте раздел Проверка подлинности. На вкладке Вход в метод, добавьте URL в соответствии с Уставной доменов.

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

Быстрый

FUIAuth.defaultAuthUI()!.handleOpen(url, sourceApplication: sourceApplication)

Цель-C

[[FUIAuth defaultAuthUI] handleOpenURL:url sourceApplication:sourceApplication];
  1. Отправить ссылку вход в FirebaseUI-прошивке совместим с FirebaseUI-Android и FirebaseUI-сетью , где один пользователь начинает поток из FirebaseUI-Android может открыть ссылку и полный вход с FirebaseUI-сетью. То же верно и для обратного потока.

яблоко

  1. Следуйте Перед тем, как начать и Соответствует компанию Apple анонимных данных требований разделов в Firebase Входе с Apple , руководством.

  2. Добавьте возможность входа через Apple в свой файл прав.

  3. Инициализируйте экземпляр поставщика OAuth, настроенный для входа с помощью Apple:

    Быстрый

    provider = FUIOAuth.appleAuthProvider()
    

    Цель-C

    FUIOAuth *provider = [FUIOAuth appleAuthProvider];
    

Google

  1. В Firebase консоли откройте раздел Проверка подлинности и включить Вход в Google.

  2. Добавьте обратный идентификатор клиента в качестве схемы URL-адреса в свой проект Xcode. Вы можете найти это значение в GoogleService-Info.plist файл.

Facebook

  1. Настройка Facebook Войти SDK, следуя странице Начало работы на Facebook .

  2. В Firebase консоли откройте раздел Проверка подлинности и включить Facebook. Чтобы включить вход в Facebook, вы должны предоставить свой идентификатор приложения Facebook и секрет приложения, которые вы можете получить в консоли разработчиков Facebook.

  3. Включить брелка обмена в проекте Xcode от параметров проекта> экран возможностей.

  4. Добавить fb FACEBOOK_APP_ID в качестве схемы URL в проекте Xcode.

  5. Добавить Facebook App ID и отображаемое имя для Info.plist файла:

    Ключ Ценить
    FacebookAppID FACEBOOK_APP_ID (например, 1234567890 )
    FacebookDisplayName Название вашего приложения

Твиттер

  1. В Firebase консоли откройте раздел Проверка подлинности и включить Twitter. Чтобы включить вход в Twitter, вы должны предоставить свой ключ и секрет API Twitter API, которые вы можете получить в консоли управления приложениями Twitter.

  2. Инициализируйте экземпляр поставщика OAuth, настроенный для входа в Twitter:

    Быстрый

    provider = FUIOAuth.twitterAuthProvider()
    

    Цель-C

    FUIOAuth *provider = [FUIOAuth twitterAuthProvider];
    

Номер телефона

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

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

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

    1. В Xcode, включить уведомление толчка для вашего проекта.

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

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

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

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

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

  3. Когда уведомления APN не могут быть получены на устройстве, Firebase использует reCAPTCHA для проверки запросов.

    Чтобы включить проверку reCAPTCHA, если вы еще не добавили обратный идентификатор клиента в качестве схемы URL (например, для включения входа в Google), сделайте это в своем проекте Xcode. Вы можете найти это значение в GoogleService-Info.plist файл.

  4. Дополнительно: Firebase использует метод swizzling для автоматического получения APNs вашего приложения лексем, обрабатывать молчащие уведомления толчка , который Firebase посылает в ваше приложение и автоматически перехватывать пользовательские схемы перенаправления со страницы проверки ReCaptcha во время проверки.

    Если вы предпочитаете не использовать swizzling см Приложение: Использование телефона знак в без swizzling в документации аутентификации Firebase SDK.

Войти

Чтобы запустить процесс входа в FirebaseUI, сначала инициализируйте FirebaseUI:

Быстрый

import FirebaseUI

/* ... */

FirebaseApp.configure()
let authUI = FUIAuth.defaultAuthUI()
// You need to adopt a FUIAuthDelegate protocol to receive callback
authUI.delegate = self

Цель-C

@import FirebaseUI;

...

[FIRApp configure];
FUIAuth *authUI = [FUIAuth defaultAuthUI];
// You need to adopt a FUIAuthDelegate protocol to receive callback
authUI.delegate = self;

Затем настройте FirebaseUI для использования тех методов входа, которые вы хотите поддерживать:

Быстрый

import FirebaseUI

let providers: [FUIAuthProvider] = [
  FUIGoogleAuth(),
  FUIFacebookAuth(),
  FUITwitterAuth(),
  FUIPhoneAuth(authUI:FUIAuth.defaultAuthUI()),
]
self.authUI.providers = providers

Цель-C

@import FirebaseUI;

...

NSArray<id<FUIAuthProvider>> *providers = @[
  [[FUIGoogleAuth alloc] init],
  [[FUIFacebookAuth alloc] init],
  [[FUITwitterAuth alloc] init],
  [[FUIPhoneAuth alloc] initWithAuthUI:[FUIAuth defaultAuthUI]]
];
_authUI.providers = providers;

Если вы включили вход в Google или Facebook, реализуйте обработчик результатов потоков регистрации в Google и Facebook:

Быстрый

func application(_ app: UIApplication, open url: URL,
    options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool {
  let sourceApplication = options[UIApplicationOpenURLOptionsKey.sourceApplication] as! String?
  if FUIAuth.defaultAuthUI()?.handleOpen(url, sourceApplication: sourceApplication) ?? false {
    return true
  }
  // other URL handling goes here.
  return false
}

Цель-C

- (BOOL)application:(UIApplication *)app
            openURL:(NSURL *)url
            options:(NSDictionary *)options {
  NSString *sourceApplication = options[UIApplicationOpenURLOptionsSourceApplicationKey];
  return [[FUIAuth defaultAuthUI] handleOpenURL:url sourceApplication:sourceApplication];
}

И, наконец, получить экземпляр AuthViewController из FUIAuth . Затем вы можете либо представить его как первый контроллер представления вашего приложения, либо представить его из другого контроллера представления в вашем приложении.

Быстрый

Чтобы получить селектор метода входа:

let authViewController = authUI.authViewController()

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

let phoneProvider = FUIAuth.defaultAuthUI().providers.first as! FUIPhoneAuth
phoneProvider.signIn(withPresenting: currentlyVisibleController, phoneNumber: nil)

Цель-C

Чтобы получить селектор метода входа:

UINavigationController *authViewController = [authUI authViewController];

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

FUIPhoneAuth *phoneProvider = [FUIAuth defaultAuthUI].providers.firstObject;
[phoneProvider signInWithPresentingViewController:currentlyVisibleController phoneNumber:nil];

После того, как вы представите вид аутентификации и знаки пользователя в результат возвращается делегатом FirebaseUI Auth в didSignInWithUser:error: метод:

Быстрый

func authUI(_ authUI: FUIAuth, didSignInWith user: FIRUser?, error: Error?) {
  // handle user and error as necessary
}

Цель-C

   - (void)authUI:(FUIAuth *)authUI
didSignInWithUser:(nullable FIRUser *)user
            error:(nullable NSError *)error {
  // Implement this method to handle signed in user or error if any.
}

Выход

FirebaseUI предоставляет удобные методы для выхода из Firebase Authentication, а также всех провайдеров социальной идентификации:

Быстрый

authUI.signOut()

Цель-C

[authUI signOut];

Настройка

Вы можете настроить вход в экранах с помощью подклассов контроллеров отображения FirebaseUI и указав их в FUIAuth методов делегата «S:

Быстрый

func authPickerViewController(forAuthUI authUI: FUIAuth) -> FUIAuthPickerViewController {
  return FUICustomAuthPickerViewController(nibName: "FUICustomAuthPickerViewController",
                                           bundle: Bundle.main,
                                           authUI: authUI)
}

func emailEntryViewController(forAuthUI authUI: FUIAuth) -> FUIEmailEntryViewController {
  return FUICustomEmailEntryViewController(nibName: "FUICustomEmailEntryViewController",
                                           bundle: Bundle.main,
                                           authUI: authUI)
}

func passwordRecoveryViewController(forAuthUI authUI: FUIAuth, email: String) -> FUIPasswordRecoveryViewController {
  return FUICustomPasswordRecoveryViewController(nibName: "FUICustomPasswordRecoveryViewController",
                                                 bundle: Bundle.main,
                                                 authUI: authUI,
                                                 email: email)
}

func passwordSignInViewController(forAuthUI authUI: FUIAuth, email: String) -> FUIPasswordSignInViewController {
  return FUICustomPasswordSignInViewController(nibName: "FUICustomPasswordSignInViewController",
                                               bundle: Bundle.main,
                                               authUI: authUI,
                                               email: email)
}

func passwordSignUpViewController(forAuthUI authUI: FUIAuth, email: String) -> FUIPasswordSignUpViewController {
  return FUICustomPasswordSignUpViewController(nibName: "FUICustomPasswordSignUpViewController",
                                               bundle: Bundle.main,
                                               authUI: authUI,
                                               email: email)
}

func passwordVerificationViewController(forAuthUI authUI: FUIAuth, email: String, newCredential: AuthCredential) -> FUIPasswordVerificationViewController {
  return FUICustomPasswordVerificationViewController(nibName: "FUICustomPasswordVerificationViewController",
                                                     bundle: Bundle.main,
                                                     authUI: authUI,
                                                     email: email,
                                                     newCredential: newCredential)
}

Цель-C

- (FUIAuthPickerViewController *)authPickerViewControllerForAuthUI:(FUIAuth *)authUI {
  return [[FUICustomAuthPickerViewController alloc] initWithNibName:@"FUICustomAuthPickerViewController"
                                                             bundle:[NSBundle mainBundle]
                                                             authUI:authUI];
}

- (FUIEmailEntryViewController *)emailEntryViewControllerForAuthUI:(FUIAuth *)authUI {
  return [[FUICustomEmailEntryViewController alloc] initWithNibName:@"FUICustomEmailEntryViewController"
                                                             bundle:[NSBundle mainBundle]
                                                             authUI:authUI];

}

- (FUIPasswordSignInViewController *)passwordSignInViewControllerForAuthUI:(FUIAuth *)authUI
                                                                     email:(NSString *)email {
  return [[FUICustomPasswordSignInViewController alloc] initWithNibName:@"FUICustomPasswordSignInViewController"
                                                                 bundle:[NSBundle mainBundle]
                                                                 authUI:authUI
                                                                  email:email];

}

- (FUIPasswordSignUpViewController *)passwordSignUpViewControllerForAuthUI:(FUIAuth *)authUI
                                                                     email:(NSString *)email {
  return [[FUICustomPasswordSignUpViewController alloc] initWithNibName:@"FUICustomPasswordSignUpViewController"
                                                                 bundle:[NSBundle mainBundle]
                                                                 authUI:authUI
                                                                  email:email];

}

- (FUIPasswordRecoveryViewController *)passwordRecoveryViewControllerForAuthUI:(FUIAuth *)authUI
                                                                         email:(NSString *)email {
  return [[FUICustomPasswordRecoveryViewController alloc] initWithNibName:@"FUICustomPasswordRecoveryViewController"
                                                                   bundle:[NSBundle mainBundle]
                                                                   authUI:authUI
                                                                    email:email];

}

- (FUIPasswordVerificationViewController *)passwordVerificationViewControllerForAuthUI:(FUIAuth *)authUI
                                                                                 email:(NSString *)email
                                                                         newCredential:(FIRAuthCredential *)newCredential {
  return [[FUICustomPasswordVerificationViewController alloc] initWithNibName:@"FUICustomPasswordVerificationViewController"
                                                                       bundle:[NSBundle mainBundle]
                                                                       authUI:authUI
                                                                        email:email
                                                                newCredential:newCredential];
}

Вы можете настроить URL-адрес в соответствии с условиями обслуживания вашего приложения, ссылка на которые находится на экране создания учетной записи:

Быстрый

let kFirebaseTermsOfService = URL(string: "https://example.com/terms")!
authUI.tosurl = kFirebaseTermsOfService

Цель-C

authUI.TOSURL = [NSURL URLWithString:@"https://example.com/terms"];

Наконец, вы можете настроить сообщения и подсказки, отображаемые для ваших пользователей, указав настраиваемый пакет:

Быстрый

authUI.customStringsBundle = NSBundle.mainBundle() // Or any custom bundle.

Цель-C

authUI.customStringsBundle = [NSBundle mainBundle]; // Or any custom bundle.

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

  • Для получения дополнительной информации об использовании и настройке FirebaseUI см README файл на GitHub.
  • Если вы нашли и вопрос в FirebaseUI и хотел бы сообщить об этом, используйте систему отслеживания проблем GitHub .