Conecta la app a Firebase
Si aún no lo has hecho, agrega Firebase a tu proyecto de Android.
Agrega Firebase Authentication a tu app
En el archivo Gradle del módulo (nivel de la app) (generalmente
<project>/<app-module>/build.gradle.kts
o<project>/<app-module>/build.gradle
), agrega la dependencia de la biblioteca de Firebase Authentication para Android. Te recomendamos usar Firebase Android BoM para controlar las versiones de las bibliotecas.dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:33.6.0")) // Add the dependency for the Firebase Authentication library // When using the BoM, you don't specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-auth") }
Cuando usas Firebase Android BoM, tu app siempre usará versiones compatibles de las bibliotecas de Firebase para Android.
(Alternativa) Agrega dependencias de la biblioteca de Firebase sin usar la BoM
Si eliges no usar la Firebase BoM, debes especificar cada versión de la biblioteca de Firebase en su línea de dependencia.
Ten en cuenta que, si usas múltiples bibliotecas de Firebase en tu app, es muy recomendable que uses la BoM para administrar las versiones de las bibliotecas para garantizar que todas las versiones sean compatibles.
dependencies { // Add the dependency for the Firebase Authentication library // When NOT using the BoM, you must specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-auth:23.1.0") }
Para usar un proveedor de autenticación, necesitas habilitarlo en Firebase console. Ve a la página de método de acceso en la sección Firebase Authentication para habilitar el acceso con correo electrónico y contraseña, y cualquier otro proveedor de identidad que desees en tu app.
Crea prototipos y realiza pruebas con Firebase Local Emulator Suite (opcional)
Antes de analizar cómo tu app autentica a los usuarios, veamos un conjunto de herramientas que puedes usar para crear prototipos y probar la funcionalidad de Authentication: Firebase Local Emulator Suite Si aún no elegiste una técnica de autenticación o un proveedor específico, estás probando varios modelos de datos con información pública y privada mediante Authentication y las Firebase Security Rules, o bien si estás creando prototipos de diseños de IU de acceso, poder trabajar de manera local sin implementar servicios en ejecución será de gran ayuda.
Un emulador de Authentication forma parte de Local Emulator Suite, lo que permite que tu app interactúe con el contenido y la configuración emulados de la base de datos y, si lo deseas, con los recursos emulados del proyecto (funciones, otras bases de datos y reglas de seguridad).
El uso del emulador de Authentication solo requiere algunos pasos sencillos:
- Agrega una línea de código a la configuración de prueba de tu app para conectarte al emulador.
- Desde la raíz del directorio de tu proyecto local, ejecuta
firebase emulators:start
. - Usa la IU de Local Emulator Suite para crear un prototipo de forma interactiva o la API de REST del emulador de Authentication para realizar pruebas no interactivas.
Puedes encontrar una guía detallada en el artículo Conecta tu app al emulador de Authentication. Para obtener más información, consulta la introducción a Local Emulator Suite.
Ahora veamos cómo autenticar a los usuarios.
Comprueba el estado de autenticación actual
Declara una instancia de
FirebaseAuth
.Kotlin+KTX
private lateinit var auth: FirebaseAuth
Java
private FirebaseAuth mAuth;
En el método
onCreate()
, inicializa la instanciaFirebaseAuth
.Kotlin+KTX
// Initialize Firebase Auth auth = Firebase.auth
Java
// Initialize Firebase Auth mAuth = FirebaseAuth.getInstance();
Cuando inicialices la actividad, verifica que el usuario haya accedido.
Kotlin+KTX
public override fun onStart() { super.onStart() // Check if user is signed in (non-null) and update UI accordingly. val currentUser = auth.currentUser if (currentUser != null) { reload() } }
Java
@Override public void onStart() { super.onStart(); // Check if user is signed in (non-null) and update UI accordingly. FirebaseUser currentUser = mAuth.getCurrentUser(); if(currentUser != null){ reload(); } }
Registra usuarios nuevos
Crea un nuevo método createAccount
que reciba una dirección de correo electrónico y una contraseña,
las valide y, luego, cree un nuevo usuario con el método
createUserWithEmailAndPassword
.
Kotlin+KTX
auth.createUserWithEmailAndPassword(email, password) .addOnCompleteListener(this) { task -> if (task.isSuccessful) { // Sign in success, update UI with the signed-in user's information Log.d(TAG, "createUserWithEmail:success") val user = auth.currentUser updateUI(user) } else { // If sign in fails, display a message to the user. Log.w(TAG, "createUserWithEmail:failure", task.exception) Toast.makeText( baseContext, "Authentication failed.", Toast.LENGTH_SHORT, ).show() updateUI(null) } }
Java
mAuth.createUserWithEmailAndPassword(email, password) .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, "createUserWithEmail:success"); FirebaseUser user = mAuth.getCurrentUser(); updateUI(user); } else { // If sign in fails, display a message to the user. Log.w(TAG, "createUserWithEmail:failure", task.getException()); Toast.makeText(EmailPasswordActivity.this, "Authentication failed.", Toast.LENGTH_SHORT).show(); updateUI(null); } } });
Agrega un formulario para registrar usuarios nuevos con su correo electrónico y contraseña, y llama a este método nuevo cuando se envíe. Puedes ver un ejemplo en nuestra muestra de inicio rápido.
Acceso de usuarios existentes
Crea un nuevo método signIn
que reciba una dirección de correo electrónico y contraseña,
los valide y, luego, permita que un usuario acceda con el método
signInWithEmailAndPassword
.
Kotlin+KTX
auth.signInWithEmailAndPassword(email, password) .addOnCompleteListener(this) { task -> if (task.isSuccessful) { // Sign in success, update UI with the signed-in user's information Log.d(TAG, "signInWithEmail:success") val user = auth.currentUser updateUI(user) } else { // If sign in fails, display a message to the user. Log.w(TAG, "signInWithEmail:failure", task.exception) Toast.makeText( baseContext, "Authentication failed.", Toast.LENGTH_SHORT, ).show() updateUI(null) } }
Java
mAuth.signInWithEmailAndPassword(email, password) .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, "signInWithEmail:success"); FirebaseUser user = mAuth.getCurrentUser(); updateUI(user); } else { // If sign in fails, display a message to the user. Log.w(TAG, "signInWithEmail:failure", task.getException()); Toast.makeText(EmailPasswordActivity.this, "Authentication failed.", Toast.LENGTH_SHORT).show(); updateUI(null); } } });
Agrega un formulario para que los usuarios accedan con su correo electrónico y contraseña, y llama a este método nuevo cuando se envíe. Puedes ver un ejemplo en nuestra muestra de inicio rápido.
Accede a la información del usuario
Si un usuario accedió correctamente, puedes obtener los datos de su cuenta en
cualquier momento mediante el método getCurrentUser
.
Kotlin+KTX
val user = Firebase.auth.currentUser user?.let { // Name, email address, and profile photo Url val name = it.displayName val email = it.email val photoUrl = it.photoUrl // Check if user's email is verified val emailVerified = it.isEmailVerified // The user's ID, unique to the Firebase project. Do NOT use this value to // authenticate with your backend server, if you have one. Use // FirebaseUser.getIdToken() instead. val uid = it.uid }
Java
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); if (user != null) { // Name, email address, and profile photo Url String name = user.getDisplayName(); String email = user.getEmail(); Uri photoUrl = user.getPhotoUrl(); // Check if user's email is verified boolean emailVerified = user.isEmailVerified(); // The user's ID, unique to the Firebase project. Do NOT use this value to // authenticate with your backend server, if you have one. Use // FirebaseUser.getIdToken() instead. String uid = user.getUid(); }
Próximos pasos
Explora las guías que explican cómo agregar otros servicios de identidad y autenticación: