
FirebaseUI Auth è una libreria basata sull'SDK Firebase Authentication che fornisce flussi UI drop-in da utilizzare nella tua app.
Il flusso di accesso consigliato utilizza le schermate di composizione. Per le app che utilizzano ancora le attività, consulta la sezione App esistenti basate sulle attività.
FirebaseUI Auth offre i seguenti vantaggi:
- Più provider: flussi di accesso per email/password, telefono, Google, Facebook, Apple, GitHub, Microsoft, Yahoo, Twitter, autenticazione anonima e OAuth personalizzato.
- Gestione account: flussi per gestire le attività di gestione dell'account, come la creazione dell'account e il ripristino della password.
- Collegamento degli account: flussi per collegare in modo sicuro gli account utente tra i provider di identità.
- Upgrade dell'utente anonimo: flussi per eseguire l'upgrade in modo sicuro degli utenti anonimi.
- Temi personalizzati: supporto della UI Material 3 che può ereditare il tema dell'app. Inoltre, poiché FirebaseUI è open source, puoi creare un fork del progetto e personalizzarlo in base alle tue esigenze.
- Gestore delle credenziali: integrazione automatica con Gestore delle credenziali per un accesso rapido cross-device.
- Autenticazione a più fattori: supporto di SMS e TOTP per una maggiore sicurezza.
Prima di iniziare
- Se non l'hai già fatto, aggiungi Firebase al tuo progetto Android.
- Nella console Firebase, attiva i metodi di accesso che vuoi supportare.
- Aggiungi FirebaseUI Auth al modulo dell'app:
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")
}
Configurare i metodi di accesso
Accedi con Google
La configurazione di Accedi con Google viene fornita automaticamente dal
file di configurazione .
Assicurati di aver attivato Accedi con Google nella
console Firebase.
Accesso a Facebook
Se utilizzi l'accesso con Facebook, aggiungi l'ID app Facebook a 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>
Consulta la documentazione di Facebook for Developers per le istruzioni di configurazione.
Altri provider
I provider Twitter, GitHub, Microsoft, Yahoo e Apple richiedono la configurazione nella console Firebase, ma non una configurazione aggiuntiva specifica per Android. Consulta la documentazione di Firebase Auth per istruzioni specifiche per il fornitore.
Scegli i fornitori che vuoi includere in 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())
}
}
Accesso tramite link via email
L'accesso tramite link via email si trova nella configurazione del provider email:
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,
)
},
)
)
}
}
Per il flusso completo di gestione dei link diretti, consulta la sezione Email Link Sign-In del file README su GitHub.
Accedi
Crea un AuthUIConfiguration, poi mostra 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()
},
)
}
}
}
}
}
In questo modo avrai un flusso di autenticazione completo con:
- Autenticazione password.
- Accedi con Google.
- Reimpostazione password.
- Stile Material 3.
- Supporto di Gestore delle credenziali.
- Gestione degli errori tramite callback diretti.
Esci
FirebaseUI Auth fornisce metodi pratici per la disconnessione e l'eliminazione dell'account:
lifecycleScope.launch {
FirebaseAuthUI.getInstance().signOut(applicationContext)
}
lifecycleScope.launch {
FirebaseAuthUI.getInstance().delete(applicationContext)
}
Personalizzazione
FirebaseUI Auth è personalizzabile e il modo più semplice per iniziare è impostare
un tema direttamente in authUIConfiguration:
val configuration = authUIConfiguration {
context = applicationContext
providers {
provider(AuthProvider.Email())
provider(AuthProvider.Google(scopes = listOf("email"), serverClientId = null))
}
theme = AuthUITheme.Adaptive
}
Inoltre puoi:
- Utilizza
AuthUITheme.Default,AuthUITheme.DefaultDarkoAuthUITheme.Adaptive. - Eredita il tema dell'app con
AuthUITheme.fromMaterialTheme(). - Personalizza il tema predefinito con
.copy(). - Crea un
AuthUIThemecompletamente personalizzato. - Imposta un logo, l'URL dei Termini di servizio e l'URL delle norme sulla privacy in
authUIConfiguration.
Per tutti i dettagli su temi e personalizzazione, inclusi la precedenza dei temi, lo stile dei pulsanti del fornitore e i temi personalizzati, consulta la sezione Temi e personalizzazione del file Readme su GitHub.
App esistenti basate sull'attività
Se la tua app utilizza ancora le attività e l'API Activity Result, puoi mantenere un flusso di avvio basato sulle attività utilizzando 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))