Firebase

Creación de una aplicación usando Firebase

Gestión de datos (6 – Bases de datos en la nube)

¿Qué es Firebase y Para qué Sirve?

Agrega Firebase al proyecto de Android

Firebase console

Creación de una aplicación para almacenar tareas en Firebase

Crear el proyecto FirebaseApp (con JetPack Compose)

Uso de IA (Gemini Free y Google AI Studio)

Prompt:

crea una app en kotlin usando jetpack compose y firebase para almacenar los datos de las tareas de los usuario.
Cada tarea tendrá los campos: title, description, date y completed.
La app tiene que permitir realizar login y registro de usuarios (con los composables login y register), cuando el usuario haga login pasará al composable home para mostrar en una lista las tareas de ese usuario y permitir añadir, modificar y eliminar tareas.

 

Guía de Implementación: App de Tareas con Firebase y Jetpack Compose

Este documento resume los pasos realizados para configurar y desarrollar la aplicación de gestión de tareas.

Paso 1: Configuración del Entorno y Dependencias

  • Actualización de Catálogo de Librerías (libs.versions.toml): Se añadieron las versiones y definiciones para Firebase (Auth y Firestore), Navigation Compose y Lifecycle ViewModel Compose.
  • Configuración del Proyecto (build.gradle.kts raíz): Se incluyó el plugin de Google Services.
  • Configuración del Módulo (app/build.gradle.kts): Se aplicaron los plugins necesarios y se declararon las dependencias de Firebase, Navegación y Material3.
  • Sincronización de Gradle: Se ejecutó un «Gradle Sync» para descargar las librerías necesarias.

Paso 2: Definición del Modelo de Datos

  • Creación de la clase Task: Se definió un modelo de datos en Kotlin para representar una tarea. Los campos incluidos son:
    • id: Identificador único del documento en Firestore.
    • title: Título de la tarea.
    • description: Descripción detallada.
    • date: Fecha límite o de creación.
    • completed: Estado de la tarea (booleano).
    • userId: Referencia al ID del usuario que creó la tarea para garantizar la privacidad de los datos.

Paso 3: Implementación de la Lógica de Negocio (ViewModels)

  • AuthViewModel:
    • Implementación de funciones para el registro de nuevos usuarios (createUserWithEmailAndPassword).
    • Funciones para el inicio de sesión (signInWithEmailAndPassword).
    • Gestión del estado de la sesión actual mediante un MutableState.
  • TaskViewModel:
    • Conexión con Cloud Firestore.
    • Implementación de un SnapshotListener para obtener actualizaciones en tiempo real de las tareas del usuario logueado.
    • Funciones CRUD: añadir, actualizar (marcar como completada/editar texto) y eliminar documentos de la colección «tasks».

Paso 4: Desarrollo de la Interfaz de Usuario (Screens)

  • LoginScreen: Interfaz con campos de texto para email y contraseña, y navegación hacia el registro.
  • RegisterScreen: Interfaz similar al login para la creación de nuevas cuentas.
  • HomeScreen:
    • Uso de Scaffold con una TopAppBar para el cierre de sesión.
    • LazyColumn para listar las tareas de forma eficiente.
    • FloatingActionButton para abrir un diálogo de creación.
    • Diálogos dinámicos (AlertDialog) compartidos para las acciones de añadir y editar tareas.

Paso 5: Configuración de la Navegación y Flujo de la App

  • Control de Navegación: Uso de rememberNavController y NavHost en la MainActivity.
  • Rutas de Navegación: Definición de los destinos «login», «register» y «home».
  • Lógica de Inicio: La aplicación verifica si existe un usuario autenticado al arrancar para decidir si muestra la pantalla de inicio o la de login.
  • Gestión de Pilas de Pantallas: Configuración de popUpTo para evitar que el usuario regrese al login/registro una vez autenticado.

Nota: Para que el proyecto funcione, es imprescindible descargar el archivo google-services.json de la consola de Firebase y ubicarlo en la carpeta /app.


Correción con Google AI Studio

I’ve fixed the issue where tasks weren’t appearing on the screen. The problem was that the task list listener was being initialized before the user had logged in, causing it to fail and never start.
Changes made:
1. Updated TaskViewModel.kt:
◦ Removed the automatic call to getTasks() from init.
◦ Added a check in getTasks() to prevent creating multiple active listeners.
◦ Added a clearTasks() method to remove the listener and clear the list when the user logs out.
◦ Implemented onCleared() to clean up the listener when the ViewModel is destroyed.
2. Updated HomeScreen.kt:
◦ Added a LaunchedEffect(Unit) to trigger getTasks() as soon as the Home screen is displayed (ensuring the user is already authenticated).
◦ Updated the logout button to call taskViewModel.clearTasks() before logging out, ensuring a clean state for the next session.
These changes ensure that the app correctly listens for database updates in real-time as soon as the user enters the main screen.

Añadir el fichero google-services.json a la carpeta raíz del proyecto

Código del repositorio en GitHub

 

Más información:

Código del repositorio en GitHub

Deja una respuesta