Questa pagina è stata tradotta dall'API Cloud Translation.
Switch to English

Aggiungi facilmente l'accesso alla tua app Android con FirebaseUI

FirebaseUI è una libreria basata su Firebase Authentication SDK che fornisce flussi di interfaccia utente da utilizzare nella tua app. FirebaseUI offre i seguenti vantaggi:

  • Più provider : flussi di accesso per e-mail / password, collegamento e-mail, autenticazione del telefono, accesso a Google, accesso a Facebook, accesso a Twitter e accesso a GitHub.
  • Gestione account : flussi per gestire le attività di gestione dell'account, come la creazione di account e la reimpostazione della password.
  • Collegamento account : flussi per collegare in modo sicuro gli account utente tra i provider di identità.
  • Aggiornamento utenti anonimi : flussi per aggiornare in sicurezza gli utenti anonimi.
  • Temi personalizzati: personalizza l'aspetto di FirebaseUI per adattarlo alla tua app. Inoltre, poiché FirebaseUI è open source, puoi eseguire il fork del progetto e personalizzarlo esattamente in base alle tue esigenze.
  • Smart Lock per password : integrazione automatica con Smart Lock per password per un accesso rapido tra dispositivi.

Prima di iniziare

  1. Se non l'hai già fatto, aggiungi Firebase al tuo progetto Android .

  2. Nel tuo file build.gradle livello di build.gradle , assicurati di includere il repository Maven di Google in entrambe le sezioni buildscript e allprojects .

  3. Aggiungi le dipendenze per FirebaseUI al file build.gradle livello di build.gradle . Se desideri supportare l'accesso con Facebook o Twitter, includi anche gli SDK di Facebook e Twitter:

    dependencies {
        // ...
    
        implementation 'com.firebaseui:firebase-ui-auth:6.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:4.x'
    
        // Required only if Twitter login support is required
        // Find the latest Twitter SDK releases here: https://goo.gl/E5wZvQ
        implementation 'com.twitter.sdk.android:twitter-core:3.x'
    }
    

    L'SDK di autenticazione FirebaseUI ha dipendenze transitive dall'SDK di Firebase e dall'SDK dei servizi di Google Play.

  4. 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.

  5. Se supporti l'accesso con Google e non hai ancora specificato l'impronta digitale SHA-1 della tua app, fallo dalla pagina Impostazioni della console Firebase. Vedere Autenticazione del client per i dettagli su come ottenere l'impronta digitale SHA-1 della propria app.

  6. Se supporti l'accesso con Facebook o Twitter, aggiungi risorse stringa a strings.xml che specificano 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>
      <!-- Twitter consumer key and secret -->
      <string name="twitter_consumer_key" translatable="false">YOUR_CONSUMER_KEY</string>
      <string name="twitter_consumer_secret" translatable="false">YOUR_CONSUMER_SECRET</string>
    </resources>
    

registrati

Per avviare il flusso di accesso FirebaseUI, crea un intento di accesso con i tuoi metodi di accesso preferiti:

Giava

// 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
startActivityForResult(
        AuthUI.getInstance()
                .createSignInIntentBuilder()
                .setAvailableProviders(providers)
                .build(),
        RC_SIGN_IN);

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
startActivityForResult(
        AuthUI.getInstance()
                .createSignInIntentBuilder()
                .setAvailableProviders(providers)
                .build(),
        RC_SIGN_IN)

Quando il flusso di accesso è completo, riceverai il risultato in onActivityResult :

Giava

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == RC_SIGN_IN) {
        IdpResponse response = IdpResponse.fromResultIntent(data);

        if (resultCode == 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.
            // ...
        }
    }
}

Kotlin + KTX

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)

    if (requestCode == RC_SIGN_IN) {
        val response = IdpResponse.fromResultIntent(data)

        if (resultCode == Activity.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.
            // ...
        }
    }
}

