Skip to content

JeffCortez23/UNAMRide

Repository files navigation

🚗 UNAM Ride - Carpooling Universitario

Android Java Firebase Maps Status

Solución tecnológica de transporte compartido (Carpooling) para la comunidad universitaria de la Universidad Nacional de Moquegua.

UNAM Ride es una aplicación móvil nativa desarrollada para solucionar la problemática de transporte de los estudiantes de la Universidad Nacional de Moquegua (UNAM). Nace de la necesidad de facilitar la movilidad hacia el campus universitario, conectando en tiempo real a estudiantes que poseen vehículo (Conductores) con aquellos que necesitan transporte (Pasajeros), promoviendo la economía colaborativa, la seguridad y la puntualidad académica.

La aplicación destaca por su diseño moderno (Glassmorphism), uso de mapas OpenSource (OpenStreetMap) y una arquitectura robusta basada en la nube (Firebase).


📱 Características Principales

Cumpliendo con los requisitos del curso Programación de Dispositivos Móviles, la aplicación incluye:

1. Seguridad y Gestión de Usuarios 👥

  • 🔐 Seguridad Institucional: Registro validado exclusivamente para correos @unam.edu.pe.
  • Login y Registro: Autenticación segura mediante Firebase Authentication.
  • 🔄 Sistema de Roles Dual: Alterna fácilmente entre perfil de Conductor y Pasajero (Persistencia con SharedPreferences).
  • Perfil de Usuario: Gestión de foto de perfil (con codificación Base64), datos académicos y cierre de sesión.

2. Mapas y Geolocalización 🗺️

  • 🗺️ Geolocalización OpenSource: Implementación de mapas interactivos sin costos de API (osmdroid).
  • Selección de Ubicación: Los conductores pueden elegir el punto de partida tocando el mapa.
  • Visualización de Rutas: Trazado de líneas entre origen y destino en el detalle de la reserva.

3. Las 4 Operaciones Principales 📋

  1. Publicar Ruta (Modo Conductor): Registro de viajes con origen, destino, hora, precio, asientos y coordenadas GPS con sincronización instantánea.
  2. Buscar Transporte (Modo Pasajero): Listado en tiempo real (RecyclerView) con buscador por destino.
  3. Mis Viajes (Historial Unificado):
    • Conductores: Ven las rutas que han publicado.
    • Pasajeros: Ven las reservas que han realizado.
  4. Reserva de Asientos: Sistema transaccional que vincula al pasajero con el viaje seleccionado.

4. Diseño y Experiencia de Usuario 🎨

  • 🎨 UI/UX Avanzada: Interfaz inmersiva (Full Screen), animaciones fluidas y diseño de cristal (Glassmorphism).
  • 🌙 Modo Oscuro: Optimizado para bajo consumo de batería y confort visual.
  • Componentes Modernos: RecyclerView, CardView, ConstraintLayout, BottomNavigationView personalizado.

5. Base de Datos en Tiempo Real ☁️

  • Uso de Firebase Realtime Database para sincronización instantánea.
  • Estructura optimizada con nodos para users, active_users, viajes y reservas_usuarios.

📸 Capturas de Pantalla

Login / Registro Selector de Rol Publicar Ruta Mapa y Ubicación
Buscar Viaje Detalle y Reserva Mis Viajes Perfil de Usuario

🛠️ Stack Tecnológico

La aplicación sigue el patrón de arquitectura MVC (Modelo-Vista-Controlador).

  • Lenguaje: Java (JDK 1.8)
  • IDE: Android Studio Otter 2 (2025.2.2) / Ladybug/Koala
  • Configuración de Build: Gradle con Kotlin DSL (build.gradle.kts)
  • Backend (BaaS): Google Firebase
    • Authentication: Gestión de sesiones.
    • Realtime Database: Base de datos NoSQL JSON.
    • Cloud Messaging: Notificaciones Push.
  • Librerías Clave:
    • Osmdroid: Mapas OpenSource y geolocalización (OpenStreetMap para Android).
    • Glide: Carga y transformación de imágenes (fotos de perfil).
    • Firebase BOM: Auth, Database y Messaging.
  • Diseño: XML, Material Design, Custom Drawables (Glassmorphism).

💾 Estructura de Datos (NoSQL)

