Heroverse es una aplicación nativa para Android, desarrollada como proyecto académico para el ciclo de DAM. La app permite a los usuarios explorar el universo de Marvel, buscar personajes, ver sus cómics asociados y consultar las últimas noticias a través de un lector RSS.
- Listado y Búsqueda de Personajes: Muestra una parrilla con los personajes de Marvel y permite realizar búsquedas por nombre en tiempo real para filtrar los resultados.
- Detalle de Personaje: Al seleccionar un personaje, se muestra una pantalla con su biografía y una lista horizontal con las portadas de los cómics más relevantes en los que aparece.
- Feed de Noticias: Integra un lector de noticias RSS para mostrar las últimas publicaciones oficiales de Marvel, demostrando el parseo de datos XML en segundo plano.
- Integración Multimedia y Geolocalización:
- Incluye una sección para visualizar un tráiler de película, aplicando el uso de componentes de vídeo nativos (
WebViewpara YouTube). - Presenta un mapa interactivo con una ubicación de filmación icónica y calcula la distancia hasta ella desde la posición del usuario, poniendo en práctica los servicios de geolocalización y la API de Google Maps.
- Incluye una sección para visualizar un tráiler de película, aplicando el uso de componentes de vídeo nativos (
El proyecto está desarrollado siguiendo las guías de arquitectura recomendadas por Google, utilizando un enfoque moderno basado en las siguientes tecnologías:
- Lenguaje: Kotlin 100%.
- UI: Jetpack Compose para la construcción de toda la interfaz de usuario de forma declarativa.
- Arquitectura: MVVM (Model-View-ViewModel) para separar la lógica de negocio de la interfaz de usuario.
- Inyección de Dependencias: Hilt para gestionar las dependencias de la aplicación, principalmente en la capa de red y repositorios.
- Asincronía: Kotlin Coroutines para manejar todas las operaciones en segundo plano, como las llamadas a la API.
- Networking:
- Retrofit: para realizar las peticiones HTTP a la API de Marvel.
- OkHttp: como cliente HTTP para añadir interceptores que gestionan la autenticación (API Keys,
ts,hash). - Moshi: para la serialización y deserialización de las respuestas JSON.
- Navegación: Jetpack Navigation Compose para gestionar el flujo de navegación entre las distintas pantallas.
- Gestión de Estado: Se utiliza una clase
UiStatesellada para controlar los estados de la UI (Carga, Éxito, Error), proporcionando una experiencia de usuario fluida.
El código está organizado en paquetes según su funcionalidad para facilitar la escalabilidad y el mantenimiento:
data: Contiene los modelos de datos de la aplicación (ej:Hero,Comic) y la capa deRepository, que actúa como única fuente de verdad para los datos.network: Incluye la definición del servicio de Retrofit (MarvelApiService), los DTOs (Data Transfer Objects) para mapear las respuestas de la API, y el módulo de Hilt (NetworkModule) que provee las dependencias de red.ui: Agrupa todos los elementos de Jetpack Compose.screens: Contiene los composables de cada pantalla principal.navigation: Define la lógica de navegación y las rutas de la app.theme: Gestiona los colores, tipografía y tema general de la aplicación.
viewmodels: Contiene losViewModelque exponen el estado a la UI y manejan la lógica de negocio.
Para ejecutar el proyecto, es necesario añadir las claves de la API de Marvel. Estas deben ser incluidas en el archivo local.properties en la raíz del proyecto:
PRIV_KEY="TU_CLAVE_PRIVADA"
PUB_KEY="TU_CLAVE_PUBLICA"