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

FirebaseUI Auth — это библиотека, созданная на основе Firebase Authentication SDK, которая предоставляет готовые сценарии пользовательского интерфейса для использования в вашем приложении.

Рекомендуемый процесс входа в систему использует экраны создания записей. Для приложений, которые по-прежнему используют Activity, см. раздел « Существующие приложения на основе Activity» .

Аутентификация FirebaseUI предоставляет следующие преимущества:

  • Поддержка нескольких провайдеров — сценарии входа в систему с использованием электронной почты/пароля, телефона, Google, Facebook, Apple, GitHub, Microsoft, Yahoo, Twitter, анонимной аутентификации и пользовательской аутентификации OAuth.
  • Управление учетными записями — процессы для выполнения задач по управлению учетными записями, таких как создание учетных записей и сброс паролей.
  • Связывание учетных записей — процессы для безопасного связывания учетных записей пользователей в разных системах идентификации.
  • Обновление учетных записей анонимных пользователей — алгоритмы для безопасного обновления учетных записей анонимных пользователей.
  • Пользовательские темы — поддержка Material 3 UI, позволяющая наследовать тему вашего приложения. Кроме того, поскольку FirebaseUI является проектом с открытым исходным кодом, вы можете создать форк проекта и настроить его в точном соответствии со своими потребностями.
  • Менеджер учетных данных — автоматическая интеграция с Менеджером учетных данных для быстрой авторизации на разных устройствах.
  • Многофакторная аутентификация — поддержка SMS и TOTP для дополнительной безопасности.

Прежде чем начать

  1. Если вы еще этого не сделали, добавьте Firebase в свой Android-проект .
  2. В консоли Firebase включите необходимые для вас способы авторизации.
  3. Добавьте 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))