Google is committed to advancing racial equity for Black communities. See how.
Эта страница была переведа с помощью Cloud Translation API.
Switch to English

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

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

  • Несколько поставщиков - потоки входа для электронной почты / пароля, ссылки электронной почты, аутентификации по телефону, входа в Google, входа в Facebook, входа в Twitter и входа в GitHub.
  • Управление учетной записью - потоки для обработки задач управления учетной записью, таких как создание учетной записи и сброс пароля.
  • Связывание учетных записей - потоки для безопасного связывания учетных записей пользователей между поставщиками удостоверений.
  • Обновление анонимных пользователей - потоки для безопасного обновления анонимных пользователей.
  • Пользовательские темы - настройте внешний вид FirebaseUI в соответствии с вашим приложением. Кроме того, поскольку FirebaseUI имеет открытый исходный код, вы можете выполнить форк проекта и настроить его в точном соответствии со своими потребностями.
  • Smart Lock for Passwords - автоматическая интеграция с Smart Lock for Passwords для быстрого входа на нескольких устройствах.

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

  1. Если вы еще этого не сделали, добавьте Firebase в свой проект Android .

  2. build.gradle , что в build.gradle файле build.gradle уровне проекта build.gradle репозиторий Google Maven как в buildscript и в разделы allprojects .

  3. Добавьте зависимости для FirebaseUI в файл build.gradle уровня build.gradle . Если вы хотите поддерживать вход через Facebook или Twitter, включите также SDK для Facebook и Twitter:

    dependencies {
        // ...
    
        implementation 'com.firebaseui:firebase-ui-auth:6.2.0'
    
        // 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:4.x'
    
        // Required only if Twitter login support is required
        // Find the latest Twitter SDK releases here: https://goo.gl/E5wZvQ
        implementation 'com.twitter.sdk.android:twitter-core:3.x'
    }
    

    SDK FirebaseUI Auth имеет транзитивные зависимости от Firebase SDK и SDK сервисов Google Play.

  4. В консоли Firebase откройте раздел « Аутентификация » и включите методы входа, которые вы хотите поддерживать. Для некоторых методов входа требуется дополнительная информация, обычно доступная в консоли разработчика службы.

  5. Если вы поддерживаете вход через Google и еще не указали отпечаток SHA-1 вашего приложения, сделайте это на странице настроек консоли Firebase. См. Аутентификация вашего клиента для получения подробной информации о том, как получить отпечаток SHA-1 вашего приложения.

  6. Если вы поддерживаете вход через Facebook или Twitter, добавьте строковые ресурсы в strings.xml которые определяют идентификационную информацию, требуемую каждым провайдером:

    
    <resources>
      <!-- Facebook application ID and custom URL scheme (app ID prefixed by 'fb'). -->
      <string name="facebook_application_id" translatable="false">YOUR_APP_ID</string>
      <string name="facebook_login_protocol_scheme" translatable="false">fbYOUR_APP_ID</string>
      <!-- Twitter consumer key and secret -->
      <string name="twitter_consumer_key" translatable="false">YOUR_CONSUMER_KEY</string>
      <string name="twitter_consumer_secret" translatable="false">YOUR_CONSUMER_SECRET</string>
    </resources>
    

войти в систему

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

Ява

// Choose authentication providers
List<AuthUI.IdpConfig> providers = Arrays.asList(
        new AuthUI.IdpConfig.EmailBuilder().build(),
        new AuthUI.IdpConfig.PhoneBuilder().build(),
        new AuthUI.IdpConfig.GoogleBuilder().build(),
        new AuthUI.IdpConfig.FacebookBuilder().build(),
        new AuthUI.IdpConfig.TwitterBuilder().build());

// Create and launch sign-in intent
startActivityForResult(
        AuthUI.getInstance()
                .createSignInIntentBuilder()
                .setAvailableProviders(providers)
                .build(),
        RC_SIGN_IN);

Котлин + KTX

// Choose authentication providers
val providers = arrayListOf(
        AuthUI.IdpConfig.EmailBuilder().build(),
        AuthUI.IdpConfig.PhoneBuilder().build(),
        AuthUI.IdpConfig.GoogleBuilder().build(),
        AuthUI.IdpConfig.FacebookBuilder().build(),
        AuthUI.IdpConfig.TwitterBuilder().build())

// Create and launch sign-in intent
startActivityForResult(
        AuthUI.getInstance()
                .createSignInIntentBuilder()
                .setAvailableProviders(providers)
                .build(),
        RC_SIGN_IN)

Когда процесс входа будет завершен, вы получите результат в onActivityResult :

Ява

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == RC_SIGN_IN) {
        IdpResponse response = IdpResponse.fromResultIntent(data);

        if (resultCode == RESULT_OK) {
            // Successfully signed in
            FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
            // ...
        } else {
            // Sign in failed. If response is null the user canceled the
            // sign-in flow using the back button. Otherwise check
            // response.getError().getErrorCode() and handle the error.
            // ...
        }
    }
}

