Aplicación Android desarrollada con Kotlin y Jetpack Compose que consume la API de Jikan para mostrar información sobre animes y permite a los usuarios registrarse, iniciar sesión y guardar sus puntuaciones personales.
- ✅ Autenticación con Firebase (Email y Contraseña)
- ✅ Consumo de API REST (Jikan API)
- ✅ Base de datos local con Room
- ✅ Carga de imágenes con Coil
- ✅ Arquitectura MVVM
- ✅ Material Design 3
- ✅ Navegación con Jetpack Compose
El proyecto sigue la arquitectura MVVM (Model-View-ViewModel):
app/
├── data/
│ ├── local/ # Room Database
│ │ ├── dao/ # Data Access Objects
│ │ ├── database/ # Configuración de Room
│ │ └── entity/ # Entidades de la BD
│ ├── remote/ # API
│ │ ├── api/ # Interfaces de Retrofit
│ │ └── dto/ # Data Transfer Objects
│ └── repository/ # Repositorios
├── domain/
│ └── model/ # Modelos de dominio
├── ui/
│ ├── login/ # Pantalla de Login
│ ├── home/ # Pantalla Home
│ ├── navigation/ # Navegación
│ └── theme/ # Tema de la app
└── MainActivity.kt
- Ve a Firebase Console
- Crea un nuevo proyecto o usa uno existente
- Añade una app Android con el package name:
com.tuusuario.animeapp - Descarga el archivo
google-services.json - Colócalo en
app/google-services.json - Habilita Authentication → Email/Password en Firebase Console
Añade en build.gradle (nivel proyecto):
buildscript {
dependencies {
classpath("com.google.gms:google-services:4.4.0")
}
}Todas las dependencias están incluidas en el archivo build.gradle (Module: app):
- Jetpack Compose
- Firebase Auth
- Retrofit (API REST)
- Room (Base de datos local)
- Coil (Carga de imágenes)
- Navigation Compose
- Coroutines
Los permisos necesarios ya están en AndroidManifest.xml:
INTERNETACCESS_NETWORK_STATE
- Registro de nuevos usuarios
- Inicio de sesión
- Validación de email (formato correcto)
- Validación de contraseña (mínimo 4 caracteres)
- Mensajes Toast para feedback
- Lista de animes desde Jikan API
- Información: imagen, título, episodios, rating, score
- Campo para añadir puntuación personal
- Filtro: ver todos / ver solo puntuados
- Barra superior con nombre de usuario
- Barra inferior con iconos de filtro
Base URL: https://api.jikan.moe
Endpoint: /v4/anime
Campos usados:
mal_idimages.jpg.image_urltitleepisodesratingscore
Tabla: anime_score
Columnas:
malId(INT, Primary Key)personalScore(DOUBLE)
Estrategia de inserción: OnConflictStrategy.REPLACE
- Espaciado entre componentes: 8-12 dp
- Padding horizontal: 16-24 dp
- Material Design 3
- Scaffold con TopBar y BottomBar
- Cards con elevación para cada anime
LoginViewModel: Gestiona autenticación y validaciónHomeViewModel: Gestiona lista de animes y puntuaciones
AuthRepository: Encapsula Firebase AuthAnimeRepository: Combina datos de API y Room
- Se usa
StateFlowpara estados reactivos collectAsState()en Composables
- Try-catch en operaciones de red y BD
- Mensajes Toast para feedback al usuario
- Estados de carga con
CircularProgressIndicator
- Regex:
[a-zA-Z0-9._-]+@[a-z]+\\.+[a-z]+ - Los botones solo se activan con email válido
- Longitud mínima: 4 caracteres
- Campo con opción de mostrar/ocultar
- Debe ser un número entre 0 y 10
- Se valida antes de guardar en Room
- Usuario abre la app → LoginScreen
- Usuario se registra o inicia sesión → Firebase Auth
- Login exitoso → Navegación a HomeScreen
- App carga animes → Jikan API + Room
- Usuario ve lista de animes con sus puntuaciones
- Usuario añade/actualiza puntuación → Guarda en Room
- Usuario puede filtrar por todos o solo puntuados
| Librería | Versión | Uso |
|---|---|---|
| Compose BOM | 2023.08.00 | UI con Jetpack Compose |
| Firebase BOM | 32.7.0 | Autenticación |
| Retrofit | 2.9.0 | Consumo de API |
| Room | 2.6.1 | Base de datos local |
| Coil | 2.5.0 | Carga de imágenes |
| Navigation | 2.7.6 | Navegación entre pantallas |
- Asegúrate de añadir tu archivo de Firebase en
app/google-services.json
- Verifica que tienes conexión a internet
- Haz Sync Project with Gradle Files
- Verifica los permisos de INTERNET en el Manifest
- Comprueba que Coil está correctamente importado
- Verifica que habilitaste Email/Password en Firebase Console
- Comprueba el package name en Firebase
Proyecto desarrollado por Eneko para el examen de Programación Multimedia y Dispositivos Móviles - 2º DAM