In-app messages
Designed modals, bottom sheets, banners, full-screen takeovers and carousels — targeted, personalised and A/B-tested on the server, drawn natively by the SDK.
Design a message in the console's designer — images, badges, headings, text, buttons, spacers, dividers and carousels, with solid, gradient or image backgrounds, a close button, entrance animation, auto-dismiss and right-to-left layout — then choose its audience, trigger and optional A/B test. The Flutter SDK fetches eligible messages and draws them natively.
Enable it
await Nexus.init(const NexusConfig(apiKey: 'nxs_live_xxx', inAppEnabled: true));The overlay mounts itself (autoShowOverlay, default true). Messages with a
session start trigger appear on launch; event triggers fire when you track
the event.
Handle button taps
Impressions and clicks are tracked for you, event buttons are tracked as
events, and copy buttons copy to the clipboard. The SDK never opens links
itself — route them:
Nexus.instance.inApp.onAction = (a) {
// a.messageId, a.buttonId, a.action ('dismiss' | 'url' | 'event' | 'copy'), a.url, a.event, a.value
if (a.action == 'url' && a.url != null) launchUrl(Uri.parse(a.url!));
};Targeting & personalisation
Each fetch sends who this is — the identify() person (name, email, phone,
traits), platform, OS, app version, language — plus anything you add:
await Nexus.instance.inApp.setProperties({'plan': 'pro', 'coupon': 'SARA20'});- The console's Audience step matches
user.*,device.*,app.versionandtrait.<key>with operators includinginand version comparisons. - Copy can use
{{first_name}}— with a fallback:{{first_name | there}}. Values inserted into links are URL-encoded, so data cannot change a destination.
A/B tests
Add 2–4 variants with weights and a goal event. Each install is assigned one variant and keeps it (signing in does not switch it). The report shows exposure, conversions within the goal window and lift per variant.
Frequency & layouts
- Layouts:
modal,bottom_sheet,banner_top,banner_bottom,fullscreen. maxDisplaysper device, and optionally once per session; start / end dates.
Testing
Send test shows a message on a chosen device the next time the app fetches — on open or on returning to the foreground. Devices you've sent a test to become test devices; while their app is open with realtime connected, tests appear instantly. Test impressions are never counted or billed.
Custom presentation
const NexusConfig(apiKey: '…', inAppEnabled: true, inAppAutoShow: false);
Nexus.instance.inApp.show(message); // present yourselfFor a fully custom look set autoShowOverlay: false and mount
NexusInAppOverlay(messageBuilder: …) in MaterialApp.builder; the builder gets
the parsed message.design (blocks, frame, colours).
Server-driven UIs
Other SDKs can fetch eligible messages and report events — for web or server-rendered surfaces:
const messages = await nexus.inApp.active({ distinctId: 'u_1' });
await nexus.inApp.impression('m1', { distinctId: 'u_1' });
await nexus.inApp.click('m1', 'cta', { distinctId: 'u_1' });Reference
Push notifications
Transactional and campaign push across FCM, APNs and Web Push — with tags, segments, localization, rich media, action buttons and A/B tests.
Live Activities
A live, updating view of an in-progress order, ride or delivery — iOS Lock Screen and Dynamic Island, Android 16 Live Updates — driven from your backend.
