In-app messages
Use in-app messages to display banners to users inside your mobile app. They work like pop-up weblayers on websites. This page covers how to choose an editor, create and configure messages, and measure results.
Prerequisites
- Your app must implement the appropriate Mobile SDK.
- A Customer Success Manager (CSM) must enable this feature for your project.
- The maximum in-app message size is 16MB.
NoteTo display native in-app messages built using the rich editor, your app must use Android SDK 4.2.0 or later, or iOS SDK 3.2.0 or later.
Benefits of in-app messages
In-app messages help you reach users while they're in your app with timely, personalized information. Benefits include:
- Targeted communication: Send personalized messages to specific customer groups.
- Improved conversion rates: Provide timely information encouraging users to complete purchases or act.
- Enhanced customer engagement: Offer a direct and convenient way for users to interact with your company.
- Increased customer satisfaction: Deliver useful information that enhances the user experience.
Choose an editor
In-app messages can be one of the following types:
| Editor | Status | What it offers |
|---|---|---|
| HTML builder | HTML-based (default) | Uses custom HTML and CSS. Allows advanced formatting and styling. Requires coding skills. May render inconsistently across devices. |
| Legacy editor | To be deprecated | Uses default Android and iOS system formatting. Requires templates. Limited functionality. |
| Native rich editor | Recommended | Uses Android and iOS native functionality for pop-ups. Provides rich formatting and styling options. Requires templates. Offers the best balance between formatting and styling options and device compatibility. |
| Visual builder | HTML-based | Uses a drag-and-drop workflow. Allows advanced formatting and styling. Can be built from templates or from scratch. May render inconsistently across devices. |
Don't use legacy editor for new messagesWe don't recommend creating any new messages with the legacy editor. If you have existing legacy messages, convert them to the rich editor.
Create an in-app message
-
Go to Campaigns > In-app personalization > + New in-app personalization.
-
Create a new in-app personalization or select a template from your project templates or the predefined templates:
-
Recommended: Create a message in the Native rich editor. Select a template labeled both Native and Rich editor.
-
Create a message from scratch in the Visual builder or the HTML builder. Click Create new in-app personalization.

-
Choose a template without any labels to create a message from the template in the Visual builder.
-
Not recommended: Select a template labeled only Native to create a message from the template in the Native legacy editor.

-
You can create and edit templates in the Asset manager.
Design your message
Native rich editor
If you select a template labeled both Native and Rich editor, the editor has options corresponding to the native functionality of Android and iOS for displaying pop-ups. You can still customize its style attributes to match your branding and app design.
Edit the design of the in-app message in the right column. There's no limit on the number of characters or words you can use.

