
In dieser Anleitung fügen wir einer Flutter-App mit Supabase und Entrig Push-Benachrichtigungen hinzu.
Entrig ist ein Tool für Supabase, das auf Datenbankereignisse reagiert und Push-Benachrichtigungen ohne Backend-Code versendet. Wir bauen einen Gruppenchat nach; die Beispiel-App auf GitHub kannst du parallel verwenden.
Voraussetzungen
- Ein Supabase-Konto mit Projekt
- Ein Entrig-Konto auf entrig.com
- Firebase-Service-Account-JSON für Android
- APNs-Authentifizierungsschlüssel und Apple-Developer-Konto für iOS
Einrichtung
1. Paket installieren
Füge Entrig in pubspec.yaml ein und installiere es mit flutter pub get:
dependencies:
entrig: ^latest_version
2. Plattformen konfigurieren
Android: Es ist keine zusätzliche Einrichtung erforderlich.
iOS: Der folgende Befehl richtet die Capabilities automatisch ein:
flutter pub run entrig:setup
Er aktualisiert AppDelegate, Runner.entitlements und Info.plist und legt Sicherungskopien an.
3. In der App initialisieren
Hole den API-Schlüssel aus den Entrig-Dashboard-Einstellungen und füge ihn zu main.dart hinzu:
await Entrig.init(apiKey: 'YOUR_ENTRIG_API_KEY');
4. Benutzer registrieren
Registriere beim Anmelden das Gerät mit einer Benutzer-ID — normalerweise der ID von Supabase Auth:
final user = Supabase.instance.client.auth.currentUser;
if (user != null) {
await Entrig.registerUser(userId: user.id);
}
Eine eigene Benutzer-ID ist ebenfalls möglich, wenn sie mit der ID in der Tabelle users übereinstimmt. Entrig ordnet damit Geräte Datenbankzeilen zu. Beim Abmelden wird das Gerät entfernt:
await Entrig.unregisterUser();
Weitere Details enthält die Flutter-SDK-Dokumentation.
Datenbank der App
Das Schema ist ein einfacher Gruppenchat: Nutzer erstellen Gruppen, treten ihnen bei und senden Nachrichten.
users ist der Ausgangspunkt. groups.created_by bezeichnet den Besitzer, group_members verbindet Nutzer und Gruppen, und messages speichert Inhalt, Gruppe und Absender.
Die Benachrichtigungen verwenden drei Beziehungen:
- Mitglied tritt bei →
group_members → groups → created_byzum Besitzer (eins zu eins). - Neue Nachricht → über
group_membersan alle Mitglieder außer dem Absender (eins zu vielen). - Neue Gruppe → an alle registrierten Nutzer außer dem Ersteller (Broadcast).
Direkt, indirekt über eine Join-Tabelle und Broadcast decken damit die meisten Benachrichtigungsfälle ab.
Benachrichtigungen erstellen
Eine Entrig-Benachrichtigung besteht aus Trigger (Datenbankereignis), Users (Empfänger) und Message (Text).
Direkt: Ein Mitglied tritt bei
Die neue Zeile in group_members enthält die user_id des neuen Mitglieds und die group_id, jedoch nicht die Besitzer-ID. Entrig folgt der Fremdschlüsselkette group_id → groups → created_by → users.id. Das ist Direct: ein Ereignis, ein Empfänger. Eine Bedingung schließt das automatische Hinzufügen aus, das beim Erstellen einer eigenen Gruppe erfolgt.
- Tabelle / Ereignis:
group_members/INSERT - Bedingung:
group_members.user_id≠groups.created_by - Pfad:
group_members.group_id → groups → created_by → users.id - Typ:
new_member; Felder:groups.name,users.name,group_members.group_id
Indirekt über Join-Tabelle: Neue Nachricht
Bei einer Nachricht sollen alle Gruppenmitglieder außer dem Absender benachrichtigt werden. Das Insert liegt in messages, die Empfänger aber in group_members. Entrig nimmt die group_id, sucht passende Mitgliedszeilen und löst jede user_id zu einem registrierten Gerät auf.
- Tabelle / Ereignis:
messages/INSERT - Verbindung: Indirect via Join Table
- Pfad:
messages.group_id → group_members → user_id → users.id - Empfängerfilter:
group_members.user_id≠messages.user_id - Typ:
new_message; Felder:messages.content,users.name,messages.group_id,groups.name
Broadcast: Neue Gruppe
Bei einer neuen Gruppe kann Entrig alle Nutzer in users informieren. Eine Join-Tabelle ist nicht nötig: Das ist Broadcast. Filtere den Ersteller heraus, weil er seine eigene Gruppe bereits kennt.
- Tabelle / Ereignis:
groups/INSERT - Verbindung: Broadcast (alle Nutzer aus
users) - Filter:
users.id≠groups.created_by - Typ:
new_group; Felder:groups.id,groups.name,users.name
Entrig generiert nach dem Anlegen einer Benachrichtigung automatisch Datenbank-Trigger und -Funktion im Supabase-Projekt. Manuelles Deployment ist nicht erforderlich.
Benachrichtigungen im SDK verarbeiten
Alle drei Benachrichtigungen enthalten eine Gruppen-ID. Mit event.type leitest du Nutzer zum richtigen Bildschirm:
Entrig.onNotificationOpened.listen((NotificationEvent event) {
switch (event.type) {
case 'new_member':
// Dialog anzeigen und Chat event.data['group_id'] öffnen
break;
case 'new_message':
// Chat event.data['group_id'] direkt öffnen
break;
case 'new_group':
// Dialog anzeigen und neue Gruppe event.data['id'] öffnen
break;
}
});
event.type entspricht dem im Dashboard festgelegten Wert. event.data enthält die ausgewählten IDs, Namen und Nachrichteninhalte.
Fazit
Direct, Indirect und Broadcast entsprechen den drei grundlegenden Arten, wie Empfänger in einer relationalen Datenbank mit einem Ereignis verknüpft sind. Ist das passende Muster klar, bleibt nur Konfiguration. Dasselbe Prinzip gilt für Bestellungen, Aufgaben und Produktankündigungen.
Siehe die vollständige Flutter-SDK-Referenz und den englischen Überblick Push Notifications for Supabase.