An In-App message is a card or a bar shown inside your app while a person is using it. The In-App screens of the dashboard let you write the message, choose who sees it and when, and read how it performed.
A message is only displayed by an SDK that implements the In-App contract: the dashboard authors and targets the message, and the SDK shows it and reports what happened. See the In-App Messages Contract for what an SDK does, and In-App Messages (REST) to manage the same messages from your backend with a REST key.
Open the In-App screens
There are two ways in, both inside an App:
- In-App, under Messages in the sidebar, opens the list of the App's messages. + New In-App starts a new message from there.
- The In-App card in the New notification drawer ("Messages shown inside your app") opens the editor for a new message directly.
Start from a template
Start from a template, in the list header and in the empty list, opens a gallery of five starting points: Welcome message, New feature announcement, App rating request, Push permission prompt and Promotional offer. Each card shows a preview. Choosing one opens the editor pre-filled with its name, title, body and button, in the language of the dashboard.
- Nothing is created until you save. Everything the template fills in can be edited.
- The button destinations come empty. Fill the URL or deep link before you save, for example your store link in App rating request. Push permission prompt needs none: its button uses the Push permission prompt action.
- Templates are not stored per App: they are part of the dashboard, so a new release can add or improve them without touching your messages.
Create an In-App message
Open the editor with + New In-App.
In Details, enter a Name (up to 120 characters; only your team sees it) and choose the Layout: Top (a bar at the top of the screen), Center (a card over a dimmed background, the default), Bottom (a bar at the bottom) or Full screen (fills the screen, buttons stay at the bottom). Top and Bottom do not dim the background.
In Content, enter a Title, a Body, or both. Plain text only: the title allows up to 100 characters and the body up to 500.
Optionally add an Image with Choose image. It is shown above the text in Center and Full screen, and as a small square in Top and Bottom. Turn on Open a link when the image is tapped to make the image tappable: pick URL or Deep link and fill the destination, with the same rules as a button. Removing the image removes its tap action too.
Optionally add up to 2 Buttons. Each has a Label (up to 30 characters) and an action, URL (an
https://address), Deep link (an app link such asmyapp://screen; plainhttp://is not allowed) or Push permission prompt. The first button is the main action.Push permission prompt asks the user to allow notifications and needs no destination. A user who has not decided sees the system prompt; a user who denied is sent to the app's notification settings. The message is not shown to devices that already receive push, nor to devices on an SDK version that does not support the action yet, so it can reach fewer devices than the audience you pick. The editor shows the minimum SDK version once the first supporting release is out. The image tap action does not offer it.
Optionally adjust the Style and the Behavior (below).
Choose the audience, schedule and frequency as described below.
Click Save draft. The message is created as a Draft and the editor stays open on it.
The preview on the right follows your edits, with an iOS and an Android view. A draft can be incomplete, but a message needs a title or a body before it can be activated.
Style the message
Style is optional. A field left empty keeps the default look of the SDK.
- Background color, Text color, Button color and Button text color: type a hex value such as
#102030or pick it with the color swatch. Only six-digit hex values are accepted, with no transparency. - Text alignment: Left, Center or Right.
- Margin around the message: applies to Top, Bottom and Full screen. Center always keeps space around the card.
- Reset style clears every field.
When the text color on the background, or the button text on the button, has a contrast below 4.5:1, the editor shows a warning with the ratio. It never blocks saving: you decide. The preview applies your colors, but the real rendering is done by each platform's SDK.
Choose when it appears and how long it stays
Behavior has two choices:
- Show when: At session start (the default) shows the message when the app opens a session. When the app reports an event holds the message until your app reports that event with the SDK's
trackEvent. Type the Event name (lowercase letters, numbers, dots, dashes and underscores, up to 64 characters); the field suggests the names already used by this App's messages. Event names are matched inside the app and are never sent to the server. Audience, schedule and frequency are still decided by the server. - Dismiss: Show until dismissed (the default) or Dismiss after N seconds (1 to 300). A close control is always shown, so a person can still close the message before the timer ends.
An SDK shows one message at a time, and each message at most once per session.
Choose who sees it
Audience decides which devices can see the message.
- Show to: the segments that can see the message. A device sees it if it is in at least one of them; with none selected the message is for Everyone. Add segments with Add segment.
- Do not show to: segments whose devices never see the message, even if they are also in Show to. A segment cannot be in both lists, and each list holds up to 10.
- These are the same segments you use for push notifications. Create and edit them in Segments (Manage segments opens it). A segment that was deleted shows as "Unavailable segment"; remove it from the list.
- Platforms: iOS and Android. With both selected the message is shown on every platform. At least one stays selected.
Below the choices, the editor shows "About N devices": an estimate of the devices the audience matches. It counts every matching device, whether or not it allowed push notifications, because In-App messages do not depend on push permission. If no device matches yet, the editor warns you, but you can still save and activate. Nobody sees the message until a device matches.
Schedule it
Schedule is optional. Both fields are in the App's timezone, which is shown under the section title and set in the App's analytics settings.
- Start: when the message begins to be shown. Empty means "Starts as soon as it is active".
- End: when it stops. Empty means "Runs until paused".
Clear empties a field. The end must be after the start.
Control how often it appears
Frequency is how often one device can see the message. It counts the impressions the device reported for this message.
| Mode | What it does |
|---|---|
| Once | Shown once per device. |
| N times | Shown up to the number you set in Impressions per device. |
| Interval | Shown again only after at least the time you set in Wait at least, in minutes, hours or days. |
Activate, pause and end it
Saving a draft does not show it to anyone. A message reaches devices only while it is active.
| Status | Meaning |
|---|---|
| Draft | Saved but never activated. Not shown. |
| Active | Activated and inside its schedule window. Shown to matching devices. |
| Scheduled | Activated, but the Start date has not arrived yet. Shown once it does. |
| Paused | Stopped by you. Not shown. |
| Completed | Activated, but the End date has passed. Not shown. |
Activated messages move between Scheduled, Active and Completed by themselves as the Start and End dates (in the App's timezone) pass. Pausing is the only manual stop.
What the header buttons do:
- Save draft (new message) creates the draft. Save (existing message) stores your edits and is disabled until something changes. Editing an active message affects what devices fetch from then on; events already recorded stay with the message.
- Activate (on a Draft) and Resume (on a Paused message) make the message live. They are disabled with a reason when there are unsaved changes ("Save your changes first") or when the App is at its plan limit ("Plan limit reached").
- Pause (on an Active or Scheduled message) stops it. Its metrics are kept.
- A Completed message has no Activate, Resume or Pause. To run it again, change End to a later date (or clear it) and save.
- More actions > Delete opens a confirmation. Delete message removes it from the list and stops showing it. This can't be undone.
Changes reach devices on their next fetch, which can take up to about a minute after the change. The contract page has the exact rules.
Plan limits
The plan limits how many messages can be active at once in each App: 2 on Free, 5 on Start, 8 on Pro and 20 on Business (see Usage & Billing).
- Draft, Paused and Completed messages do not count.
- Scheduled messages count, even before their start date.
- Reactivating a Completed message by changing its end date counts too, so that save is blocked while the App is at its limit.
When the App is at its limit, the list shows a notice, for example "Your plan allows 2 active in-app messages and all of them are in use.". An account owner gets an Upgrade button that opens the Usage screen; other roles are told to ask the account owner. The same notice appears in the editor when an activation is blocked. To free a slot, pause or delete an active message.
A plan downgrade is not blocked by active messages. When the new plan takes effect, an App with more active messages than the plan allows has the extra ones paused automatically. The oldest messages (by creation date) stay active. The pause can take a few minutes to apply. To choose which ones stay active, pause or delete messages yourself before the change takes effect. Paused messages keep their content and metrics and can be reactivated while the App is under its limit. See Usage & Billing for how plan changes work.
The message list
The list shows the App's messages newest first, with these columns: Name, Status, Created, Impressions and CTR. CTR shows N/A until the message has been seen.
- Filter by All, Active, Paused, Scheduled, Completed or Drafts, and search by name.
- A tile shows "N of M active": the App's active messages against its plan limit.
- Click a row to open the message.
Read the metrics
Open a saved message and choose the Metrics tab (Edit goes back to the form). The range picker sets the period (last 7, 14, 30 or 90 days, or a custom range), and the days follow the App's timezone, which is shown next to the dates. The i next to a metric shows its definition.
Metrics come from events that devices report. A message must be shown by an SDK that implements the In-App contract, and numbers can lag behind what people did when a device is offline, because its events arrive once it reconnects. For how each metric is computed from events, see What the metrics mean.
| Metric | Definition |
|---|---|
| Impressions | Number of times the message was displayed. A device that sees it twice counts twice. |
| Reach | Distinct devices that saw the message at least once. |
| Reach rate | Reach divided by the devices eligible now. Eligible devices are a point-in-time estimate. |
| CTR | Distinct devices that clicked a button divided by reach. |
| Dismiss rate | Distinct devices that closed the message themselves (close button, swipe or tap outside) without clicking, divided by reach. A message closed by its timer is not counted here. |
| Auto-dismissed | Distinct devices that only saw the message close on its timer, with no manual close and no click. A count, not a rate. |
| Avg impressions per device | Impressions divided by reach. |
| Eligible now | Devices that match the audience today. A point-in-time estimate, not a count over the range. |
A rate shows a dash when its denominator is zero, for example CTR before anyone has seen the message.
Below the tiles:
- Impressions and clicks per day: a daily chart for the range. Clicks is the number of button clicks, and a device that clicks twice counts twice.
- Button clicks: for each button, Clicks and Unique clickers (distinct devices that clicked at least once). When the message has a tap action on its image, an Image row comes first with the taps on the image. A message without buttons or an image action has no button clicks to report.
- Platform, App version and Country: the distinct devices that saw the message, grouped. Smaller groups are folded into Other, and devices without a value appear as Unknown.
Because reach covers the whole range while Eligible now is a snapshot, reach can be higher than the eligible count, and the reach rate reflects today's audience rather than the audience at the time.
When a range has no impressions yet, the tab says so; try a longer range once devices have seen the message.