Configura metodi di accesso

  1. Nella console Firebase , apri la sezione Autenticazione . Nella scheda Metodo di accesso , abilita 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.

  2. Nella stessa sezione, abilita il metodo di accesso al collegamento e-mail (accesso senza password) e fai clic su Salva .

  3. Dovrai anche abilitare Firebase Dynamic Links per utilizzare l'accesso tramite link email. Nella console Firebase , fai clic su Dynamic Links sotto Grow nella barra di navigazione. Fare clic su Per iniziare e aggiungere un dominio. Il dominio che scegli qui si rifletterà nei link email inviati ai tuoi utenti.

  4. Puoi abilitare l'accesso tramite link email in FirebaseUI chiamando enableEmailLinkSignIn su un'istanza di EmailBuilder . Sarà inoltre necessario fornire un oggetto ActionCodeSettings valido con setHandleCodeInApp impostato su true. Inoltre, è necessario inserire nella whitelist l'URL passato a setUrl , operazione che può essere eseguita nella console Firebase , in Autenticazione -> Metodi di accesso -> Domini autorizzati.

    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();
    
    startActivityForResult(
            AuthUI.getInstance()
                    .createSignInIntentBuilder()
                    .setAvailableProviders(Arrays.asList(
                            new AuthUI.IdpConfig.EmailBuilder().enableEmailLinkSignIn()
                            .setActionCodeSettings(actionCodeSettings).build())
                    .build(),
            RC_SIGN_IN);
    
    
  5. 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.

  6. Una volta individuato il link diretto, dovrai chiamare per verificare che possiamo gestirlo per te. Se possiamo, devi setEmailLink tramite setEmailLink .

    if (AuthUI.canHandleIntent(getIntent())) {
        if (getIntent().getExtras() == null) {
                return;
            }
            String link = getIntent().getExtras().getString(ExtraConstants.EMAIL_LINK_SIGN_IN);
            if (link != null) {
                startActivityForResult(
                        AuthUI.getInstance()
                                .createSignInIntentBuilder()
                                .setEmailLink(link)
                                .setAvailableProviders(getAvailableProviders())
                                .build(),
                        RC_SIGN_IN);
            }
    }
    
  7. È supportato l'accesso tramite collegamento e-mail tra dispositivi opzionale , il che significa che il collegamento inviato tramite l'app Android può essere utilizzato per accedere alle app Web o iOS. Per impostazione predefinita, il supporto cross-device è abilitato. Puoi disabilitarlo chiamando setForceSameDevice EmailBuilder .

    Vedi FirebaseUI-Web e FirebaseUI-iOS per ulteriori informazioni.

Disconnessione

FirebaseUI fornisce metodi convenienti per disconnettersi da Firebase Authentication e da tutti i provider di identità social:

Giava

AuthUI.getInstance()
        .signOut(this)
        .addOnCompleteListener(new OnCompleteListener<Void>() {
            public void onComplete(@NonNull Task<Void> task) {
                // ...
            }
        });

Kotlin + KTX

AuthUI.getInstance()
        .signOut(this)
        .addOnCompleteListener {
            // ...
        }

Puoi anche eliminare completamente l'account dell'utente:

Giava

AuthUI.getInstance()
        .delete(this)
        .addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                // ...
            }
        });

Kotlin + KTX

AuthUI.getInstance()
        .delete(this)
        .addOnCompleteListener {
            // ...
        }

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 un'ulteriore personalizzazione, puoi passare un tema e un logo al generatore di Intent :

Giava

startActivityForResult(
        AuthUI.getInstance()
                .createSignInIntentBuilder()
                .setAvailableProviders(providers)
                .setLogo(R.drawable.my_great_logo)      // Set logo drawable
                .setTheme(R.style.MySuperAppTheme)      // Set theme
                .build(),
        RC_SIGN_IN);

Kotlin + KTX

startActivityForResult(
        AuthUI.getInstance()
                .createSignInIntentBuilder()
                .setAvailableProviders(providers)
                .setLogo(R.drawable.my_great_logo) // Set logo drawable
                .setTheme(R.style.MySuperAppTheme) // Set theme
                .build(),
        RC_SIGN_IN)

Puoi anche impostare una politica sulla privacy e termini di servizio personalizzati:

Giava

startActivityForResult(
        AuthUI.getInstance()
                .createSignInIntentBuilder()
                .setAvailableProviders(providers)
                .setTosAndPrivacyPolicyUrls(
                        "https://example.com/terms.html",
                        "https://example.com/privacy.html")
                .build(),
        RC_SIGN_IN);

Kotlin + KTX

startActivityForResult(
        AuthUI.getInstance()
                .createSignInIntentBuilder()
                .setAvailableProviders(providers)
                .setTosAndPrivacyPolicyUrls(
                        "https://example.com/terms.html",
                        "https://example.com/privacy.html")
                .build(),
        RC_SIGN_IN)

Prossimi passi

  • Per ulteriori informazioni sull'utilizzo e la personalizzazione di FirebaseUI, vedere il file README su GitHub.
  • Se trovi un problema in FirebaseUI e desideri segnalarlo, utilizza il tracker dei problemi di GitHub .