Supported on: iOS SDK
1.0.61+How It Works
- You create an in-app message in the Console with content, layout, and trigger rules.
- The message definition is synced to the SDK via the config bundle.
- On every
track()call (including auto-tracked events), the SDK evaluates all active message triggers. - If conditions match, the message is presented automatically.
In-app messages are fully server-driven. You can change the message content, trigger rules, and audience without an app update.
Message Types
| Type | Description |
|---|---|
banner | Small bar at the top or bottom of the screen |
modal | Centered overlay with a dimmed background |
fullscreen | Full-screen takeover |
tooltip | Small popup anchored to a UI element |
Triggers
Messages trigger based on events and optional conditions, configured in the Console:- Event match — e.g., trigger on
workout_completed - Property conditions — e.g.,
duration >= 30 - Frequency —
once,once_per_session, orevery_time - Delay — wait N seconds after the trigger event before showing
Module Access
Module Methods
| Method | Signature | Description |
|---|---|---|
suppressDisplay | suppressDisplay(_ suppress: Bool) | Suppress or resume in-app messages |
setDelegate | setDelegate(_ delegate: AppDNAInAppMessageDelegate?) | Set a delegate for message callbacks |
Suppressing Messages
Suppress messages during critical flows like checkout or onboarding to avoid interrupting the user:AppDNAInAppMessageDelegate
All 4 methods on this delegate fire fromMessageManager for every in-app message lifecycle event. Register your delegate via AppDNA.inAppMessages.setDelegate(...).
shouldShowMessage is a true veto. The SDK calls it BEFORE constructing the view or tracking the in_app_message_shown analytics event. If you return false, the message is suppressed entirely — no view, no analytics. The protocol’s default extension returns true, so hosts that don’t implement this method continue to see all messages.
Implement the delegate to respond to message lifecycle events:
Example Implementation
Rich Media
In-app messages support rich media content configured in the Console:- Lottie animations — animated hero images or backgrounds
- Video — inline video with optional autoplay and looping
- Icon buttons — CTA buttons with icon references (Lucide, SF Symbols, Material, or emoji)
- Haptic feedback — triggered on message display or button taps
- Particle effects — confetti, sparkles, or other effects on message actions
- Blur backdrop — glassmorphism-style blurred background for modals
Auto-Tracked Events
| Event | Trigger |
|---|---|
message_presented | An in-app message is displayed |
message_action | User taps an action in the message |
message_dismissed | Message is closed |
Full Example
In-app messages are created in the Console under Engagement > In-App Messages. Design the message, set trigger rules, and publish. The SDK handles everything else.

