Skip to main content

Documentation Index

Fetch the complete documentation index at: https://wiki.vivla.com/llms.txt

Use this file to discover all available pages before exploring further.

Visión general

Las notificaciones push se gestionan mediante expo-notifications (v0.31.4), con un servicio singleton que encapsula toda la funcionalidad.

Servicio de notificaciones

El servicio singleton se encuentra en src/modules/profile/services/notificationsService.ts y expone los siguientes métodos:
MétodoDescripción
getPermissionStatus()Consulta el estado actual de permisos de notificación
requestPermissions()Solicita permisos de notificación al usuario
getExpoPushToken()Obtiene el push token de Expo para el dispositivo
setAppBadgeCount(count)Establece el número del badge de la app
clearAppBadge()Limpia el badge de la app (equivale a setAppBadgeCount(0))
import { notificationsService } from '@/modules/profile/services/notificationsService';

// Consultar estado actual
const status = await notificationsService.getPermissionStatus();

// Solicitar permisos
const granted = await notificationsService.requestPermissions();

Configuración iOS

Habilitado

  • Alertas - Badges - Sonidos - Display en CarPlay

Deshabilitado

  • Critical alerts - Provisional permissions

Comportamiento de notificación mostrada

Cuando la app está en primer plano y llega una notificación, se aplica la siguiente configuración:
PropiedadValorDescripción
Alertas/bannersHabilitadoSe muestran alertas visuales
SonidoDeshabilitadoSin sonido en la notificación individual
BadgeDeshabilitadoNo actualiza el badge por notificación individual
Lista de notificacionesVisibleAparece en la lista de notificaciones del sistema
La configuración de badge deshabilitado en notificaciones individuales significa que el badge se gestiona manualmente a través del servicio, no automáticamente por cada notificación recibida.

Deep linking desde notificaciones

Las notificaciones push pueden contener un campo deep_link en sus datos. Cuando el usuario toca la notificación, el enlace se procesa a través del linkingService para navegar a la pantalla correspondiente.
// Estructura de datos de una notificación con deep link
{
  title: "Nueva reserva",
  body: "Tienes una nueva reserva pendiente",
  data: {
    deep_link: "/stays/123/details"
  }
}
El deep link se rutea a través del linkingService, que se encarga de validar la ruta y manejar casos donde el usuario no está autenticado (preservando el deep link para después del login).

Plugin en app.config.ts

La configuración del plugin de expo-notifications en app.config.ts:
ParámetroValor
Canal por defecto"default"
Background remote notificationsDeshabilitado
plugins: [
  [
    'expo-notifications',
    {
      defaultChannel: 'default',
      // Background remote notifications deshabilitado
    },
  ],
],

Integración con linkingService

El flujo completo de una notificación push con deep link es:
  1. El dispositivo recibe la notificación push
  2. El usuario toca la notificación
  3. Se extraen los datos de deep_link del payload
  4. El linkingService recibe la ruta
  5. Si el usuario está autenticado, se navega directamente
  6. Si no está autenticado, el deep link se preserva y se ejecuta después del login

Archivos clave

ArchivoResponsabilidad
src/modules/profile/services/notificationsService.tsServicio singleton de notificaciones
app.config.tsConfiguración del plugin expo-notifications