La base de datos en Firebase se estructura en tres nodos principales para optimizar la latencia:

{
  "users": {
    "uid": { 
      "nombre": "...", 
      "codigo": "...", 
      "celular": "..." 
    }
  },
  "viajes": {
    "viaje_id": {
      "origen": "...",
      "destino": "...",
      "precio": "...",
      "asientos_disponibles": 4,
      "driver_id": "..."
    }
  },
  "reservas_usuarios": {
    "uid_pasajero": { 
      "viaje_id": true 
    }
  }
}

🚀 Instalación y Configuración

Para clonar y ejecutar este proyecto localmente:

  1. Clonar el repositorio:

    git clone https://github.com/JeffCortez23/UNAMRide.git
  2. Configurar Firebase:

    • Este proyecto requiere el archivo google-services.json para conectar con la base de datos.
    • Debes crear tu propio proyecto en Firebase Console.
    • Registra el paquete: com.elyefris.unamride.
    • Descarga el archivo google-services.json y colócalo en la carpeta app/.
  3. Dependencias:

    • Al abrir el proyecto, Android Studio descargará automáticamente las dependencias de Osmdroid y Glide definidas en el build.gradle.
    • Deja que Gradle sincronice las dependencias.
  4. Compilar y Ejecutar:

    • Abre el proyecto en Android Studio.
    • Conecta tu dispositivo físico o usa un emulador (Min SDK: 26).
    • Ejecuta en un emulador o dispositivo físico.

📂 Estructura del Código (Java)

El proyecto sigue el patrón MVC y se organiza en los siguientes módulos:

🔐 Autenticación y Acceso

  • LoginActivity.java: Gestión de inicio de sesión con Firebase Auth.
  • RegisterActivity.java: Registro de nuevos usuarios con validación de dominio institucional.
  • RecuperarPasswordActivity.java: Envío de correos para restablecimiento de credenciales.
  • RolActivity.java: Selector inicial de rol (Conductor/Pasajero) con persistencia en SharedPreferences.

🚗 Gestión de Viajes (Core)

  • PublicarViajeActivity.java: Formulario para conductores (Origen, Destino, Precio, Cupos).
  • BuscarViajeActivity.java: Lista en tiempo real de viajes disponibles (filtro por destino).
  • DetalleReservaActivity.java: Confirmación de viaje y decremento de asientos en la nube.
  • MisViajesActivity.java: Historial unificado de rutas publicadas y reservas activas.

🗺️ Mapas y Geolocalización

  • MapaActivity.java: Visualización principal del mapa con OpenStreetMap (osmdroid).
  • SeleccionarUbicacionActivity.java: Interfaz táctil para que el conductor elija el punto de partida en el mapa.
  • MapUtils.java: Clase utilitaria para marcadores y trazado de polilíneas.

🧩 Modelos y Adaptadores

  • Viaje.java: Clase POJO que representa la estructura de datos de un viaje en Firebase.
  • ViajeAdapter.java: Adaptador para el RecyclerView que renderiza las tarjetas de viajes.

⚙️ Utilidades y Sistema

  • BaseActivity.java: Clase padre que configura el modo inmersivo (Full Screen) en todas las pantallas.
  • MainActivity.java: Controlador de flujo principal (Splash Screen y redirección de sesión).
  • NavbarManager.java: Gestión centralizada de la barra de navegación inferior.
  • MyFirebaseMessagingService.java: Servicio para recepción de notificaciones Push.
  • DeveloperActivity.java: Pantalla de créditos con animaciones y efectos visuales.

👨‍💻 Autor

Renzo Jeffrey Cortez Laura
Estudiante de Ingeniería de Sistemas e Informática - UNAM
(A.K.A. ElYefris)

GitHub


🎓 Información Académica

Curso: Programación de Dispositivos Móviles II
Universidad: Universidad Nacional de Moquegua (UNAM)
Semestre: 2025-II
Ubicación: Ilo, Perú 🇵🇪


Disclaimer: Este es un proyecto académico con fines educativos.


Hecho con ❤️ en Ilo, Perú.

About

Aplicación móvil nativa (Android/Java) de transporte compartido (Carpooling) para la Universidad Nacional de Moquegua. Integra Firebase (Auth, Database, FCM) para conectar conductores y pasajeros en tiempo real.

Topics

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages