FirebaseUI è una libreria creata in aggiunta all'SDK Firebase Authentication che fornisce flussi di interfaccia utente drop-in da utilizzare all'interno dell'app. FirebaseUI offre i seguenti vantaggi:
- Più fornitori - flussi di accesso per email/password, link email, telefono l'autenticazione, l'accesso con Google, l'accesso a Facebook, l'accesso a Twitter e l'accesso a GitHub.
- Gestione dell'account: flussi per gestire le attività di gestione dell'account, ad esempio creazione di account e reimpostazione delle password.
- Collegamento dell'account: flussi per collegare in sicurezza gli account utente tra i diversi account. di Google Cloud.
- Upgrade per utenti anonimi: flusso per eseguire in sicurezza l'upgrade degli utenti anonimi.
- Temi personalizzati: personalizza l'aspetto di FirebaseUI in base alla tua app. Inoltre, Poiché FirebaseUI è open source, puoi creare un fork del progetto e personalizzarlo in base alle tue esigenze.
- Smart Lock per password: integrazione automatica con Smart Lock per password per un accesso rapido su più dispositivi.
Prima di iniziare
Se non l'hai già fatto, aggiungi Firebase al tuo progetto Android.
Aggiungi le dipendenze per FirebaseUI al file
build.gradle
a livello di app. Se vuoi supportare l'accesso con Facebook o Twitter, includi anche il SDK 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 presenta dipendenze trasitive dall'SDK Firebase e dall'SDK Google Play Services.
Nella console Firebase, apri la sezione Autenticazione e attiva i metodi di accesso che vuoi supportare. Alcuni metodi di accesso richiedono informazioni aggiuntive, solitamente disponibili nello sviluppatore del servizio Google Cloud.
Se hai attivato Accedi con Google:
Quando richiesto nella console, scarica il file di configurazione di Firebase aggiornato (
google-services.json
), che ora contiene le informazioni sul client OAuth richiesta per Accedi con Google.Sposta questo file di configurazione aggiornato nel tuo progetto Android Studio, sostituendo il file di configurazione corrispondente, ora obsoleto. (consulta Aggiungere Firebase al progetto Android).
Se non hai ancora specificato l'impronta digitale SHA dell'app, puoi farlo dalla Pagina Impostazioni della console Firebase. Consulta Autenticazione del client. per maggiori dettagli su come ottenere l'impronta SHA della tua app.
Se supporti l'accesso con Facebook o Twitter, aggiungi risorse di stringa a
strings.xml
che specificano le informazioni identificative richieste da ogni fornitore:<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>
Accedi
Crea un ActivityResultLauncher
che registra un callback per FirebaseUI
Contratto relativo al risultato dell'attività:
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 intent di accesso con il tuo 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
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. // ... } }
Configura i metodi di accesso
Autenticazione link email
Nella console Firebase, apri la sezione Autenticazione. Il giorno Nella scheda Metodo di accesso, attiva il provider Email/Password. Nota l'accesso con email/password deve essere abilitato per utilizzare l'accesso tramite link e-mail.
Nella stessa sezione, attiva il metodo di accesso Link via email (accesso senza password) e fai clic su Salva.
Dovrai inoltre abilitare Firebase Dynamic Links per utilizzare l'accesso tramite link email. Nella Nella console di Firebase, fai clic su Link dinamici in Coinvolgi nella barra di navigazione. Fai clic su Inizia e aggiungi un dominio. Il dominio che scegli qui verrà indicato nell'email i link inviati ai tuoi utenti.
Puoi attivare l'accesso tramite link email in FirebaseUI chiamando
enableEmailLinkSignIn
su un'istanzaEmailBuilder
. Dovrai anche fornire un oggettoActionCodeSettings
valido consetHandleCodeInApp
impostato su true. Inoltre, devi inserire nella lista consentita l'URL che passi asetUrl
. Puoi farlo 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 vuoi individuare il link in un'attività specifica, segui i passaggi indicati qui In caso contrario, il link reindirizzerà all'attività del tuo programma di avvio.
Una volta individuato il link diretto, dovrai chiamare il numero di verifica per consentirci di gestirlo. Se puoi, devi trasmettercelo 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); } }
Facoltativo L'accesso cross-device via email è supportato, il che significa che il link inviato tramite la tua app per Android può essere utilizzata per accedere al tuo sito web o alle app Apple. Per impostazione predefinita, il supporto cross-device sia abilitato. Puoi disabilitarlo chiamando
setForceSameDevice
sull'istanzaEmailBuilder
.Consulta FirebaseUI-Web e FirebaseUI-iOS per ulteriori informazioni.
Esci
FirebaseUI fornisce metodi pratici per uscire da Firebase Authentication così come 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
adottare la combinazione di colori dell'app. Se hai bisogno di ulteriore personalizzazione,
Passa un tema e un logo allo strumento per la creazione di Intent
per l'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 norme 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);
Passaggi successivi
- Per ulteriori informazioni sull'utilizzo e sulla personalizzazione di FirebaseUI, consulta README su GitHub.
- Se rilevi un problema in FirebaseUI e vuoi segnalarlo, utilizza la Tracker dei problemi GitHub.