
FirebaseUI Auth – это библиотека, созданная на основе Firebase Authentication SDK. Она предоставляет готовые интерфейсы для использования в приложении.
Рекомендуемый процесс входа использует экраны создания. Если вы используете приложения, в которых по-прежнему применяются действия, ознакомьтесь с разделом Приложения на основе действий.
FirebaseUI Auth имеет следующие преимущества:
- Несколько поставщиков – процессы входа с использованием электронной почты и пароля, телефона, аккаунтов Google, Facebook, Apple, GitHub, Microsoft, Yahoo, Twitter, анонимной аутентификации и пользовательского OAuth.
- Управление аккаунтом – процессы для выполнения задач по управлению аккаунтом, например создания аккаунта и сброса пароля.
- Связывание аккаунтов – позволяет безопасно связывать аккаунты пользователей с разными поставщиками идентификационной информации.
- Переход анонимного пользователя на платную версию – пути безопасного перехода анонимных пользователей на платную версию.
- Специальные темы. Поддержка интерфейса Material 3, который может наследовать тему вашего приложения. Кроме того, поскольку FirebaseUI имеет открытый исходный код, вы можете создать форк проекта и настроить его в соответствии со своими потребностями.
- Менеджер учетных данных – автоматическая интеграция с Менеджером учетных данных для быстрого входа на разных устройствах.
- Многофакторная аутентификация – поддержка SMS и TOTP для дополнительной защиты.
Подготовка
- Если вы ещё этого не сделали, добавьте Firebase в проект для Android.
- В консоли Firebase включите нужные способы входа.
- Добавьте FirebaseUI Auth в модуль приложения:
dependencies {
// Check Maven Central for the latest version:
// https://central.sonatype.com/artifact/com.firebaseui/firebase-ui-auth/versions
implementation("com.firebaseui:firebase-ui-auth:10.0.0-beta02")
// Required only if Facebook login support is required
// Find the latest Facebook SDK releases here: https://goo.gl/Ce5L94
implementation("com.facebook.android:facebook-android-sdk:8.x")
}
Как настроить способы входа
вход с аккаунтом Google
Конфигурация входа с аккаунтом Google автоматически предоставляется файлом конфигурации .
Убедитесь, что в консоли Firebase включен вход с аккаунтом Google.
Вход через Facebook
Если вы используете вход через Facebook, добавьте идентификатор приложения Facebook в strings.xml:
<resources>
<string name="facebook_application_id" translatable="false">YOUR_FACEBOOK_APP_ID</string>
<string name="facebook_login_protocol_scheme" translatable="false">fbYOUR_FACEBOOK_APP_ID</string>
<string name="facebook_client_token" translatable="false">CHANGE-ME</string>
</resources>
Инструкции по настройке приведены в документации Facebook для разработчиков.
Другие поставщики
Для поставщиков Twitter, GitHub, Microsoft, Yahoo и Apple требуется настройка в Firebase Console, но не нужны дополнительные настройки для Android. Инструкции для разных поставщиков приведены в документации по Firebase Auth.
Выберите поставщиков, которых вы хотите добавить в authUIConfiguration:
val configuration = authUIConfiguration {
context = applicationContext
providers {
provider(AuthProvider.Email())
provider(
AuthProvider.Phone(
defaultCountryCode = "US",
)
)
provider(
AuthProvider.Google(
scopes = listOf("email"),
serverClientId = null,
)
)
provider(AuthProvider.Facebook())
}
}
Вход по ссылке, отправленной на адрес электронной почты
Вход по ссылке из письма настраивается в конфигурации поставщика услуг электронной почты:
val configuration = authUIConfiguration {
context = applicationContext
providers {
provider(
AuthProvider.Email(
isEmailLinkSignInEnabled = true,
emailLinkActionCodeSettings = actionCodeSettings {
url = "https://example.com/auth"
handleCodeInApp = true
setAndroidPackageName(
"com.example.app",
true,
null,
)
},
)
)
}
}
Полный процесс обработки глубоких ссылок описан в разделе Email Link Sign-In (Вход по ссылке из письма) файла README на GitHub.
Войти
Создайте AuthUIConfiguration, а затем покажите FirebaseAuthScreen.
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val authUI = FirebaseAuthUI.getInstance()
setContent {
MyAppTheme {
val configuration = authUIConfiguration {
context = applicationContext
theme = AuthUITheme.fromMaterialTheme()
providers {
provider(AuthProvider.Email())
provider(
AuthProvider.Google(
scopes = listOf("email"),
serverClientId = null,
)
)
}
}
if (authUI.isSignedIn()) {
HomeScreen()
} else {
FirebaseAuthScreen(
configuration = configuration,
authUI = authUI,
onSignInSuccess = { result ->
// User signed in successfully
},
onSignInFailure = { exception ->
// Sign in failed
},
onSignInCancelled = {
finish()
},
)
}
}
}
}
}
Это позволяет реализовать полный процесс аутентификации, который включает:
- Аутентификация с помощью пароля.
- Вход с аккаунтом Google.
- Сброс пароля.
- Стиль Material 3.
- Поддержка Менеджера учетных данных.
- Обработка ошибок с помощью прямых обратных вызовов.
Выйти
В FirebaseUI Auth есть удобные методы для выхода из аккаунта и его удаления:
lifecycleScope.launch {
FirebaseAuthUI.getInstance().signOut(applicationContext)
}
lifecycleScope.launch {
FirebaseAuthUI.getInstance().delete(applicationContext)
}
Настройки
FirebaseUI Auth можно настроить. Самый простой способ начать работу – задать тему непосредственно в authUIConfiguration:
val configuration = authUIConfiguration {
context = applicationContext
providers {
provider(AuthProvider.Email())
provider(AuthProvider.Google(scopes = listOf("email"), serverClientId = null))
}
theme = AuthUITheme.Adaptive
}
Вы также сможете:
- Используйте
AuthUITheme.Default,AuthUITheme.DefaultDarkилиAuthUITheme.Adaptive. - Наследуйте тему приложения с помощью
AuthUITheme.fromMaterialTheme(). - Настройте тему по умолчанию с помощью
.copy(). - Создайте полностью настраиваемый
AuthUITheme. - Укажите логотип, URL условий использования и URL политики конфиденциальности в
authUIConfiguration.
Подробную информацию о темах и настройках, в том числе о приоритете тем, стилях кнопок поставщиков и специальных темах, можно найти в разделе Theming and Customization файла readme на GitHub.
Существующие приложения на основе действий
Если в вашем приложении по-прежнему используются объекты Activity и Activity Result API, вы можете сохранить запуск на основе Activity, используя AuthFlowController:
private val authLauncher = registerForActivityResult(
ActivityResultContracts.StartActivityForResult(),
) { result ->
if (result.resultCode == RESULT_OK) {
val user = FirebaseAuth.getInstance().currentUser
// ...
} else {
// User cancelled or sign-in failed
}
}
val configuration = authUIConfiguration {
context = applicationContext
providers {
provider(AuthProvider.Email())
provider(
AuthProvider.Google(
scopes = listOf("email"),
serverClientId = null,
)
)
}
}
val controller = FirebaseAuthUI.getInstance().createAuthFlow(configuration)
authLauncher.launch(controller.createIntent(this))