- Aplicación de chat para Android con autenticación por número de teléfono, mensajería en tiempo real y envío de archivos, construida sobre Firebase con arquitectura MVVM.
- 📱 Autenticación por SMS con Firebase Auth (verificación OTP por número de teléfono)
- 💬 Mensajería en tiempo real con Cloud Firestore
- 📎 Envío de archivos e imágenes con Firebase Storage
- 🧭 Navegación de una sola Activity con Navigation Component
- 🎨 Splash Screen con la API oficial de AndroidX
| Categoría | Tecnologías |
|---|---|
| Lenguaje | Kotlin |
| UI | Fragments · Navigation Component · SplashScreen API |
| Arquitectura | MVVM · ViewModel · Clean Code |
| Backend | Firebase Auth (phone) · Cloud Firestore · Firebase Storage |
| Inyección de dependencias | Dagger |
| Testing | JUnit · Mockito · Robolectric |
| CI | GitHub Actions |
Requisitos: Android Studio (Ladybug o superior), JDK 17, una cuenta de Firebase.
- Clona el repositorio:
git clone https://github.com/srodevs/ChatApp.git- Crea un proyecto en Firebase Console y
registra la app con el
applicationIddel proyecto. - Habilita en la consola:
- Authentication → método Teléfono
- Cloud Firestore
- Storage
- Descarga
google-services.jsony colócalo en:
ChatApp/app/google-services.json
- Sincroniza Gradle y ejecuta.
Firebase limita la cantidad de SMS de verificación por día. Para desarrollar sin gastar esa cuota, usa los números de prueba que ofrece la propia consola:
Firebase Console → Authentication → Sign-in method → Phone → Números de teléfono para la prueba
Agrega un número ficticio (ej. +52 9999999922) con un código fijo (ej. 222222).
Con eso el flujo completo funciona sin enviar un SMS real.
Atajos adicionales para depurar el flujo de verificación
Si necesitas saltarte la entrada manual del código durante el desarrollo, el proyecto permite forzar la auto-recuperación del OTP en `data/AuthFirebaseService.kt`:fun loginPhone() {
// Solo para desarrollo: fuerza el código del número de prueba
firebaseAuth.firebaseAuthSettings
.setAutoRetrievedSmsCodeForPhoneNumber("+52 9999999922", "222222")
}Distribuido bajo licencia MIT. Ver LICENSE para más detalles.
