entrig 0.0.1-beta
entrig: ^0.0.1-beta copied to clipboard
Entrig Plugin
Entrig #
No-code Push Notifications for Supabase
Send push notifications to your Flutter app, triggered by database events. #
Minimum Requirements #
Flutter & Dart #
- Flutter: 3.3.0 or higher
- Dart: 3.8.1 or higher
Platform Requirements #
iOS
- Minimum iOS version: 13.0
Android
- Minimum SDK: 23
Prerequisites #
1. Entrig Account #
- Sign up at entrig.com
2. Connect Supabase Project #
- Create a project at supabase.com
- Note your project URL and anon key
3. Push Notification Services #
Configure platform-specific push services:
Firebase Cloud Messaging (FCM) - For Android
- Create a Firebase project at console.firebase.google.com
- Add your Android app to the project
- Download
google-services.json(Project Settings -> General -> Your apps -> SDK setup and configuration) - Download Service Account JSON file (Project Settings -> Service Accounts -> Firebase Admin SDK -> Generate new private key)
- Upload both
google-services.jsonandService Account JSONto Entrig dashboard
Apple Push Notification Service (APNs) - For iOS
- Enroll in Apple Developer Program
- Create an APNs Authentication Key in Apple Developer portal (Certificates, Identifiers & Profiles -> Keys -> Create a key -> Enable Apple Push Notifications service)
- Download the
.p8key file - Upload the .p8 file to Entrig dashboard along with your Team ID (found in Apple Developer Membership) and Key ID (shown when you create the key)
Installation #
Add Entrig to your pubspec.yaml:
dependencies:
entrig: ^0.0.1
supabase_flutter: ^2.10.3 # Required peer dependency
Run:
flutter pub get
Platform Setup #
Android #
No setup required for Android. We'll take care of it.
iOS #
-
Enable Push Notifications capability
In Xcode:
- Open
ios/Runner.xcworkspace - Select Runner target → Signing & Capabilities
- Click
+ Capability→ Push Notifications - Click
+ Capability→ Background Modes -> EnableRemote notificationsandBackground fetch
- Open
-
Update AppDelegate.swift
Choose one of the following options:
Option A: Automatic setup (Recommended)
Run this command in your project root:
dart run entrig:setup iosOption B: Manual setup
Update your
ios/Runner/AppDelegate.swiftfile:import Flutter import UIKit import entrig import UserNotifications @main @objc class AppDelegate: FlutterAppDelegate { override func application( _ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? ) -> Bool { GeneratedPluginRegistrant.register(with: self) // Setup Entrig notification handling UNUserNotificationCenter.current().delegate = self EntrigPlugin.checkLaunchNotification(launchOptions) return super.application(application, didFinishLaunchingWithOptions: launchOptions) } override func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { EntrigPlugin.didRegisterForRemoteNotifications(deviceToken: deviceToken) } override func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) { EntrigPlugin.didFailToRegisterForRemoteNotifications(error: error) } // MARK: - UNUserNotificationCenterDelegate override func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) { EntrigPlugin.willPresentNotification(notification) completionHandler([]) } override func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) { EntrigPlugin.didReceiveNotification(response) completionHandler() } }
Usage #
Initialize #
Initialize Entrig and Supabase in your main():
import 'package:flutter/material.dart';
import 'package:entrig/entrig.dart';
import 'package:supabase_flutter/supabase_flutter.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// Initialize Supabase
await Supabase.initialize(
url: 'YOUR_SUPABASE_URL',
anonKey: 'YOUR_SUPABASE_ANON_KEY',
);
// Initialize Entrig (Get API Key from Entrig Settings)
await Entrig.init(apiKey: 'YOUR_ENTRIG_API_KEY');
runApp(MyApp());
}
Register Device #
Register the current device to receive notifications for a user:
final userId = Supabase.instance.client.auth.currentUser?.id;
if (userId != null) {
// userId is required to find the user when sending push notifications
await Entrig.register(userId: userId);
}
Note:
register()automatically handles permission requests, so you don't need to callrequestPermission()separately in most cases.
Request Permission (Optional) #
For custom permission handling, you can manually request notification permissions:
final granted = await Entrig.requestPermission();
if (granted) {
print('Notification permission granted');
}
Listen to Notifications #
Foreground notifications (when app is open):
Entrig.foregroundNotifications.listen((event) {
print('Title: ${event.title}');
print('Body: ${event.body}');
print('Data: ${event.data}');
});
Notification tap (when user taps a notification when app is not in foreground):
Entrig.onNotificationOpened.listen((event) {
print('User tapped notification');
print('Data: ${event.data}');
// Navigate to a specific screen based on event.data
});
Unregister Device #
When user logs out or no longer wants notifications:
await Entrig.unregister();
API Reference #
Methods #
Entrig.init({required String apiKey})
- Initialize Entrig with your API key (get API key from settings in Entrig dashboard)
- Call once during app startup
Entrig.register({required String userId})
- Register device for a specific user
- Automatically handles permission requests
- Returns
Future<String?>- device token - Call after user logs in
Entrig.requestPermission()
- Manually request notification permissions (optional)
- Returns
Future<bool>- true if granted - Use only for custom permission handling flows
Entrig.unregister()
- Unregister the current device
- Returns
Future<bool>- true if successful - Call when user logs out
Streams #
Entrig.foregroundNotifications
- Stream of notifications received while app is in foreground
- Emits
NotificationEventobjects
Entrig.onNotificationOpened
- Stream of notification tap events
- Emits
NotificationEventobjects
NotificationEvent #
class NotificationEvent {
final String? title;
final String? body;
final Map<String, dynamic>? data;
}
Creating Notifications #
Create notification triggers in the Entrig dashboard at entrig.com/dashboard. When you create a notification, Entrig automatically sets up the necessary database function and trigger in your Supabase project.
Notification Configuration #
Step 1: Configure Trigger
-
Select Table: Choose the table where the event occurs (e.g.,
messages,orders) -
Select Event: Choose when to trigger the notification:
INSERT- When new rows are createdUPDATE- When existing rows are modifiedDELETE- When rows are deleted
-
Select User Identifier: Choose how to identify recipients:
Single User Mode:
- Select a field that contains the user ID (e.g.,
user_id,recipient_id) - Supports foreign key navigation (e.g.,
order.customer.user_id)
Multi-User Mode (Join Table):
- Use when sending to multiple users from one database event
- Configure:
- Lookup Field: Field linking to the join table (e.g.,
room_id) - Join Table: Table containing recipient records (e.g.,
room_members) - Matching Field: Field in join table matching lookup field (e.g.,
room_id) - User ID Field: Field containing user IDs (e.g.,
user_id)
- Lookup Field: Field linking to the join table (e.g.,
- Select a field that contains the user ID (e.g.,
-
Event Conditions (Optional): Filter when notifications send based on event data
- Example: Only send when
status = 'completed' - Supports multiple conditions with AND/OR logic
- Example: Only send when
-
Recipient Filters (Optional, Multi-User only): Filter which recipients receive the notification
- Example: Only send to users where
role = 'admin'
- Example: Only send to users where
Step 2: Compose Notification
-
Notification Type (Optional): Custom identifier for client-side handling
- Example:
new_message,order_update,friend_request - Use in your app to handle different notification types
- Example:
-
Payload Data (Optional): Select fields to include as placeholders
- Click field names to insert as
{{table.column}}placeholders - Example:
{{messages.content}},{{orders.total}}
- Click field names to insert as
-
Title & Body: Write notification text with placeholders
- Example Title:
New message from {{messages.sender_name}} - Example Body:
{{messages.content}}
- Example Title:
What Happens Behind the Scenes #
When you create a notification, Entrig automatically:
- Enables
pg_netextension in your Supabase project - Creates a PostgreSQL function to send HTTP requests to Entrig
- Sets up a database trigger on your selected table
- Configures webhook endpoint for your notification
No manual SQL or backend code required!
Example Use Cases #
Single User Notification:
- Table:
orders, Event:INSERT - User ID:
customer_id - Title:
Order Confirmed! - Body:
Your order #{{orders.id}} has been received
Multi-User Notification (Group Chat):
- Table:
messages, Event:INSERT - Lookup Field:
room_id - Join Table:
room_members - Matching Field in Join Table:
room_id - User ID:
user_id - Title:
New message in {{messages.room_name}} - Body:
{{messages.sender_name}}: {{messages.content}}
Support #
- Email: team@entrig.com
License #
MIT License