
En esta guía añadiremos notificaciones push a una aplicación Flutter con Supabase y Entrig.
Entrig es una herramienta para Supabase que envía notificaciones a partir de eventos de la base de datos, sin escribir código de backend. Usaremos una aplicación de chat de grupo; puedes seguir el ejemplo en GitHub.
Requisitos previos
- Una cuenta y un proyecto de Supabase
- Una cuenta de Entrig: regístrate en entrig.com
- El JSON de una cuenta de servicio de Firebase para Android
- Una clave de autenticación APNs y una cuenta Apple Developer para iOS
Configuración
1. Instala el paquete
Añade Entrig a pubspec.yaml:
dependencies:
entrig: ^latest_version
Ejecuta flutter pub get.
2. Configura las plataformas
Android: no requiere configuración adicional.
iOS: ejecuta el comando siguiente para configurar las capacidades automáticamente:
flutter pub run entrig:setup
Actualiza AppDelegate, Runner.entitlements e Info.plist; se crean copias de seguridad.
3. Inicializa Entrig
Obtén tu clave API en los ajustes del panel de Entrig y añádela a main.dart:
await Entrig.init(apiKey: 'YOUR_ENTRIG_API_KEY');
4. Registra al usuario
Al iniciar sesión, registra el dispositivo con un identificador de usuario. Normalmente será el ID de Supabase Auth:
final user = Supabase.instance.client.auth.currentUser;
if (user != null) {
await Entrig.registerUser(userId: user.id);
}
También puedes usar un ID propio, siempre que sea el mismo que se guarda en la tabla users. Entrig lo utiliza para relacionar los dispositivos con las filas de la base de datos. Al cerrar sesión, anula el registro:
await Entrig.unregisterUser();
Consulta las instrucciones del SDK de Flutter para la configuración detallada.
La base de datos de la aplicación
El esquema es un chat de grupo mínimo: los usuarios crean grupos, se unen a ellos y envían mensajes.
users es el punto de partida. groups.created_by identifica al propietario; group_members relaciona usuarios y grupos; y messages guarda el contenido con su grupo y emisor.
Cada notificación usa una relación distinta:
- Un miembro se une →
group_members → groups → created_byhasta el propietario (uno a uno). - Un mensaje nuevo →
group_memberspara todos los miembros salvo el emisor (uno a muchos). - Un grupo nuevo → todos los usuarios registrados salvo el creador (difusión).
Estos patrones —directo, indirecto por tabla intermedia y difusión— cubren la mayoría de casos de uso.
Crear notificaciones
Una notificación de Entrig se define con Trigger (evento), Users (destinatarios) y Message (mensaje).
Directa: un miembro se une
La fila nueva de group_members tiene el user_id de quien se une y el group_id, pero no el ID del propietario. Entrig sigue las claves foráneas group_id → groups → created_by → users.id. Es una conexión Direct: un evento y un destinatario. Añade una condición para omitir la fila creada automáticamente cuando el propietario crea su propio grupo.
- Tabla / evento:
group_members/INSERT - Condición:
group_members.user_id≠groups.created_by - Ruta de usuario:
group_members.group_id → groups → created_by → users.id - Tipo:
new_member; campos:groups.name,users.name,group_members.group_id
| Campo | Valor |
|---|---|
| Título | New member joined your group |
| Cuerpo | {{users.name}} joined your group {{groups.name}} |
Indirecta mediante tabla intermedia: un mensaje nuevo
Al enviar un mensaje, todos los miembros del grupo deben recibirlo excepto el emisor. La inserción está en messages, pero los destinatarios están en group_members. Entrig toma el group_id, encuentra las filas coincidentes y resuelve cada user_id en un dispositivo registrado. Un filtro excluye al emisor.
- Tabla / evento:
messages/INSERT - Conexión: Indirect via Join Table
- Ruta:
messages.group_id → group_members → user_id → users.id - Filtro:
group_members.user_id≠messages.user_id - Tipo:
new_message; campos:messages.content,users.name,messages.group_id,groups.name
Difusión: un grupo nuevo
Cuando se crea un grupo, Entrig puede notificar a todos los usuarios de la tabla users. No hay una tabla intermedia: es una conexión Broadcast. Excluye al creador, ya que no necesita una notificación de su propio grupo.
- Tabla / evento:
groups/INSERT - Conexión: Broadcast (todos los usuarios de
users) - Filtro:
users.id≠groups.created_by - Tipo:
new_group; campos:groups.id,groups.name,users.name
Al crear una notificación, Entrig genera automáticamente el trigger y la función de base de datos en tu proyecto Supabase. No hay nada que desplegar manualmente.
Gestionar notificaciones en el SDK
Las tres notificaciones incluyen un ID de grupo. Usa event.type para enviar al usuario a la pantalla adecuada:
Entrig.onNotificationOpened.listen((NotificationEvent event) {
switch (event.type) {
case 'new_member':
// muestra un diálogo y abre el chat del grupo con event.data['group_id']
break;
case 'new_message':
// abre directamente el chat del grupo con event.data['group_id']
break;
case 'new_group':
// muestra un diálogo y abre el grupo nuevo con event.data['id']
break;
}
});
event.type es el valor configurado en el panel. event.data contiene los campos que seleccionaste: IDs, nombres y contenido del mensaje.
Conclusión
Direct, Indirect y Broadcast corresponden a las tres formas fundamentales en que los destinatarios se relacionan con un evento en una base de datos relacional. Una vez elegido el patrón, el resto es configuración. La misma lógica sirve para pedidos, tareas y anuncios de productos.
Consulta la referencia completa del SDK de Flutter y la guía en inglés Push Notifications for Supabase.