
FirebaseUI Auth — это библиотека, созданная на основе Firebase Authentication SDK, которая предоставляет готовые сценарии пользовательского интерфейса для использования в вашем приложении.
Рекомендуемый процесс входа в систему использует экраны создания записей. Для приложений, которые по-прежнему используют Activity, см. раздел « Существующие приложения на основе Activity» .
Аутентификация FirebaseUI предоставляет следующие преимущества:
- Поддержка нескольких провайдеров — сценарии входа в систему с использованием электронной почты/пароля, телефона, Google, Facebook, Apple, GitHub, Microsoft, Yahoo, Twitter, анонимной аутентификации и пользовательской аутентификации OAuth.
- Управление учетными записями — процессы для выполнения задач по управлению учетными записями, таких как создание учетных записей и сброс паролей.
- Связывание учетных записей — процессы для безопасного связывания учетных записей пользователей в разных системах идентификации.
- Обновление учетных записей анонимных пользователей — алгоритмы для безопасного обновления учетных записей анонимных пользователей.
- Пользовательские темы — поддержка Material 3 UI, позволяющая наследовать тему вашего приложения. Кроме того, поскольку 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 автоматически предоставляется плагином google-services Gradle . Убедитесь, что вы включили вход через Google в консоли Firebase .
Вход через 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, но дополнительная настройка, специфичная для 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,
)
},
)
)
}
}
Полный алгоритм обработки прямых ссылок см. в разделе «Вход по ссылке из электронной почты» файла 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.
- Сброс пароля.
- Материал 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. - В параметре
authUIConfigurationукажите логотип, URL-адрес условий использования и URL-адрес политики конфиденциальности.
Подробную информацию о настройке и оформлении, включая приоритет тем, стиль кнопок поставщика и пользовательские темы, см. в разделе «Настройка и оформление» файла README на GitHub .
Существующие приложения, основанные на активности
Если ваше приложение по-прежнему использует Activity и API результатов Activity, вы можете сохранить поток запуска на основе 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))