
FirebaseUI — это библиотека, построенная на основе Firebase Authentication SDK, которая предоставляет готовые сценарии пользовательского интерфейса для использования в вашем приложении. FirebaseUI предоставляет следующие преимущества:
- Доступны различные провайдеры : авторизация по электронной почте/паролю, по ссылке из электронного письма, по телефону, через Google, Facebook и Twitter.
- Управление учетными записями : процессы для выполнения задач по управлению учетными записями, таких как создание учетных записей и сброс паролей.
- Привязка анонимных учетных записей : алгоритмы для автоматической привязки анонимных учетных записей к поставщикам идентификационных данных.
- Настраиваемость : вы можете настроить внешний вид FirebaseUI в соответствии со своим приложением. Кроме того, поскольку FirebaseUI является проектом с открытым исходным кодом, вы можете создать форк проекта и настроить его в точном соответствии со своими потребностями.
Прежде чем начать
Добавьте FirebaseUI в свой Podfile:
pod 'FirebaseUI'При желании вы можете добавить только компонент аутентификации и поставщиков, которых хотите использовать:
pod 'FirebaseUI/Auth' pod 'FirebaseUI/Google' pod 'FirebaseUI/Facebook' pod 'FirebaseUI/OAuth' # Used for Sign in with Apple, Twitter, etc pod 'FirebaseUI/Phone'Если вы еще не подключили свое приложение к проекту Firebase, сделайте это через консоль Firebase .
Настройка способов входа в систему
Прежде чем использовать Firebase для авторизации пользователей, необходимо включить и настроить поддерживаемые методы авторизации.
Адрес электронной почты и пароль
В консоли Firebase откройте раздел «Аутентификация» и включите аутентификацию по электронной почте и паролю.
Аутентификация по ссылке электронной почты
В консоли Firebase откройте раздел «Аутентификация» . На вкладке «Метод входа» включите поставщика аутентификации по электронной почте/паролю . Обратите внимание, что для использования входа по ссылке из электронной почты необходимо включить вход по электронной почте или паролю.
В этом же разделе включите вход по ссылке из электронной почты (вход без пароля) и нажмите «Сохранить» .
Включить вход по ссылке из электронной почты можно, инициализировав экземпляр
FUIEmailAuthс помощьюFIREmailLinkAuthSignInMethod. Также потребуется предоставить действительный объектFIRActionCodeSettingsсhandleCodeInApp, установленным в значение true.Быстрый
var actionCodeSettings = ActionCodeSettings() actionCodeSettings.url = URL(string: "https://example.firebasestorage.app") 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)Objective-C
FIRActionCodeSettings *actionCodeSettings = [[FIRActionCodeSettings alloc] init]; actionCodeSettings.URL = [NSURL URLWithString:@"https://example.firebasestorage.app"]; 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];Кроме того, необходимо добавить URL-адрес, передаваемый инициализатору, в белый список. Это можно сделать в консоли Firebase , открыв раздел «Аутентификация» . На вкладке «Метод входа» добавьте URL-адрес в раздел «Авторизованные домены» .
После того, как вы перехватите прямую ссылку, вам нужно будет передать её в пользовательский интерфейс аутентификации для обработки.
Быстрый
FUIAuth.defaultAuthUI()!.handleOpen(url, sourceApplication: sourceApplication)Objective-C
[[FUIAuth defaultAuthUI] handleOpenURL:url sourceApplication:sourceApplication];Вход по ссылке из электронной почты в FirebaseUI-iOS совместим с FirebaseUI-Android и FirebaseUI-web , где пользователь, запускающий процесс из FirebaseUI-Android, может открыть ссылку и завершить вход в систему с помощью FirebaseUI-web. То же самое справедливо и для обратного процесса.
Яблоко
В руководстве по входу в Firebase с помощью Apple следуйте инструкциям в разделах « Перед началом работы» и «Соблюдение требований Apple к анонимизированным данным» .
Добавьте возможность входа через Apple в файл прав доступа.
Инициализируйте экземпляр поставщика OAuth, настроенный для входа с помощью Apple:
Быстрый
provider = FUIOAuth.appleAuthProvider()
Objective-C
FUIOAuth *provider = [FUIOAuth appleAuthProvider];
- Настройте вход через Google, используя это руководство.
Фейсбук
Настройте SDK для входа через Facebook, следуя инструкциям на странице начала работы Facebook .
В консоли Firebase откройте раздел «Аутентификация» и включите Facebook. Для включения входа через Facebook необходимо указать свой идентификатор приложения Facebook (App ID) и секретный ключ приложения (App Secret), которые можно получить в консоли разработчиков Facebook.
Включите совместное использование связки ключей в вашем проекте Xcode на экране «Настройки проекта» > «Возможности» .
Добавьте
fb FACEBOOK_APP_IDв качестве схемы URL в свой проект Xcode.Добавьте идентификатор вашего приложения Facebook и отображаемое имя в файл
Info.plist:Ключ Ценить FacebookAppID FACEBOOK_APP_ID(например,1234567890)FacebookDisplayName Название вашего приложения Инициализация экземпляра провайдера Facebook:
Быстрый
provider = FUIFacebookAuth(authUI: FUIAuth.defaultAuthUI())
Objective-C
FUIFacebookAuth *provider = [[FUIFacebookAuth alloc] initWithAuthUI:[FUIAuth defaultAuthUI]];
Если вы хотите использовать ограниченный вход через Facebook , установите свойство
useLimitedLoginв экземпляреFUIFacebookAuth.Быстрый
provider.useLimitedLogin = true
Objective-C
provider.useLimitedLogin = YES;
Твиттер
В консоли Firebase откройте раздел «Аутентификация» и включите Twitter. Для включения входа через Twitter необходимо указать ключ и секрет вашего API-потребителя Twitter, которые можно получить в консоли управления приложениями Twitter.
Инициализируйте экземпляр поставщика OAuth, настроенный для входа через Twitter:
Быстрый
provider = FUIOAuth.twitterAuthProvider()
Objective-C
FUIOAuth *provider = [FUIOAuth twitterAuthProvider];
Номер телефона
В консоли Firebase откройте раздел «Аутентификация» и включите вход по номеру телефона.
Firebase должен иметь возможность проверять, что запросы на вход по номеру телефона поступают из вашего приложения. Один из способов сделать это — использовать уведомления APNs. Подробнее см. раздел «Включение проверки приложения» .
Чтобы включить уведомления APNs для использования с Firebase Authentication :
В Xcode включите push-уведомления для вашего проекта.
Загрузите свой ключ аутентификации APNs в Firebase. Если у вас еще нет ключа аутентификации APNs, обязательно создайте его в Центре разработчиков Apple .
- В консоли Firebase перейдите по адресу
> Общие . Затем перейдите на вкладку «Облачные сообщения» . - В разделе «Ключ аутентификации APNs» в настройках приложения iOS нажмите «Загрузить» , чтобы загрузить ключ аутентификации для разработки, ключ аутентификации для производства или оба. Требуется как минимум один ключ.
- Перейдите к месту, где вы сохранили свой ключ, выберите его и нажмите «Открыть» . Добавьте идентификатор ключа (доступен в Центре для разработчиков Apple ) и нажмите «Загрузить» .
Если у вас уже есть сертификат APNs, вы можете загрузить его вместо сертификата.
- В консоли Firebase перейдите по адресу
Если на устройстве не удается получить уведомления APNs, Firebase использует reCAPTCHA для проверки запросов.
Чтобы включить проверку reCAPTCHA, выполните следующие действия в Xcode:
- Откройте конфигурацию проекта: дважды щелкните имя проекта в левом древовидном представлении. Выберите свое приложение в разделе «ЦЕЛИ» , затем перейдите на вкладку «Информация» и разверните раздел «Типы URL» .
- Нажмите кнопку «+» и добавьте свой закодированный идентификатор приложения в качестве схемы URL. Вы можете найти свой закодированный идентификатор приложения на странице «Общие настройки» консоли Firebase в разделе вашего iOS-приложения. Остальные поля оставьте пустыми.
После завершения настройки ваш конфигурационный файл должен выглядеть примерно так (но с учетом значений, специфичных для вашего приложения):

