FirebaseUI è una libreria basata su Firebase Authentication SDK che fornisce flussi di interfaccia utente drop-in da utilizzare nella tua app. FirebaseUI offre i seguenti vantaggi:
- Più provider : flussi di accesso per e-mail/password, collegamento e-mail, autenticazione telefonica, accesso a Google, accesso a Facebook, accesso a Twitter e accesso a GitHub.
- Gestione dell'account : flussi per gestire le attività di gestione dell'account, come la creazione dell'account e la reimpostazione della password.
- Collegamento account : flussi per collegare in modo sicuro gli account utente tra provider di identità.
- Aggiornamento utente anonimo : flussi per aggiornare in modo sicuro gli utenti anonimi.
- Temi personalizzati : personalizza l'aspetto di FirebaseUI in modo che corrisponda alla tua app. Inoltre, poiché FirebaseUI è open source, puoi eseguire il fork del progetto e personalizzarlo esattamente in base alle tue esigenze.
- Smart Lock for Passwords : integrazione automatica con Smart Lock for Passwords per un rapido accesso tra dispositivi.
Prima di iniziare
Se non l'hai già fatto, aggiungi Firebase al tuo progetto Android .
Aggiungi le dipendenze per FirebaseUI al tuo file
build.gradle
a livello di app. Se desideri supportare l'accesso con Facebook o Twitter, includi anche gli SDK di Facebook e Twitter:dependencies { // ... implementation 'com.firebaseui:firebase-ui-auth:7.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:8.x' }
L'SDK FirebaseUI Auth ha dipendenze transitive dall'SDK Firebase e dall'SDK Google Play Services.
Nella console Firebase , apri la sezione Autenticazione e abilita i metodi di accesso che desideri supportare. Alcuni metodi di accesso richiedono informazioni aggiuntive, generalmente disponibili nella console per sviluppatori del servizio.
Se hai abilitato l'accesso con Google:
Quando richiesto nella console, scarica il file di configurazione Firebase aggiornato (
google-services.json
), che ora contiene le informazioni del client OAuth necessarie per l'accesso a Google.Sposta questo file di configurazione aggiornato nel tuo progetto Android Studio, sostituendo il file di configurazione corrispondente ormai obsoleto. (Vedi Aggiungi Firebase al tuo progetto Android .)
Se non hai ancora specificato l'impronta digitale SHA della tua app, fallo dalla pagina Impostazioni della console Firebase. Consulta Autenticazione del client per i dettagli su come ottenere l'impronta SHA dell'app.
Se supporti l'accesso con Facebook o Twitter, aggiungi risorse stringa a
strings.xml
che specifichino le informazioni di identificazione richieste da ciascun provider:<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> </resources>
Registrazione
Crea un ActivityResultLauncher
che registra una richiamata per il contratto dei risultati dell'attività FirebaseUI:
Kotlin+KTX
// See: https://developer.android.com/training/basics/intents/result private val signInLauncher = registerForActivityResult( FirebaseAuthUIActivityResultContract(), ) { res -> this.onSignInResult(res) }
Java
// See: https://developer.android.com/training/basics/intents/result private final ActivityResultLauncher<Intent> signInLauncher = registerForActivityResult( new FirebaseAuthUIActivityResultContract(), new ActivityResultCallback<FirebaseAuthUIAuthenticationResult>() { @Override public void onActivityResult(FirebaseAuthUIAuthenticationResult result) { onSignInResult(result); } } );
Per avviare il flusso di accesso FirebaseUI, crea un intento di accesso con i tuoi metodi di accesso preferiti:
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 val signInIntent = AuthUI.getInstance() .createSignInIntentBuilder() .setAvailableProviders(providers) .build() signInLauncher.launch(signInIntent)
Java
// 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 Intent signInIntent = AuthUI.getInstance() .createSignInIntentBuilder() .setAvailableProviders(providers) .build(); signInLauncher.launch(signInIntent);
Al termine del flusso di accesso, riceverai il risultato in onSignInResult
:
Kotlin+KTX
private fun onSignInResult(result: FirebaseAuthUIAuthenticationResult) { val response = result.idpResponse if (result.resultCode == 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. // ... } }
Java
private void onSignInResult(FirebaseAuthUIAuthenticationResult result) { IdpResponse response = result.getIdpResponse(); if (result.getResultCode() == 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. // ... } }
Imposta i metodi di accesso
Autenticazione del collegamento e-mail
Nella console Firebase , apri la sezione Autenticazione . Nella scheda Metodo di accesso abilitare il provider di posta elettronica/password . Tieni presente che l'accesso tramite e-mail/password deve essere abilitato per utilizzare l'accesso tramite collegamento e-mail.
Nella stessa sezione, abilita il metodo di accesso tramite collegamento e-mail (accesso senza password) e fai clic su Salva .
Dovrai anche abilitare Firebase Dynamic Links per utilizzare l'accesso tramite collegamento e-mail. Nella console Firebase , fai clic su Dynamic Links in Engage nella barra di navigazione. Fai clic su Per iniziare e aggiungi un dominio. Il dominio che scegli qui si rifletterà nei collegamenti e-mail inviati ai tuoi utenti.
Puoi abilitare l'accesso tramite collegamento e-mail in FirebaseUI chiamando
enableEmailLinkSignIn
su un'istanzaEmailBuilder
. Dovrai anche fornire un oggettoActionCodeSettings
valido consetHandleCodeInApp
impostato su true. Inoltre, devi inserire nella whitelist l'URL passato asetUrl
, operazione che può essere eseguita nella console Firebase , in Autenticazione -> Metodi di accesso -> Domini autorizzati.Kotlin+KTX
val 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() val providers = listOf( EmailBuilder() .enableEmailLinkSignIn() .setActionCodeSettings(actionCodeSettings) .build(), ) val signInIntent = AuthUI.getInstance() .createSignInIntentBuilder() .setAvailableProviders(providers) .build() signInLauncher.launch(signInIntent)
Java
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(); List<AuthUI.IdpConfig> providers = Arrays.asList( new AuthUI.IdpConfig.EmailBuilder() .enableEmailLinkSignIn() .setActionCodeSettings(actionCodeSettings) .build() ); Intent signInIntent = AuthUI.getInstance() .createSignInIntentBuilder() .setAvailableProviders(providers) .build(); signInLauncher.launch(signInIntent);
Se desideri catturare il collegamento in un'attività specifica, segui i passaggi descritti qui . In caso contrario, il collegamento reindirizzerà alla tua attività di avvio.
Una volta individuato il collegamento diretto, dovrai chiamare per verificare che possiamo gestirlo per te. Se possibile, devi passarcelo tramite
setEmailLink
.Kotlin+KTX
if (AuthUI.canHandleIntent(intent)) { val extras = intent.extras ?: return val link = extras.getString("email_link_sign_in") if (link != null) { val signInIntent = AuthUI.getInstance() .createSignInIntentBuilder() .setEmailLink(link) .setAvailableProviders(providers) .build() signInLauncher.launch(signInIntent) } }
Java
if (AuthUI.canHandleIntent(getIntent())) { if (getIntent().getExtras() == null) { return; } String link = getIntent().getExtras().getString("email_link_sign_in"); if (link != null) { Intent signInIntent = AuthUI.getInstance() .createSignInIntentBuilder() .setEmailLink(link) .setAvailableProviders(providers) .build(); signInLauncher.launch(signInIntent); } }
È supportato l'accesso al collegamento e-mail cross-device opzionale , il che significa che il collegamento inviato tramite l'app Android può essere utilizzato per accedere al Web o alle app Apple. Per impostazione predefinita, il supporto cross-device è abilitato. Puoi disabilitarlo chiamando
setForceSameDevice
sull'istanzaEmailBuilder
.Vedi FirebaseUI-Web e FirebaseUI-iOS per ulteriori informazioni.
Disconnessione
FirebaseUI fornisce metodi pratici per disconnettersi da Firebase Authentication e da tutti i provider di identità social:
Kotlin+KTX
AuthUI.getInstance() .signOut(this) .addOnCompleteListener { // ... }
Java
AuthUI.getInstance() .signOut(this) .addOnCompleteListener(new OnCompleteListener<Void>() { public void onComplete(@NonNull Task<Void> task) { // ... } });
Puoi anche eliminare completamente l'account dell'utente:
Kotlin+KTX
AuthUI.getInstance() .delete(this) .addOnCompleteListener { // ... }
Java
AuthUI.getInstance() .delete(this) .addOnCompleteListener(new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { // ... } });
Personalizzazione
Per impostazione predefinita, FirebaseUI utilizza AppCompat per i temi, il che significa che adotterà naturalmente la combinazione di colori della tua app. Se hai bisogno di ulteriore personalizzazione, puoi passare un tema e un logo al generatore Intent
accesso:
Kotlin+KTX
val signInIntent = AuthUI.getInstance() .createSignInIntentBuilder() .setAvailableProviders(providers) .setLogo(R.drawable.my_great_logo) // Set logo drawable .setTheme(R.style.MySuperAppTheme) // Set theme .build() signInLauncher.launch(signInIntent)
Java
Intent signInIntent = AuthUI.getInstance() .createSignInIntentBuilder() .setAvailableProviders(providers) .setLogo(R.drawable.my_great_logo) // Set logo drawable .setTheme(R.style.MySuperAppTheme) // Set theme .build(); signInLauncher.launch(signInIntent);
Puoi anche impostare un'informativa sulla privacy e termini di servizio personalizzati:
Kotlin+KTX
val signInIntent = AuthUI.getInstance() .createSignInIntentBuilder() .setAvailableProviders(providers) .setTosAndPrivacyPolicyUrls( "https://example.com/terms.html", "https://example.com/privacy.html", ) .build() signInLauncher.launch(signInIntent)
Java
Intent signInIntent = AuthUI.getInstance() .createSignInIntentBuilder() .setAvailableProviders(providers) .setTosAndPrivacyPolicyUrls( "https://example.com/terms.html", "https://example.com/privacy.html") .build(); signInLauncher.launch(signInIntent);
Prossimi passi
- Per ulteriori informazioni sull'utilizzo e la personalizzazione di FirebaseUI, consulta il file README su GitHub.
- Se trovi un problema in FirebaseUI e desideri segnalarlo, utilizza GitHub issue tracker .