FirebaseUI Auth 是以 Firebase 驗證 SDK 為基礎建構的程式庫,提供可直接使用的 UI 流程,方便您在應用程式中使用。
建議的登入流程會使用 Compose 畫面。如要瞭解仍使用 Activity 的應用程式,請參閱「現有以 Activity 為基礎的應用程式」一節。
FirebaseUI Auth 具有下列優點:
- 多個供應商:電子郵件/密碼、電話、Google、Facebook、Apple、GitHub、Microsoft、Yahoo、Twitter、匿名驗證和自訂 OAuth 的登入流程。
- 帳戶管理:處理帳戶管理工作的流程,例如建立帳戶和重設密碼。
- 帳戶連結:安全地連結不同身分識別供應商的使用者帳戶。
- 匿名使用者升級:安全升級匿名使用者的流程。
- 自訂主題:支援 Material 3 UI,可沿用應用程式主題。此外,由於 FirebaseUI 是開放原始碼,您可以將專案分支化,並根據需求自訂。
- Credential Manager:自動整合Credential Manager,方便使用者快速跨裝置登入。
- 多重驗證:支援簡訊和 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-services Gradle 外掛程式會自動提供 Google 登入設定。確認您已在 Firebase 控制台中啟用 Google 登入。
Facebook 登入
如果使用 Facebook 登入,請將 Facebook 應用程式 ID 新增至 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 驗證說明文件。
選擇要加入 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,
)
},
)
)
}
}
如要瞭解完整的深層連結處理流程,請參閱 GitHub 中 README 的「Email Link Sign-In」一節。
登入
建立 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 登入。
- 重設密碼。
- Material 3 樣式。
- 支援 Credential Manager。
- 透過直接回呼處理錯誤。
登出
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中設定標誌、《服務條款》網址和《隱私權政策》網址。
如需完整的主題和自訂詳細資料,包括主題優先順序、供應商按鈕樣式和自訂主題,請參閱 GitHub 中 README 的「主題和自訂」一節。
現有以活動為依據的應用程式
如果應用程式仍使用 Activity 和 Activity Result API,您可以透過 AuthFlowController 保留以 Activity 為基礎的啟動流程:
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))