Aggiungi facilmente l'accesso alla tua app per Android con FirebaseUI

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

  1. Se non l'hai già fatto, aggiungi Firebase al tuo progetto Android.
  2. Nella console Firebase, attiva i metodi di accesso che vuoi supportare.
  3. 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 google-services.json. 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())
    }
}

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.DefaultDark o AuthUITheme.Adaptive.
  • Eredita il tema dell'app con AuthUITheme.fromMaterialTheme().
  • Personalizza il tema predefinito con .copy().
  • Crea un AuthUITheme completamente 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))