skills/davidcastagnetoa/skills/fcm-push-notifications

fcm-push-notifications

SKILL.md

FCM Push Notifications — Backend NestJS + Expo React Native

Guía completa de integración de Firebase Cloud Messaging (FCM) para el sistema de notificaciones push de HADA. Cubre backend (NestJS + firebase-admin) y cliente móvil (Expo Notifications), incluyendo gestión de tokens, manejo de errores, deep links y la conexión con el sistema de recordatorios.

Referencias disponibles

  • references/backend-fcm.md — Firebase Admin SDK en NestJS: inicialización, envío, manejo de errores
  • references/token-management.md — Ciclo de vida de tokens FCM: registro, almacenamiento, limpieza
  • references/expo-client.md — Lado cliente Expo: permisos, obtención de token nativo, listeners
  • references/deep-links.md — Construir y procesar deep links en notificaciones HADA

Cuándo usar cada referencia

Tarea Referencia
Enviar notificaciones desde NestJS backend-fcm.md
Registrar, actualizar o limpiar tokens FCM token-management.md
Configurar Expo para recibir notificaciones expo-client.md
Crear deep links que abran pantallas específicas deep-links.md

Reglas críticas (siempre en contexto)

1. Inicializar Firebase Admin una sola vez

if (!admin.apps.length) {
  admin.initializeApp({ credential: admin.credential.cert(serviceAccount) });
}

2. Usar sendEachForMulticast para múltiples tokens

// ✅ Una sola llamada para N tokens
await admin.messaging().sendEachForMulticast({ tokens, notification });

3. Limpiar tokens inválidos después de cada envío

response.responses.forEach((resp, idx) => {
  if (!resp.success && isInvalidTokenError(resp.error?.code)) {
    invalidTokens.push(tokens[idx]);
  }
});
await removeInvalidTokens(invalidTokens);

4. El campo data del payload solo acepta Record<string, string>

// ✅ Todo convertido a string
data: { profileId: uuid, deepLink: 'hada://lists/uuid' }

5. Las notificaciones push solo funcionan en dispositivo físico


Fuentes y documentación oficial

Weekly Installs
1
First Seen
9 days ago
Installed on
amp1
cline1
trae1
trae-cn1
opencode1
cursor1