Autenticación de Firebase
Inicio de sesión con correo electrónico y Google
Autenticación de Firebase es una lección gratuita de Android Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Android Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Android Academy incluye 4 lecciones en total.
¿Por qué Firebase Auth?
Firebase Authentication se encarga de las partes más complejas del inicio de sesión: almacenamiento seguro de contraseñas, actualización de tokens, recuperación de cuentas y muchos proveedores (correo electrónico, Google, Apple, teléfono y acceso anónimo).
En lugar de crear servidores de inicio de sesión, puede llamar a unas pocas API y obtener un FirebaseUser verificado. En esta lección implementará el inicio de sesión con correo electrónico y contraseña, así como con Google.
Habilitar los métodos de inicio de sesión
Antes de escribir código, habilite los proveedores que quiera utilizar en la consola de Firebase:
- Vaya a Authentication → Sign-in method.
- Active Email/Password.
- Active Google (seleccione un correo electrónico de asistencia).
Para iniciar sesión con Google, también debe añadir la huella SHA-1 de su aplicación en la configuración del proyecto; de lo contrario, el inicio de sesión fallará con un error del desarrollador.
Obtener la instancia de FirebaseAuth
El punto de entrada es Firebase.auth. Expone el usuario actual y los métodos para crear cuentas, iniciar sesión y cerrar sesión.
auth.currentUser es null cuando no hay ningún usuario conectado; es una forma rápida de decidir qué pantalla mostrar al iniciar la aplicación.
import com.google.firebase.Firebase
import com.google.firebase.auth.auth
val auth = Firebase.auth
fun isLoggedIn(): Boolean {
return auth.currentUser != null
}Crear una cuenta
Registre un usuario nuevo con createUserWithEmailAndPassword. Devuelve un Task, pero en código con corrutinas puede usar await() (de kotlinx-coroutines-play-services).
Si la operación tiene éxito, el usuario inicia sesión de inmediato.
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)
}
}Iniciar sesión con correo electrónico
Para iniciar sesión con un usuario existente se utiliza signInWithEmailAndPassword. La estructura es similar a la del registro.
Envolver la llamada en try/catch le permite mostrar errores claros — contraseña incorrecta, usuario inexistente o correo electrónico con formato no válido.
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 pantalla de inicio de sesión en Compose
Integre la autenticación en una pantalla pequeña de Compose. Mantenga el correo electrónico y la contraseña en el estado, llame a las funciones suspend desde un ámbito de corrutina y muestre los errores.
@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") }
}
}Leer el usuario actual
Un FirebaseUser contiene los datos de identidad: uid (identificador único y estable), email, displayName y photoUrl.
Use uid como clave al almacenar los datos de ese usuario en Firestore — se garantiza que es único y no cambia.
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)"}")
}Observar el estado de autenticación
La autenticación puede cambiar en cualquier momento (inicio de sesión, cierre de sesión o actualización del token). Registre un AuthStateListener para reaccionar a estos cambios en lugar de consultar periódicamente.
Es ideal para navegar automáticamente entre una pantalla de inicio de sesión y una pantalla principal.
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)Inicio de sesión con Google mediante Credential Manager
La forma moderna de implementar el inicio de sesión con Google es mediante la API de Credential Manager. Solicite un token de ID de Google y, después, conviértalo en una credencial de Firebase.
El paso clave consiste en crear una credencial de GoogleAuthProvider a partir del token de ID devuelto y pasarla 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()
}Cerrar sesión
Cerrar sesión requiere una sola llamada: auth.signOut(). Esto elimina el usuario local y activa el listener de estado de autenticación.
Para el inicio de sesión con Google, también puede borrar el estado de Credential Manager para que el selector vuelva a aparecer la próxima vez. Después de cerrar sesión, currentUser se convierte en null.
import com.google.firebase.Firebase
import com.google.firebase.auth.auth
fun logout() {
Firebase.auth.signOut()
// currentUser is now null; your AuthStateListener fires
}Gestionar errores de autenticación
Los errores de autenticación lanzan excepciones con tipos específicos que puede gestionar de forma diferenciada:
FirebaseAuthInvalidUserException— el usuario no existe o está inhabilitado.FirebaseAuthInvalidCredentialsException— contraseña incorrecta o correo electrónico no válido.FirebaseAuthUserCollisionException— el correo electrónico ya está registrado.
Convierta estas excepciones en mensajes claros para el usuario en lugar de mostrar trazas de pila sin procesar.
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"
}Comprobación rápida
Quiere cambiar automáticamente al usuario entre una pantalla de inicio de sesión y una pantalla principal cada vez que inicie o cierre sesión. ¿Cuál es el enfoque más limpio?
Recapitulación: autenticación
Ahora puede autenticar usuarios con Firebase:
- Active los proveedores en la consola y añada su SHA-1 para Google.
- Use
Firebase.authconcreateUserWithEmailAndPassword/signInWithEmailAndPassword. - Inicio de sesión con Google: obtenga un token de ID, cree una credencial de
GoogleAuthProvidery llame asignInWithCredential. - Lea la identidad mediante
currentUser(useuidcomo clave de sus datos). - Reaccione mediante un AuthStateListener; cierre sesión con
signOut().
Siguiente: almacenar los datos de ese usuario en Cloud Firestore.
Preguntas frecuentes
¿La lección «Autenticación de Firebase» es gratis?
Sí — el texto completo de «Autenticación de Firebase» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Android Academy, actualiza a CoddyKit PRO. El curso de Android Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Autenticación de Firebase»?
Inicio de sesión con correo electrónico y Google Practicas Android Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Android Academy?
No se requiere experiencia previa. Android Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.
¿Cuánto tiempo toma la lección «Autenticación de Firebase»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Android Academy?
Sí. Cada lección de Android Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Configuración de Firebase
- Autenticación de Firebase
- Conceptos básicos de Cloud Firestore
- Envío mediante Cloud Messaging