Autenticazione Firebase
Accesso con email e Google
Autenticazione Firebase è una lezione Android Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Android Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Android Academy include 4 lezioni in totale.
Perché usare Firebase Auth?
Firebase Authentication gestisce gli aspetti più complessi dell'accesso degli utenti: archiviazione sicura delle password, aggiornamento dei token, recupero degli account e numerosi provider (email, Google, Apple, telefono e accesso anonimo).
Invece di creare server per il login, chiami alcune API e ottiene un FirebaseUser verificato. In questa lezione implementerà l'accesso con email/password e l'accesso con Google.
Abilitare i metodi di accesso
Prima di scrivere il codice, abiliti i provider desiderati nella console Firebase:
- Acceda a Authentication → Sign-in method.
- Attivi Email/Password.
- Attivi Google (scelga un'email di supporto).
Per l'accesso con Google deve inoltre aggiungere l'impronta SHA-1 dell'app nelle impostazioni del progetto; in caso contrario l'accesso fallirà con un errore dello sviluppatore.
Ottenere l'istanza FirebaseAuth
Il punto di accesso è Firebase.auth. Espone l'utente corrente e i metodi per creare account, effettuare l'accesso e disconnettersi.
auth.currentUser è null quando nessun utente ha effettuato l'accesso: un modo rapido per decidere quale schermata mostrare all'avvio.
import com.google.firebase.Firebase
import com.google.firebase.auth.auth
val auth = Firebase.auth
fun isLoggedIn(): Boolean {
return auth.currentUser != null
}Creare un account
Registri un nuovo utente con createUserWithEmailAndPassword. Restituisce un Task, ma nel codice con coroutine può usare await() (da kotlinx-coroutines-play-services).
In caso di successo, l'utente accede immediatamente.
import com.google.firebase.Firebase
import com.google.firebase.auth.auth
import kotlinx.coroutines.tasks.await
suspend fun register(email: String, password: String): Result<Unit> {
return try {
Firebase.auth
.createUserWithEmailAndPassword(email, password)
.await()
Result.success(Unit)
} catch (e: Exception) {
Result.failure(e)
}
}Accedere con l'email
Per consentire a un utente esistente di accedere si usa signInWithEmailAndPassword. La struttura è analoga a quella della registrazione.
Racchiudendo la chiamata in try/catch può mostrare errori chiari: password errata, utente inesistente o email non valida.
import com.google.firebase.Firebase
import com.google.firebase.auth.auth
import com.google.firebase.auth.FirebaseUser
import kotlinx.coroutines.tasks.await
suspend fun login(email: String, password: String): FirebaseUser? {
val result = Firebase.auth
.signInWithEmailAndPassword(email, password)
.await()
return result.user
}Una schermata di accesso in Compose
Colleghi l'autenticazione a una semplice schermata Compose. Mantenga email e password nello state, chiami le funzioni suspend da un ambito di coroutine e mostri gli errori.
@Composable
fun LoginScreen(onLoggedIn: () -> Unit) {
var email by remember { mutableStateOf("") }
var password by remember { mutableStateOf("") }
var error by remember { mutableStateOf<String?>(null) }
val scope = rememberCoroutineScope()
Column(Modifier.padding(16.dp)) {
TextField(email, { email = it }, label = { Text("Email") })
TextField(password, { password = it }, label = { Text("Password") })
error?.let { Text(it, color = Color.Red) }
Button(onClick = {
scope.launch {
val user = login(email, password)
if (user != null) onLoggedIn() else error = "Login failed"
}
}) { Text("Sign in") }
}
}Leggere l'utente corrente
Un FirebaseUser contiene i dettagli dell'identità: uid (ID univoco stabile), email, displayName e photoUrl.
Usi uid come chiave quando salva i dati dell'utente in Firestore: è garantito che sia univoco e immutabile.
import com.google.firebase.Firebase
import com.google.firebase.auth.auth
fun describeUser() {
val user = Firebase.auth.currentUser ?: return
println("UID: ${user.uid}")
println("Email: ${user.email}")
println("Name: ${user.displayName ?: "(none)"}")
}Osservare lo stato di autenticazione
L'autenticazione può cambiare in qualsiasi momento (accesso, disconnessione, aggiornamento del token). Registri un AuthStateListener per reagire ai cambiamenti invece di interrogarne periodicamente lo stato.
È la soluzione ideale per passare automaticamente dalla schermata di accesso a quella principale e viceversa.
import com.google.firebase.Firebase
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.auth.auth
val listener = FirebaseAuth.AuthStateListener { auth ->
val user = auth.currentUser
if (user == null) {
println("Signed out -> show login")
} else {
println("Signed in as ${user.email}")
}
}
// Attach and detach with lifecycle
Firebase.auth.addAuthStateListener(listener)
// Firebase.auth.removeAuthStateListener(listener)Accesso con Google tramite Credential Manager
Il metodo moderno per accedere con Google consiste nell'usare l'API Credential Manager. Richieda un token ID Google, quindi lo scambi con una credenziale Firebase.
Il passaggio fondamentale consiste nel creare una credenziale GoogleAuthProvider dal token ID restituito e passarla a signInWithCredential.
import com.google.firebase.Firebase
import com.google.firebase.auth.GoogleAuthProvider
import com.google.firebase.auth.auth
import kotlinx.coroutines.tasks.await
suspend fun firebaseSignInWithGoogle(idToken: String) {
// idToken comes from Credential Manager / Google Identity
val credential = GoogleAuthProvider.getCredential(idToken, null)
Firebase.auth.signInWithCredential(credential).await()
}Disconnettersi
La disconnessione richiede una sola chiamata: auth.signOut(). Cancella l'utente locale e attiva il listener dello stato di autenticazione.
Per l'accesso con Google può anche cancellare lo stato di Credential Manager, in modo che la schermata di selezione venga mostrata la volta successiva. Dopo la disconnessione, currentUser diventa null.
import com.google.firebase.Firebase
import com.google.firebase.auth.auth
fun logout() {
Firebase.auth.signOut()
// currentUser is now null; your AuthStateListener fires
}Gestire gli errori di autenticazione
Gli errori di autenticazione generano eccezioni tipizzate che può gestire in base al tipo:
FirebaseAuthInvalidUserException— utente inesistente o disabilitato.FirebaseAuthInvalidCredentialsException— password errata o email non valida.FirebaseAuthUserCollisionException— email già registrata.
Converta questi errori in messaggi comprensibili invece di mostrare stack trace grezzi.
import com.google.firebase.auth.FirebaseAuthInvalidCredentialsException
import com.google.firebase.auth.FirebaseAuthUserCollisionException
fun messageFor(e: Throwable): String = when (e) {
is FirebaseAuthInvalidCredentialsException -> "Wrong email or password"
is FirebaseAuthUserCollisionException -> "That email is already in use"
else -> "Something went wrong, try again"
}Verifica rapida
Desidera passare automaticamente l'utente dalla schermata di accesso a quella principale e viceversa ogni volta che effettua l'accesso o la disconnessione. Qual è l'approccio più pulito?
Riepilogo: autenticazione
Ora può autenticare gli utenti con Firebase:
- Abiliti i provider nella console e aggiunga il proprio SHA-1 per Google.
- Usi
Firebase.authconcreateUserWithEmailAndPassword/signInWithEmailAndPassword. - Per l'accesso con Google: ottenga un token ID, crei una credenziale
GoogleAuthProvidere chiamisignInWithCredential. - Legga l'identità tramite
currentUser(usiuidcome chiave dei dati). - Reagisca ai cambiamenti con un AuthStateListener; esegua la disconnessione con
signOut().
Avanti: salvare i dati dell'utente in Cloud Firestore.
Domande Frequenti
La lezione «Autenticazione Firebase» è gratuita?
Sì — il testo completo di «Autenticazione Firebase» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Android Academy, passa a CoddyKit PRO. Il corso Android Academy include 4 lezioni in totale.
Cosa imparerò in «Autenticazione Firebase»?
Accesso con email e Google Eserciti Android Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Android Academy?
Non è richiesta alcuna esperienza precedente. Android Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.
Quanto tempo richiede la lezione «Autenticazione Firebase»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Android Academy?
Sì. Ogni lezione Android Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Configurare Firebase
- Autenticazione Firebase
- Nozioni di base su Cloud Firestore
- Inviare notifiche con Cloud Messaging