FirebaseUI是在Firebase身份驗證SDK之上構建的庫,可提供可在您的應用程序中使用的嵌入式UI流程。 FirebaseUI具有以下優點:
- 多個提供商-電子郵件/密碼,電子郵件鏈接,電話身份驗證,Google登錄,Facebook登錄,Twitter登錄和GitHub登錄的登錄流程。
- 帳戶管理-處理帳戶管理任務的流程,例如帳戶創建和密碼重置。
- 帳戶鏈接-用於跨身份提供者安全鏈接用戶帳戶的流程。
- 匿名用戶升級-用於安全升級匿名用戶的流程。
- 自定義主題-自定義FirebaseUI的外觀以匹配您的應用程序。此外,由於FirebaseUI是開源的,因此您可以派生項目並完全根據需要自定義它。
- Smart Lock for Passwords-與Smart Lock for Passwords自動集成,以實現跨設備快速登錄。
在你開始之前
將FirebaseUI的依賴項添加到您的應用程序級別的
build.gradle
文件中。如果您想支持使用Facebook或Twitter登錄,還包括Facebook和Twitter SDK:dependencies { // ... implementation 'com.firebaseui:firebase-ui-auth:6.4.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具有可傳遞的依賴關係。
在Firebase控制台中,打開“身份驗證”部分,然後啟用要支持的登錄方法。某些登錄方法需要其他信息,這些信息通常可以在該服務的開發者控制台中獲得。
如果您支持Google登錄,但尚未指定應用的SHA-1指紋,請從Firebase控制台的“設置”頁面進行。有關如何獲取應用程序的SHA-1指紋的詳細信息,請參見身份驗證客戶端。
如果您支持使用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);
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. // ... } } }
設置登錄方法
電子郵件鏈接認證
在Firebase控制台中,打開“身份驗證”部分。在“登錄方法”選項卡上,啟用“電子郵件/密碼”提供程序。請注意,必須啟用電子郵件/密碼登錄才能使用電子郵件鏈接登錄。
在同一部分中,啟用“電子郵件鏈接(無密碼登錄)”登錄方法,然後單擊“保存” 。
您還必須啟用Firebase動態鏈接以使用電子郵件鏈接登錄。在Firebase控制台中,單擊導航欄中“參與”下的“動態鏈接”。單擊入門並添加域。您在此處選擇的域將反映在發送給您的用戶的電子郵件鏈接中。
您可以通過在
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);
如果您想捕獲特定活動中的鏈接,請按照此處概述的步驟進行操作。否則,該鏈接將重定向到您的啟動器活動。
抓住深層鏈接後,您需要致電驗證我們是否可以為您處理。如果可以的話,您需要通過
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); } }
支持可選的跨設備電子郵件鏈接登錄,這意味著通過Android應用發送的鏈接可用於登錄Web或iOS應用。默認情況下,跨設備支持處於啟用狀態。您可以通過在
EmailBuilder
實例上調用setForceSameDevice
來禁用它。有關更多信息,請參見FirebaseUI-Web和FirebaseUI-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問題跟踪器。