Choose from 3 native templates that vary in size and screen space: slide-in, modal, full screen.
Customize appearance
Under Appearance, customize the in-app message as a whole, such as: text position (top, bottom), buttons alignment (left, centered, right), margin, padding, background color, and corner radius.
Configure template elements
Each template includes the following elements, which you can enable, disable, and configure individually.
-
Image URL (can't be longer than 190 characters).
-
Appearance: size (auto, full size, lock aspect ratio), margin, corner radius.
-
The SVG image format isnt supported.
-
A single line header for your in-app message.
-
Appearance: Font family, font size, line height, padding, font color, format (bold/italic), align (left, center, right).
-
A customizable block of text that can span multiple lines.
-
Appearance: Font family, font size, line height, padding, font color, format (bold/italic), align (left, center, right).
-
Button image URL.
-
Appearance: Distance from top, distance from right, background color, close button color.
-
The SVG image format is currently not supported.
-
Include up to three CTA buttons.
-
Button text.
-
Button type:
- Deep link: navigates the customer from the in-app message to a specified link
- Cancel: navigates the customer away from the in-app message, which quits it
-
Appearance: Position (hug text, fill), button background, corner radius, margin, border, font family, font size, line height, padding, font color, format (bold/italic), align (left, center, right).
Preview the message
To preview the message for a specific customer or segment, click Preview and use the filter.

Visual builder
Build HTML-based in-app messages with drag and drop, with no advanced coding know-how. The builder has two main parts:
- An editing region.
- A tabbed pane with elements you can drag onto the editing region and settings you can change.
The tabbed pane has 3 main tabs: content, rows, and settings.
Make sure the Type dropdown is set to In-app message (the other option is In-app content block).

Settings tab
Use the Settings tab to configure global parameters for your in-app message template, such as: content area alignment, background color, content area background color, default font, link color, and language attribute.
Change them with the sliders or input fields.
Rows tab
Use the Rows tab to design the structure of your in-app message template. Rows frame the content you add later.
To configure a row's appearance, such as background color or padding, click a row in the editing region to open the Row properties pane.
For more information about configuring rows, see the Rows tab section in the Email editors - Visual builder documentation.
Content tab
After adding rows, fill them with the content elements under the Content tab.
The following content elements are available.
| Element | Description |
|---|---|
| Button | Add a button to your in-app message template. This button can be assigned the following actions: opening a web page, sending an email, calling, or sending an SMS. |
| Divider | Place a horizontal line or an invisible divider between other content components. |
| Dynamic content | Insert an HTML block you created before in the Asset Manager. For example, a predefined header or footer. You can also add any HTML block by reference. To do so, click on Configure block and then select any of the existing HTML blocks. |
| HTML | Include custom HTML code. |
| Icons | Add icons or small images. After dropping the Icons block, click on Add new icon and either choose to customize it in the editor in Apply effects & more or upload a ready-made icon after clicking on Change image. You can use the icon in the text. For more information, read BEE editor documentation. |
| Image | Upload and place an image in your in-app message template. |
| List | Create numbered or bulleted lists. |
| Menu | Create a customized choice menu, each choice with a specific title and URL link. To learn read the BEE documentation. |
| Paragraph | Write any paragraphs containing the same content formatting, such as font size, font weight, or font family. |
| Social | Include buttons that trigger social media activities, such as sharing a web page or liking a product or service. |
| Spacer | Add a space between other elements in your in-app message template. |
| Text | Write free text with rich formatting options. |
| Title | Include a title with H1, H2, and H3 style tags in your in-app message template. |
To use Jinja personalization in your templates, click the button at the bottom right of the editing region to open the Jinja editor.
Button behavior
Specify a URL in the Button properties pane, in the Action section. When the user clicks the button, the default behavior is:
- If the URL starts with
httporhttps, open the link in the web browser. - In all other cases, let the app process the link (custom scheme or Universal Link).
Override this default behavior using the data-link and data-actiontype attributes.

The data-link attribute accepts a URL and overrides the URL in the Action section.
The data-actiontype attribute accepts one of these three values:
| Value | Behavior |
|---|---|
browser | Open the button link in the web browser. |
close | Close the in-app message without following the button link. |
deep-link | Let the app handle the button link. |
Custom close buttons need a URL. In the Visual builder, enter a URL in the Action section even if the button should only close the in-app message. If you leave the URL empty, the button becomes inactive and the app shows a default close (x) button instead. You can use any placeholder URL, because the link isn't opened when the close action is selected.
NoteAndroid SDK 4.0.1 and earlier recognizes only the first button with the
closeaction as a close button. Additionalclosebuttons use the default link behavior.iOS SDK and Android SDK versions later than 4.0.1 support multiple close buttons.
HTML builder
Create an in-app personalization by writing HTML and CSS code.
Make sure the Type dropdown is set to In-app message (the other option is In-app content block).
Enter HTML and CSS code in the editor on the right. The preview on the left updates in real time.

Test your HTML code on a real device before starting your campaign to make sure it works across devices.
ImportantAlways use standard HTML and CSS. Avoid using experimental features or proprietary values. Forbidden HTML tags and attributes:
- Tags:
head,script,link,iframe,meta,title,body- Attributes:
onclick,hrefand other inline javascript attributes
Button behavior in HTML builder
Use the data-link attribute to specify button links. Use the data-actiontype attribute to override the default button behavior.

Refer to Visual builder - Button behavior for details.
Native legacy editor
The native legacy editor will be deprecated and phased out. For new messages, use the Native rich editor, and convert your existing legacy native messages.
If you selected a template labeled Native but not Rich editor, the editor has limited options corresponding to the native functionality and default system styling of Android and iOS for displaying popups.
Edit the design of the in-app message in the right column. There's no limit on the number of characters or words you can use.

You can choose from 4 native templates:
- Alert: Includes Title, Text, and Buttons.
- Slide-in: Includes Title, Text, Image (left/right), Buttons, and Style. The image is stretched top to bottom, maintaining the aspect ratio (cropped left and right, centered).
- Modal: Includes Title, Text, Image, Buttons, and Style. The image is stretched horizontally, maintaining aspect ratio, and cropped and centered vertically when the modal's total height reaches 80% of the screen height.
- Fullscreen: Includes Title, Text, Image, Buttons, and Style. The image is stretched horizontally, maintaining aspect ratio, and cropped and centered vertically.
Each template includes a unique set of elements you can combine to achieve your desired result. Templates also vary in size and screen space usage:
- Title: A single line header for your In-App Message, with customizable font size and color.
- Text: A customizable block of text that can span multiple lines, with adjustable font size and color.
- Image: You can include an image in all templates except Alert. The image is cropped and/or stretched based on the chosen template. Image URLs can't be longer than 190 characters.
- Buttons: You can include up to two CTA buttons. These buttons take the user to a web page in their browser (URL) or to a specific page in the app (deep link) when clicked. The text, text color, and button color are customizable.
- Style: You can also declare limited CSS styling for the template, including the background color and x-close color for the In-App close icon.
NoteTo delete a component, such as a button or a header, delete its text. The entire component is deleted with it.
To preview the message for a specific customer or segment, or for Android or iOS devices, click Preview and select the segment and device type.
Add Buttons so customers can interact with the message. You have 2 choices:
- Deep link: Navigates your customer from the in-app message onto a specified link.
- Cancel: Navigates your customer away from the in-app message, thus quitting it.
Limitations of the native legacy editor
- Custom fonts aren't supported.
- Using images with a resolution higher than full HD (1920x1080 pixels) isn't recommended due to potential rendering timeouts and increased traffic consumption.
- PNG is the preferred image format.
- We recommend keeping the combined character count of the Title and Text under 500.
- Alert messages on iOS include a default cancellation button. To change it, you'll need to overwrite the default SDK implementation of
InAppMessageAlertView.swift.
Convert to rich editor
If you previously created an in-app message in the native legacy editor, convert it to the native rich editor using the Convert to new version link:

This creates a duplicate of the in-app message that opens in the rich editor.
Configure and test
Settings
In-app messages have the same settings as weblayers plus the following additional settings:
| Setting | Description |
|---|---|
| Closing timeout | Specifies the time (in milliseconds) after which an in-app message is automatically hidden if the customer doesn't interact with it. |
| Display delay | Specifies the time delay (in milliseconds) between when the message is triggered and when it's displayed to the customer. |
| Priority | If multiple messages are supposed to be shown to a customer for the same event, they only see the message with the highest priority (highest number), because only one in-app message can be shown at a time. Lower-priority messages remain in the backlog and are shown on the specified event once they become the highest priority among the remaining messages. |
| Show on | Choose the event that triggers the message. For example, if you choose the event 'App load', the message can pop up immediately when the app loads. To show the message another time, specify any other custom event. The event needs to be tracked directly from the mobile SDK. |
| Target SDK | Only available for in-app messages built in the native legacy editor. Select one of the following two options: Only older versions: Select this option to deliver the in-app message only to app instances running older SDK versions that don't support in-app messages built using the native rich editor. This option allows you to create separate campaigns with and without rich styling. All versions: Select this option to deliver the legacy native in-app message to all app instances regardless of whether they run an SDK that supports native in-app messages using rich styling. |
A/B testing
- Enable A/B Test in the top right corner.
- Configure the test in the A/B Test tab as explained in the A/B testing documentation.
Measure results
Evaluate
Compare conversion and click rates in the Evaluate tab, which contains a dashboard measuring the effectiveness of the in-app messages you sent.
Definitions:
- Reach: the in-app message was shown to the customer
- Interaction: the customer interacted with the in-app message (excluding close actions)
- Close: the customer closed the in-app message
- Marketing: the customer had a positive engagement in the 24 hours since they first interacted with the in-app message
Tracking
Each in-app message shown to a customer is tracked as a banner event with the same attributes as in any weblayer. These attributes are unique to in-app personalizations:
| Attribute | Description | Example |
|---|---|---|
| app_version | The version of the mobile app. | 2.21.3 |
| device_model | The device model used. | iPhone |
| device_type | The type of device used. | mobile |
| os_name | The name of the operating system used. | iOS |
| os_version | The version of the operating system used. | 17.2 |
| platform | The platform used. | iOS |
| sdk | The name of the mobile SDK used by the app. | Exponea iOS SDK |
| sdk_version | The version of the mobile SDK used by the app. | 2.21.3 |
| type | The type of the banner shown ('in-app message' or 'in-app content block'). | in-app message |
Error messages
If an error occurs while delivering an in-app message to a customer's device, the banner event has an additional error attribute with an error message as its value.
You may encounter the following error messages:
| Error message | Description |
|---|---|
| Another customer login while resource load | The customer was logged out, and a different customer logged in while the resources to display the in-app message were being loaded. |
| Image '${payload.imageUrl}' not loaded successfully | The image couldn't be loaded into the slide-in component. |
| Invalid HTML or empty | The provided HTML is either incorrect or missing. Includes cases where: - An image couldn't be processed or converted to Base64. - The HTML was determined invalid. |
| Resources have not been preloaded | The required images weren't preloaded before rendering. |
| Unable to present message | The app failed to create a View to display the in-app message. |
Frequent errors may indicate a problem with the Mobile SDK implementation in your app.
Use cases
Predictive in-app messaging
Target only the customers most likely to convert. Use Predictions to create a customer segment with the highest probability of completing a certain action, such as a purchase or interaction. Then use that segment in in-app messages.
Connect the desktop experience with your mobile app
Personalize in-app messages for each customer using the unified single customer view, which brings together data collected through multiple channels. For example, find customers who haven't opened your newsletter with personalized products, and show that same product selection in the app instead.
NoteBecause personalization is enabled, you can also use product recommendation models within in-app messages to show recommended products.
Best practices
- Use an image file format supported by the target platform or platforms.
- GIF, JPEG, PNG are natively supported by both Android and iOS.
- WebP and HEIC are newer formats that aren't supported on some Android and iOS versions.
- Use an appropriate image size and aspect ratio.
- Oversized images are scaled down and display normally, but they use more bandwidth and may delay delivery.
- Images whose aspect ratio doesn't match the layout and design of the in-app message are also scaled down, with the same bandwidth and delivery costs.
- Some common screen resolutions for reference:
- 1284×2778 – Found on high-end iOS devices like the iPhone 14 Pro Max.
- 1440×3200 – Found on premium Android devices like the Samsung Galaxy S series.
- The Mobile SDKs include the device and OS used in the tracked event properties. You can use this data to analyze which devices and OS versions your customers use.
Clone to another project
Clone in-app messages to other projects you have access to. For details on Cloneable Data Mapping, see the Data Manager article.
Limits
In-app messages and content blocks are subject to a yearly serving limit, based on your contracted billable profiles. It's designed to cover the vast majority of use cases.
If you use product recommendations in in-app messages, those recommendation serves also count toward your yearly recommendation limit.
Check your current usage in the usage dashboard. If you're approaching the limit, contact your Account Manager to review your options.
Updated 3 days ago

