Trabajo Práctico Grupal - Ingeniería de Software II
Melodía es una aplicación de música en streaming desarrollada para ofrecer una experiencia completa y atractiva. Su objetivo es permitir a los usuarios descubrir nuevas canciones, reproducir su música favorita y organizar playlists de forma sencilla e intuitiva.
| Nombre | Apellido | Padrón | |
|---|---|---|---|
| Ian | von der Heyde | ivon@fi.uba.ar | 107638 |
| Valentín | Schneider | vschneider@fi.uba.ar | 107964 |
| Daniela | Ojeda | dojeda@fi.uba.ar | 107690 |
| Alan | Cantero | acantero@fi.uba.ar | 99676 |
| Ezequiel | Lazarte | ezlazarte@fi.uba.ar | 108063 |
MelodiaFront/
├── app/ # Código fuente principal de la app (pantallas, navegación, lógica de negocio)
├── components/ # Componentes reutilizables de UI
├── constants/ # Constantes globales (colores, estilos, etc.)
├── contexts/ # Contextos de React para manejo de estado global
├── hooks/ # Custom hooks
├── assets/ # Imágenes y fuentes
│ ├── fonts/
│ └── images/
├── utils/ # Funciones utilitarias y helpers
├── scripts/ # Scripts de utilidad para desarrollo
├── .env # Variables de entorno
├── .prettierrc # Configuración de Prettier
├── .gitignore # Archivos y carpetas ignorados por git
├── package.json # Dependencias y scripts de npm
├── README.md # Documentación del proyecto
└── ...otros archivos de configuración
-
copia el .env.example a .env y configura las variables de entorno necesarias, como la URL de la API backend.
cp .env.example .env
-
Install dependencies
npm install
-
Start the app
npx expo start --go
-
Verificar código:
npx eslint
-
Arreglar problemas automáticamente:
npx eslint . --fix -
Formatear código:
npm run format
-
Verificar tipos:
npx tsc --noEmit
ℹ️ Para usar el hook pre-commit personalizado:
- Copia el archivo
pre-commita la carpeta de hooks de .git:
cp pre-commit .git/hooks/pre-commit
chmod +x .git/hooks/pre-commit- ¡Listo! El hook se ejecutará automáticamente antes de cada commit.
- Logging
a
El nivel de logueo depende del entorno:
- Si
ENVIRONMENT=production, siempre se usaWARNING(no importa el valor deLOG_LEVEL). - Si
ENVIRONMENT=development, puedes configurar el nivel con la variableLOG_LEVELen tu archivo.env(por defecto:INFO).
Valores posibles para LOG_LEVEL (de mayor a menor severidad):
CRITICALERRORWARNINGINFODEBUGNOTSET
Recomendación:
- Usa
INFOpara desarrollo general.- Usa
DEBUGsolo para troubleshooting detallado.- En producción, el nivel es siempre
WARNINGpara evitar ruido innecesario.
colorlog— formateo de logs en color
Nota:
Las dependencias de desarrollo se encuentran enrequirements-dev.txty se instalan automáticamente siENVIRONMENT=developmenten tu.env.
Expo recomienda usar EAS Build para generar APKs en proyectos modernos. El comando expo build:android está deprecado y no es compatible con Node 17+ ni con las últimas versiones de Expo.
Sigue estos pasos:
- Instala EAS CLI globalmente si no lo tienes:
npm install -g eas-cli- Navega al directorio raíz de tu proyecto:
cd MelodiaFront- Inicia sesión en tu cuenta de Expo (si no tienes una, crea una en expo.dev):
eas login- Configura EAS Build en tu proyecto (solo la primera vez):
npx eas build:configure- Verifica tener lo necesario:
npx expo-doctor- Ejecuta el comando para construir el APK (de forma local):
npx eas build --local -p android --profile previewPara mejorar perfomance al hacer la apk local: ir a /android y en el archivo "gradle.properties" cambiar la linea por esta:
org.gradle.jvmargs=-Xmx8192m -XX:MaxMetaspaceSize=2048m-
O de forma remota:
para build de preview (la que sirve para mostrar)
npx eas build -p android --profile preview
build de desarrollo:
npx eas build -p android --profile development
Para un build de producción (solo sirve para subir a la play store):
npx eas build -p android --profile production
-
Cuando la build termine, Expo te dará un enlace para descargar el archivo APK.
9 . APK DE DESARROLLO
npx expo run:androidPara limpieza y compilar de nuevo:
rm -rf android/.gradle android/app/build android/build
# y después volver a compilar
npx expo run:android
#tambien se puede ejecutar con
npx expo start --dev-clientPara mejorar el rendimiento y evitar exponer logs en builds públicos, recomendamos automatizar la eliminación de console en los builds preview y production.
- Instala el plugin dev:
npm install --save-dev babel-plugin-transform-remove-console- Configura
babel.config.jspara que sólo se aplique en envproduction(ya actualizado en este repo):
production: {
plugins: [
'react-native-paper/babel',
['transform-remove-console', { exclude: ['error', 'warn'] }],
],
}Esto mantiene console.error y console.warn (útiles en producción) y elimina console.log/info/debug.
-
Verifica el perfil
previeweneas.json— sidevelopmentClientestá activado, el build mantendrá logs; sindevelopmentClient(como está por defecto enpreview) el build usaráproductiony aplicará el plugin. -
Probar localmente (simula producción):
# Inicia Metro con modo producción/minificación
npx expo start --no-dev --minify
# O verifica con Babel en un archivo de prueba
NODE_ENV=production npx babel tmp-test-console.js --out-file tmp-test-console.out.jsSi quieres mantener logs en un build preview puntual, puedes remover temporalmente el plugin o cambiar la configuración del preview en eas.json para usar developmentClient: true (no recomendado para builds públicos).
Este proyecto utiliza la API moderna Firebase Cloud Messaging V1 y requiere un Development Build para funcionar correctamente (no usar Expo Go estándar).
Asegúrate de tener la última versión de EAS CLI instalada y logueada:
npm install -g eas-cli
npx eas login
2. Obtener Credenciales de Admin (Solo si se configura desde cero)
Para que EAS pueda enviar notificaciones, necesita una "Service Account Key":
Ir a la Consola de Firebase > Configuración del proyecto (⚙️).
Pestaña Cuentas de servicio.
Clic en Generar nueva clave privada.
Se descargará un archivo .json (guárdalo temporalmente, NO lo subas al repo).
3. Configurar Credenciales en EAS
Sube la clave descargada a los servidores de Expo:
Bash
npx eas credentials
Selecciona Android > development.
Elige Google Service Account.
Opción: Manage your Google Service Account Key for Push Notifications (FCM V1).
Sube el archivo .json descargado en el paso anterior.
Importante: Una vez subido, borra el archivo .json de tu ordenador por seguridad.
4. Generar el Cliente de Desarrollo
Esto crea una APK personalizada que incluye las librerías nativas de FCM V1. Solo es necesario hacerlo una vez (o cuando se instalen nuevas librerías nativas).
Opción A: Build en la nube (Recomendado si no tienes Android Studio):
Bash
npx eas build --platform android --profile development
Opción B: Build local (Más rápido, requiere entorno Android/Java configurado):
Bash
npx eas build --local --platform android --profile development
5. Flujo de Trabajo Diario
Instala la APK generada en tu dispositivo Android o Emulador.
Inicia el servidor de desarrollo:
Bash
npx expo start
Escanea el QR o conecta con la app instalada (no uses Expo Go).
¡Listo! Los cambios de código (JS/React) se verán al instante sin recompilar.
Luego correr:
npx eas build --local --platform android --profile development
npx expo start
---
## Firebase Android configuration per profile
To avoid failures like "No matching client found for package name 'com.melodia.app.preview'", ensure you have a `google-services.json` for each Android package name (flavor). The project can reference different files per build profile.
Steps:
1. In the Firebase console, add an Android app with the package name for the profile you want (e.g., `com.melodia.app.preview`).
2. Download the `google-services.json` and save it to the root of the project with a name that matches the profile, for example `google-services.preview.json`.
3. For local or EAS builds using the `preview` profile, set the `GOOGLE_SERVICES_FILE` environment variable in `eas.json` (or in CI) to point to that file. Example (already set in `eas.json`):
```json
"GOOGLE_SERVICES_FILE": "./google-services.preview.json"- The
app.config.jsautomatically picks theGOOGLE_SERVICES_FILEenv var or a file named according toAPP_ID_SUFFIX(e.g../google-services.preview.json). If you don't have a per-profile Google services file, the defaultgoogle-services.jsonis used.
If you build locally (with npx eas build --local) make sure a google-services.json exists in android/app/ — the prebuild copies that file into the Android project.
Esta sección detalla los pasos para habilitar notificaciones push en la build de Preview (com.melodia.app y com.melodia.app.preview) usando Firebase Cloud Messaging (FCM) y EAS.
- Cuenta de Firebase con el proyecto
melodia-35f9b. - CLI de EAS instalado y logueado.
- Archivos
google-services.json(Dev) ygoogle-services.preview.json(Preview) en la raíz del proyecto.
Para permitir que la app se registre en FCM:
- Ve a Project Settings (engranaje) > General > Tus apps.
- Selecciona la app:
com.melodia.app.preview. - Agrega la huella digital SHA-1 de la Keystore de EAS.
SHA-1 Actual (EAS Preview Profile):
CE:DD:91:D8:12:26:3F:0A:53:48:8A:5C:28:1A:78:21:B1:36:97:85
Para que los servidores de Expo envíen mensajes a través de tu Firebase:
- Ejecuta:
npx eas credentials
- Navega a: Android > preview > Google Service Account Key for Push Notifications (FCM V1).
- Sube o selecciona el archivo
.json(Service Account) generado desde Firebase Console > Cuentas de servicio.
Estado Actual:
- Estado: ✅ Configurado
- Service Account:
firebase-adminsdk-fbsvc@melodia-35f9b...
Nota: Se comparte la misma Service Account para Dev y Preview, ya que pertenecen al mismo proyecto de Firebase.
adb logcat | grep "ExponentPushToken https://expo.dev/notifications
Ve a la Herramienta de Notificaciones de Expo en tu navegador.
En el campo "To (Expo Push Token)", pega tu token: ExponentPushToken[M20sDKLdJiEROLZ3pWoobI]
En "Message Title", escribe algo como: Prueba Preview.
En "Message Body", escribe: Si lees esto, las credenciales funcionan.
(Importante) En la sección "Data (JSON)" o configuración avanzada, asegúrate de que el Channel ID sea default (ya que así lo configuraste en tu código), aunque generalmente funciona automático si solo tienes uno.
Dale al botón Send a notification.
