Google致力於提高黑人社區的種族平等。 怎麼看。
本頁面由 Cloud Translation API 翻譯而成。
Switch to English

使用FirebaseUI輕鬆將登錄添加到您的Android應用

FirebaseUI是基於Firebase身份驗證SDK構建的庫,可提供可在您的應用程序中使用的嵌入式UI流程。 FirebaseUI具有以下優點:

  • 多個提供商 -電子郵件/密碼,電子郵件鏈接,電話身份驗證,Google登錄,Facebook登錄,Twitter登錄和GitHub登錄的登錄流程。
  • 帳戶管理 -處理帳戶管理任務的流程,例如帳戶創建和密碼重置。
  • 帳戶鏈接 -用於跨身份提供者安全鏈接用戶帳戶的流程。
  • 匿名用戶升級 -用於安全升級匿名用戶的流程。
  • 自定義主題 -自定義FirebaseUI的外觀以匹配您的應用。另外,由於FirebaseUI是開源的,因此您可以分叉項目並完全根據需要自定義它。
  • Smart Lock for Passwords-Smart Lock for Passwords自動集成, 實現跨設備快速登錄。

在你開始之前

  1. 如果尚未將Firebase添加到您的Android項目中

  2. 在項目級別的build.gradle文件中,確保在buildscriptallprojects部分中都包含Google的Maven存儲庫。

  3. 將FirebaseUI的依賴項添加到您的應用程序級別的build.gradle文件中。如果要支持使用Facebook或Twitter登錄,還包括Facebook和Twitter SDK:

     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'
    }
     

    FirebaseUI Auth SDK對Firebase SDK和Google Play服務SDK具有傳遞依賴。

  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">fb YOUR_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);

Kotlin + 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.
            // ...
        }
    }
}

Kotlin + 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. 您可以通過在EmailBuilder實例上調用enableEmailLinkSignIn在FirebaseUI中啟用電子郵件鏈接登錄。您還需要提供一個有效的ActionCodeSettings對象, setHandleCodeInApp設置為true。此外,您需要將傳遞給setUrl的URL列入白名單,這可以在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. 支持可選的跨設備電子郵件鏈接登錄,這意味著通過您的Android應用發送的鏈接可用於登錄Web或iOS應用。默認情況下,跨設備支持處於啟用狀態。您可以通過在EmailBuilder實例上調用setForceSameDevice來禁用它。

    有關更多信息,請參見FirebaseUI-WebFirebaseUI-iOS

登出

FirebaseUI提供了便捷的方法來註銷Firebase身份驗證以及所有社交身份提供商:

爪哇

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

Kotlin + KTX

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

您也可以完全刪除用戶的帳戶:

爪哇

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

Kotlin + 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);

Kotlin + 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);

Kotlin + KTX

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

下一步

  • 有關使用和自定義FirebaseUI的更多信息,請參閱GitHub上的README文件。
  • 如果您在FirebaseUI中發現問題並想報告,請使用GitHub問題跟踪器