Необязательно : Firebase использует подмену методов для автоматического получения токена APNs вашего приложения, обработки бесшумных push-уведомлений, отправляемых Firebase вашему приложению, и автоматического перехвата перенаправления пользовательской схемы со страницы проверки reCAPTCHA во время проверки.
Если вы предпочитаете не использовать подмену паролей (swizzling), см. Приложение: Использование входа по телефону без подмены паролей в документации по аутентификации Firebase SDK.
Войти
Чтобы запустить процесс авторизации в FirebaseUI, сначала инициализируйте FirebaseUI:
Быстрый
import FirebaseAuthUI
/* ... */
FirebaseApp.configure()
let authUI = FUIAuth.defaultAuthUI()
// You need to adopt a FUIAuthDelegate protocol to receive callback
authUI.delegate = self
Objective-C
@import FirebaseAuthUI;
...
[FIRApp configure];
FUIAuth *authUI = [FUIAuth defaultAuthUI];
// You need to adopt a FUIAuthDelegate protocol to receive callback
authUI.delegate = self;
Затем настройте FirebaseUI для использования тех методов входа в систему, которые вы хотите поддерживать:
Быстрый
import FirebaseAuthUI
import FirebaseFacebookAuthUI
import FirebaseGoogleAuthUI
import FirebaseOAuthUI
import FirebasePhoneAuthUI
let providers: [FUIAuthProvider] = [
FUIGoogleAuth(),
FUIFacebookAuth(),
FUITwitterAuth(),
FUIPhoneAuth(authUI:FUIAuth.defaultAuthUI()),
]
self.authUI.providers = providers
Objective-C
@import FirebaseAuthUI;
@import FirebaseFacebookAuthUI;
@import FirebaseGoogleAuthUI;
@import FirebaseOAuthUI;
@import FirebasePhoneAuthUI;
...
NSArray<id<FUIAuthProvider>> *providers = @[
[[FUIGoogleAuth alloc] init],
[[FUIFacebookAuth alloc] init],
[[FUITwitterAuth alloc] init],
[[FUIPhoneAuth alloc] initWithAuthUI:[FUIAuth defaultAuthUI]]
];
_authUI.providers = providers;
Если вы включили вход через 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
}
Objective-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)
Objective-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
}
Objective-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()
Objective-C
[authUI signOut];
Настройка
Вы можете настроить экраны входа в систему, создав подклассы контроллеров представлений FirebaseUI и указав их в методах делегата FUIAuth :
Быстрый
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)
}
Objective-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
Objective-C
authUI.TOSURL = [NSURL URLWithString:@"https://example.com/terms"];
Наконец, вы можете настроить сообщения и подсказки, отображаемые пользователям, указав пользовательский пакет:
Быстрый
authUI.customStringsBundle = NSBundle.mainBundle() // Or any custom bundle.
Objective-C
authUI.customStringsBundle = [NSBundle mainBundle]; // Or any custom bundle.
Следующие шаги
- Для получения дополнительной информации об использовании и настройке FirebaseUI см. файл README на GitHub.
- Если вы обнаружили проблему в FirebaseUI и хотите сообщить о ней, воспользуйтесь системой отслеживания ошибок GitHub .