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

Autentica con Firebase in modo anonimo su Android

Puoi utilizzare Firebase Authentication per creare e utilizzare account anonimi temporanei per l'autenticazione con Firebase. Questi account anonimi temporanei possono essere utilizzati per consentire agli utenti che non si sono ancora registrati alla tua app di lavorare con i dati protetti dalle regole di sicurezza. Se un utente anonimo decide di registrarsi alla tua app, puoi collegare le sue credenziali di accesso all'account anonimo in modo che possa continuare a lavorare con i suoi dati protetti nelle sessioni future.

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 la dipendenza per la libreria Android di Firebase Authentication al file Gradle del modulo (a livello di app) (di solito app/build.gradle ):
    implementation 'com.google.firebase:firebase-auth:19.4.0'
  4. Se non hai ancora collegato la tua app al tuo progetto Firebase, fallo dalla console Firebase .
  5. Abilita autenticazione anonima:
    1. Nella console Firebase , apri la sezione Auth .
    2. Nella pagina Metodi di accesso , abilitare il metodo di accesso anonimo .

Autentica con Firebase in modo anonimo

Quando un utente disconnesso utilizza una funzione dell'app che richiede l'autenticazione con Firebase, accedi l'utente in modo anonimo completando i seguenti passaggi:

  1. Nel metodo onCreate della tua attività, ottieni l'istanza condivisa dell'oggetto FirebaseAuth :

    Giava

    private FirebaseAuth mAuth;
    // ...
    // Initialize Firebase Auth
    mAuth = FirebaseAuth.getInstance();

    Kotlin + KTX

    private lateinit var auth: FirebaseAuth
    // ...
    // Initialize Firebase Auth
    auth = Firebase.auth
  2. Durante l'inizializzazione della tua attività, controlla se l'utente è attualmente connesso:

    Giava

    @Override
    public void onStart() {
        super.onStart();
        // Check if user is signed in (non-null) and update UI accordingly.
        FirebaseUser currentUser = mAuth.getCurrentUser();
        updateUI(currentUser);
    }

    Kotlin + KTX

    public override fun onStart() {
        super.onStart()
        // Check if user is signed in (non-null) and update UI accordingly.
        val currentUser = auth.currentUser
        updateUI(currentUser)
    }
  3. Infine, chiama signInAnonymously per accedere come utente anonimo:

    Giava

    mAuth.signInAnonymously()
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                        // Sign in success, update UI with the signed-in user's information
                        Log.d(TAG, "signInAnonymously:success");
                        FirebaseUser user = mAuth.getCurrentUser();
                        updateUI(user);
                    } else {
                        // If sign in fails, display a message to the user.
                        Log.w(TAG, "signInAnonymously:failure", task.getException());
                        Toast.makeText(AnonymousAuthActivity.this, "Authentication failed.",
                                Toast.LENGTH_SHORT).show();
                        updateUI(null);
                    }
    
                    // ...
                }
            });

    Kotlin + KTX

    auth.signInAnonymously()
            .addOnCompleteListener(this) { task ->
                if (task.isSuccessful) {
                    // Sign in success, update UI with the signed-in user's information
                    Log.d(TAG, "signInAnonymously:success")
                    val user = auth.currentUser
                    updateUI(user)
                } else {
                    // If sign in fails, display a message to the user.
                    Log.w(TAG, "signInAnonymously:failure", task.exception)
                    Toast.makeText(baseContext, "Authentication failed.",
                            Toast.LENGTH_SHORT).show()
                    updateUI(null)
                }
    
                // ...
            }
    Se l'accesso riesce, puoi utilizzare il metodo getCurrentUser per ottenere i dati dell'account dell'utente.

Converti un account anonimo in un account permanente

Quando un utente anonimo si iscrive alla tua app, potresti voler consentire loro di continuare a lavorare con il suo nuovo account, ad esempio potresti voler rendere gli articoli che l'utente ha aggiunto al carrello prima di registrarsi disponibili nel suo nuovo carrello degli acquisti dell'account. A tale scopo, completare i seguenti passaggi:

  1. Quando l'utente si registra, completa il flusso di accesso per il provider di autenticazione dell'utente fino a, ma non incluso, chiamando uno dei metodi FirebaseAuth.signInWith . Ad esempio, ottieni il token dell'ID Google dell'utente, il token di accesso a Facebook o l'indirizzo e-mail e la password.
  2. Ottieni un AuthCredential per il nuovo provider di autenticazione:

    Accesso a Google

    Giava

    AuthCredential credential = GoogleAuthProvider.getCredential(googleIdToken, null);

    Kotlin + KTX

    val credential = GoogleAuthProvider.getCredential(googleIdToken, null)
    Accesso a Facebook

    Giava

    AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken());

    Kotlin + KTX

    val credential = FacebookAuthProvider.getCredential(token.token)
    Accesso tramite e-mail con password

    Giava

    AuthCredential credential = EmailAuthProvider.getCredential(email, password);

    Kotlin + KTX

    val credential = EmailAuthProvider.getCredential(email, password)
  3. Passare l'oggetto AuthCredential al metodo linkWithCredential dell'utente di linkWithCredential :

    Giava

    mAuth.getCurrentUser().linkWithCredential(credential)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                        Log.d(TAG, "linkWithCredential:success");
                        FirebaseUser user = task.getResult().getUser();
                        updateUI(user);
                    } else {
                        Log.w(TAG, "linkWithCredential:failure", task.getException());
                        Toast.makeText(AnonymousAuthActivity.this, "Authentication failed.",
                                Toast.LENGTH_SHORT).show();
                        updateUI(null);
                    }
    
                    // ...
                }
            });

    Kotlin + KTX

    auth.currentUser!!.linkWithCredential(credential)
            .addOnCompleteListener(this) { task ->
                if (task.isSuccessful) {
                    Log.d(TAG, "linkWithCredential:success")
                    val user = task.result?.user
                    updateUI(user)
                } else {
                    Log.w(TAG, "linkWithCredential:failure", task.exception)
                    Toast.makeText(baseContext, "Authentication failed.",
                            Toast.LENGTH_SHORT).show()
                    updateUI(null)
                }
    
                // ...
            }

Se la chiamata a linkWithCredential riesce, il nuovo account dell'utente può accedere ai dati Firebase dell'account anonimo.

Prossimi passi

Ora che gli utenti possono autenticarsi con Firebase, puoi controllare il loro accesso ai dati nel tuo database Firebase utilizzando le regole Firebase .