Котлин + KTX

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)

    if (requestCode == RC_SIGN_IN) {
        val response = IdpResponse.fromResultIntent(data)

        if (resultCode == Activity.RESULT_OK) {
            // Successfully signed in
            val user = FirebaseAuth.getInstance().currentUser
            // ...
        } else {
            // Sign in failed. If response is null the user canceled the
            // sign-in flow using the back button. Otherwise check
            // response.getError().getErrorCode() and handle the error.
            // ...
        }
    }
}

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

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

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

  3. Вам также необходимо включить динамические ссылки Firebase, чтобы использовать вход по электронной почте. В консоли Firebase щелкните динамические ссылки в разделе « Увеличить» на панели навигации. Нажмите « Приступая к работе» и добавьте домен. Выбранный вами домен будет отражен в электронных письмах, отправленных вашим пользователям.

  4. Вы можете включить вход по электронной почте в FirebaseUI, вызвав enableEmailLinkSignIn в экземпляре EmailBuilder . Вам также необходимо предоставить действительный ActionCodeSettings объект с setHandleCodeInApp значение ИСТИНА. Кроме того, вам необходимо внести в белый список URL-адрес, который вы передаете в setUrl , что можно сделать в консоли Firebase в разделе «Проверка подлинности» -> «Методы входа» -> «Авторизованные домены».

    ActionCodeSettings actionCodeSettings = ActionCodeSettings.newBuilder()
            .setAndroidPackageName(/* yourPackageName= */ ..., /* installIfNotAvailable= */ true,
            /* minimumVersion= */ null)
            .setHandleCodeInApp(true) // This must be set to true
            .setUrl("https://google.com") // This URL needs to be whitelisted
            .build();
    
    startActivityForResult(
            AuthUI.getInstance()
                    .createSignInIntentBuilder()
                    .setAvailableProviders(Arrays.asList(
                            new AuthUI.IdpConfig.EmailBuilder().enableEmailLinkSignIn()
                            .setActionCodeSettings(actionCodeSettings).build())
                    .build(),
            RC_SIGN_IN);
    
    
  5. Если вы хотите перехватить ссылку в определенном действии, выполните действия, описанные здесь . В противном случае ссылка будет перенаправлена ​​на вашу активность в программе запуска.

  6. Как только вы поймаете ссылку на контент, вам нужно будет позвонить, чтобы убедиться, что мы можем обработать ее за вас. Если мы можем, вам нужно передать его нам через setEmailLink .

    if (AuthUI.canHandleIntent(getIntent())) {
        if (getIntent().getExtras() == null) {
                return;
            }
            String link = getIntent().getExtras().getString(ExtraConstants.EMAIL_LINK_SIGN_IN);
            if (link != null) {
                startActivityForResult(
                        AuthUI.getInstance()
                                .createSignInIntentBuilder()
                                .setEmailLink(link)
                                .setAvailableProviders(getAvailableProviders())
                                .build(),
                        RC_SIGN_IN);
            }
    }
    
  7. Дополнительное устройство Cross ссылка электронной почты знак в поддерживается, что означает , что ссылка , отправленная через ваш Android приложение может быть использовано для войти на вашем веб или IOS приложений. По умолчанию поддержка нескольких устройств включена. Вы можете отключить его, вызвав setForceSameDevice в экземпляре EmailBuilder .

    См. FirebaseUI-Web и FirebaseUI-iOS для получения дополнительной информации.

Выход

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

Ява

AuthUI.getInstance()
        .signOut(this)
        .addOnCompleteListener(new OnCompleteListener<Void>() {
            public void onComplete(@NonNull Task<Void> task) {
                // ...
            }
        });

Котлин + KTX

AuthUI.getInstance()
        .signOut(this)
        .addOnCompleteListener {
            // ...
        }

Вы также можете полностью удалить учетную запись пользователя:

Ява

AuthUI.getInstance()
        .delete(this)
        .addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                // ...
            }
        });

Котлин + KTX

AuthUI.getInstance()
        .delete(this)
        .addOnCompleteListener {
            // ...
        }

Настройка

По умолчанию FirebaseUI использует AppCompat для создания тем, что означает, что он естественным образом принимает цветовую схему вашего приложения. Если вам требуется дополнительная настройка вы можете передать тему и логотип на знак в Intent строитель:

Ява

startActivityForResult(
        AuthUI.getInstance()
                .createSignInIntentBuilder()
                .setAvailableProviders(providers)
                .setLogo(R.drawable.my_great_logo)      // Set logo drawable
                .setTheme(R.style.MySuperAppTheme)      // Set theme
                .build(),
        RC_SIGN_IN);

Котлин + KTX

startActivityForResult(
        AuthUI.getInstance()
                .createSignInIntentBuilder()
                .setAvailableProviders(providers)
                .setLogo(R.drawable.my_great_logo) // Set logo drawable
                .setTheme(R.style.MySuperAppTheme) // Set theme
                .build(),
        RC_SIGN_IN)

Вы также можете настроить собственную политику конфиденциальности и условия обслуживания:

Ява

startActivityForResult(
        AuthUI.getInstance()
                .createSignInIntentBuilder()
                .setAvailableProviders(providers)
                .setTosAndPrivacyPolicyUrls(
                        "https://example.com/terms.html",
                        "https://example.com/privacy.html")
                .build(),
        RC_SIGN_IN);

Котлин + KTX

startActivityForResult(
        AuthUI.getInstance()
                .createSignInIntentBuilder()
                .setAvailableProviders(providers)
                .setTosAndPrivacyPolicyUrls(
                        "https://example.com/terms.html",
                        "https://example.com/privacy.html")
                .build(),
        RC_SIGN_IN)

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

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