
Dans ce guide, nous allons ajouter des notifications push à une application Flutter avec Supabase et Entrig.
Entrig est un outil conçu pour Supabase : il envoie des notifications à partir des événements de base de données, sans code backend. Nous utiliserons une application de chat de groupe. Suivez l’application exemple sur GitHub.
Prérequis
- Un compte Supabase avec un projet
- Un compte Entrig : inscrivez-vous sur entrig.com
- Le JSON d’un compte de service Firebase pour les push Android
- Une clé d’authentification APNs et un compte Apple Developer pour iOS
Installation
1. Installez le package
Ajoutez Entrig à pubspec.yaml :
dependencies:
entrig: ^latest_version
Exécutez flutter pub get.
2. Configurez les plateformes
Android : aucune configuration supplémentaire n’est nécessaire.
iOS : exécutez cette commande afin de configurer automatiquement les capacités :
flutter pub run entrig:setup
Elle met à jour AppDelegate, Runner.entitlements et Info.plist, avec des sauvegardes automatiques.
3. Initialisez l’application
Récupérez votre clé API dans les réglages du tableau de bord Entrig, puis ajoutez-la à main.dart :
await Entrig.init(apiKey: 'YOUR_ENTRIG_API_KEY');
4. Enregistrez l’utilisateur
À la connexion, enregistrez l’appareil avec l’identifiant utilisateur, généralement celui de Supabase Auth :
final user = Supabase.instance.client.auth.currentUser;
if (user != null) {
await Entrig.registerUser(userId: user.id);
}
Un ID personnalisé convient aussi s’il correspond à l’ID stocké dans la table users. Entrig s’en sert pour associer les appareils aux lignes de la base. À la déconnexion :
await Entrig.unregisterUser();
Consultez la documentation du SDK Flutter pour les détails propres aux plateformes.
Base de données de l’application
Le schéma est celui d’un chat de groupe : les utilisateurs créent des groupes, les rejoignent et envoient des messages.
users est le point de départ. groups.created_by désigne le propriétaire ; group_members relie utilisateurs et groupes ; messages contient le texte, le groupe et l’expéditeur.
Chaque notification s’appuie sur une relation différente :
- Un membre rejoint →
group_members → groups → created_byvers le propriétaire (un à un). - Nouveau message → diffusion via
group_membersvers tous les membres sauf l’expéditeur (un à plusieurs). - Nouveau groupe → tous les utilisateurs enregistrés, sauf le créateur (diffusion générale).
Ces trois modèles — direct, indirect par table de jointure et diffusion — couvrent la plupart des cas d’usage.
Créer les notifications
Dans Entrig, une notification est définie par Trigger (l’événement), Users (les destinataires) et Message (le contenu).
Direct : arrivée d’un membre
La nouvelle ligne group_members contient le user_id de la personne qui arrive et le group_id, mais pas l’ID du propriétaire. Entrig suit la chaîne de clés étrangères group_id → groups → created_by → users.id. C’est une connexion Direct : un événement, un destinataire. Ajoutez une condition pour ignorer l’ajout automatique du propriétaire lorsqu’il crée son groupe.
- Table / événement :
group_members/INSERT - Condition :
group_members.user_id≠groups.created_by - Chemin utilisateur :
group_members.group_id → groups → created_by → users.id - Type :
new_member; champs :groups.name,users.name,group_members.group_id
Indirect via une table de jointure : nouveau message
Lorsqu’un message est envoyé, tous les membres du groupe doivent être avertis, sauf l’expéditeur. L’insertion est dans messages, mais les destinataires se trouvent dans group_members. Entrig prend le group_id, retrouve chaque ligne correspondante, puis résout chaque user_id vers un appareil enregistré.
- Table / événement :
messages/INSERT - Connexion : Indirect via Join Table
- Chemin :
messages.group_id → group_members → user_id → users.id - Filtre destinataire :
group_members.user_id≠messages.user_id - Type :
new_message; champs :messages.content,users.name,messages.group_id,groups.name
Broadcast : nouveau groupe
Quand un groupe est créé, Entrig peut notifier tous les utilisateurs de la table users. Il n’y a pas de table de jointure : c’est une connexion Broadcast. Excluez le créateur, qui n’a pas besoin d’être notifié de son propre groupe.
- Table / événement :
groups/INSERT - Connexion : Broadcast (tous les utilisateurs de
users) - Filtre :
users.id≠groups.created_by - Type :
new_group; champs :groups.id,groups.name,users.name
Une fois créée, Entrig génère automatiquement le trigger et la fonction de base de données dans le projet Supabase. Aucun déploiement manuel n’est nécessaire.
Gérer les notifications dans le SDK
Les trois notifications transportent un ID de groupe. Utilisez event.type pour ouvrir le bon écran :
Entrig.onNotificationOpened.listen((NotificationEvent event) {
switch (event.type) {
case 'new_member':
// afficher un dialogue et ouvrir event.data['group_id']
break;
case 'new_message':
// ouvrir directement le chat event.data['group_id']
break;
case 'new_group':
// afficher un dialogue et ouvrir le groupe event.data['id']
break;
}
});
event.type est la valeur définie dans le tableau de bord ; event.data contient les champs choisis : IDs, noms et contenu du message.
Conclusion
Direct, Indirect et Broadcast correspondent aux trois façons fondamentales dont les destinataires se rapportent à un événement dans une base relationnelle. Après avoir choisi le modèle, le reste est de la configuration. La même logique fonctionne pour les commandes, les tâches et les annonces produit.
Retrouvez la référence complète du SDK Flutter et le guide anglais Push Notifications for Supabase.