In-app messages
If you have a mobile application for your users, in-app messages are a way of displaying banners to them within the app. The feature uses the same principle as pop-up weblayers displayed to your website visitors.
This article will show you why in-app messages are useful and guide you through their usage from initial creation to evaluation.
Note
In order for in-app messages to work, your app must implement the appropriate Mobile SDK.
Additionally, this feature needs to be enabled in the project by the CSM.
Important
The maximum size of an in-app message is 16 megabytes.
Why use in-app messages?
In-app messages are important because they allow you to communicate directly with your customers while they are using the app. This can effectively provide personalized and timely information to customers, such as order updates, promotional offers, and customer service assistance, thus improving the overall customer experience
Some specific benefits of in-app messaging for e-commerce include:
- Targeted communication: In-app messages can be customized and targeted to specific groups of customers, allowing you to send personalized and relevant messages.
- Improved conversion rates: By providing customers with timely and relevant information, in-app messages can help to increase the likelihood that they will complete a purchase or take the desired action.
- Enhanced customer engagement: In-app messages provide a direct and convenient way for customers to interact with your company, which can help to increase customer engagement and build loyalty.
- Increased customer satisfaction: By providing helpful and timely information, in-app messages can help to improve the overall customer experience and increase satisfaction.
In-app message types
In-app messages can be one of the following types:
- HTML-based (default) - Visual builder - In-app messages of this type have advanced formatting and styling capabilities and are built using a drag-and-drop workflow.
- HTML-based (default) - HTML builder - In-app messages of this type have advanced formatting and styling capabilities and are created using HTML and CSS code.
- Native - In-app messages of this type use the native functionality of Android and iOS for displaying popups. They are restricted to the default system formatting and styling. They must be created from a pre-defined template.
Use in-app messages
To create an in-app message, go to Campaigns > In-app personalization > + New in-app personalization.
You can create a new in-app personalization or select one of the pre-defined templates.
Clicking on Create new in-app personalization will give you the option to use the Visual builder or the HTML builder.
Pre-defined HTML-based templates will open in the Visual builder by default. Click on the three dots (...) in the top right corner to choose between Visual builder and HTML builder.
Pre-defined templates marked Native will open in the Native builder.
Visual builder
The Visual builder uses a drag-and-drop workflow, enabling you to build HTML-based in-app messages without any advanced coding know-how. It consists of two main parts:
- An editing region
- A tabbed pane with elements you can drag onto the editing region or change its settings
The tabbed pane contains 3 main tabs:
- Content
- Rows
- Settings
Make sure the Type dropdown is set to In-app message (the other option is In-app content block).
Settings tab
The Settings tab allows you to configure the global parameters of your in-app message template. For example:
- Content area alignment
- Background color
- Content area background color
- Default font
- Link color
- Language attribute
You can do so by changing sliders or respective input fields.
Rows tab
The elements in the Rows tab allow you to design the structure of your in-app message template. These row elements serve as a frame for the content you will add later.
You can also configure the appearance of these rows. A Row properties pane appears if you click on a row that is already placed in the editing region. You can set additional settings for each individual row, such as background color or padding.
For more information about configuring rows, refer to Rows tab section in the Email editors - Visual builder documentation.
Content tab
After adding the rows to your template, you can fill them with content. The various content elements that you can use are grouped together under the Content tab.
The following content elements are available:
Element | Description |
---|---|
Title | Include a title with H1, H2, and H3 style tags in your in-app message template. |
Paragraph | Write any paragraphs containing the same content formatting, such as font size, font weight, or font family. |
List | Create numbered or bulleted lists. |
Image | Upload and place an image in your in-app message template. |
Button | Add a button to your email 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. |
Spacer | Add a space between other elements in your in-app message template. |
Social | Include buttons that trigger social media activities, such as sharing a web page or liking a product or service. |
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 or watch the BEE demo. |
Menu | Create a customized choice menu, each choice with a specific title and URL link. To learn read the BEE documentation or watch the BEE demo. |
Text | Write free text with rich formatting options. |
You can use Jinja personalization in your templates. To do so, click the { } button at the bottom right of the editing region to open the Jinja editor.
Button behavior
Typically, you specify a URL in the Button properties pane, in the Action section.
When the user clicks on the button, the default behavior is as follows:
- If the URL starts with
http
orhttps
, open the link in the web browser. - In all other cases, let the app process the link (custom scheme or Universal Link).
You can override this default behavior using the data-link
and data-actiontype
attributes.
The data-link
attribute accepts a URL and overrides the URL specified in the Action section.
The data-actiontype
attribute accepts on of the following three values:
value | behavior |
---|---|
browser | Open the button link in the web browser. |
deep-link | Let the app handle the button link. |
close | Close the in-app message without following the button link. |
Note
Android SDK up to version 4.0.1 only recognizes the first button with action type "close" as close button. Any additional buttons with action type "close" will have default link behavior.
iOS SDK as well as Android SDK versions later than 4.0.1 support multiple close buttons.
HTML builder
The HTML builder allows you to 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 will update in real time.
Tip
Test your HTML code on a real device to ensure it will work across devices before starting your campaign.
Always use standard HTML and CSS and avoid using experimental features or proprietary values.
Important
Always 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
,href
and other inline javascript attributes
Button behavior
You can use the data-link
attribute to specify button links.
You can use the data-actiontype
attribute to override the default button behavior.
Refer to Visual builder - Button behavior above for details.
Native builder
If you selected a template marked Native, the Visual builder will have limited options corresponding to the native functionality and default system styling of Android and iOS for displaying popups.
You can edit the design of the in-app message in the right column. There is no limit on the number of characters or words you can use in an in-app message.
You can choose from four 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. They 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 will be cropped and/or stretched based on the chosen template.
(Note: Image URLs cannot 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.
Note
If you want to delete any component, for example, a button or a header, you only need to delete its text. The entire component will be deleted along with it.
To see how the message looks for a specific customer/segment of customers or for Android or iOS devices click on Preview and select the specific segment of customers and the device type.
You can add Buttons to in-app messages to enable your customers to interact with them. These offer you two 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 builder
- Custom fonts are not supported.
- Using images with a resolution higher than full HD (1920x1080 pixels) is not 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 will need to overwrite the default SDK implementation of InAppMessageAlertView.swift.
A/B testing
If you want to A/B test your in-app message, first enable A/B Test in the top right corner. Then, go to the A/B Test tab and set up your test as explained in the A/B testing documentation.
Settings
In-app messages have the same settings as Weblayers plus the following additional settings:
Setting | Description |
---|---|
Show on | Choose on what particular event the message should be shown. For example, if you choose the event 'App load', the message can pop up immediately when the app loads. If you want the message to be shown another time, you can specify any other custom event. Note that the event needs to be tracked directly from the mobile SDK. |
Priority | If multiple messages are supposed to be shown to a particular customer for the same event, they will only see the message with the highest priority (highest number) as only one in-app message can be shown at a time. The message with lower priority would remain in the backlog, and if it eventually becomes the message with the highest priority relative to any remaining messages, then it would be shown to the customer on the specified event. |
Display delay | Specifies the time delay (in milliseconds) between the moments when the message is triggered and when it is actually displayed to the customer. |
Closing timeout | Specifies the time (in milliseconds) after which an in-app message is automatically hidden in case the customer does not interact with it. |
Evaluate
You can compare the conversion and click rates by going to the Evaluate tab, which contains a dashboard with measurements of the effectiveness of the in-app messages 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
- Engagement: 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. Additionally, the following attributes unique to in-app personalizations are tracked:
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 will have an additional attribute error
with an error message as 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. |
"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. |
"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. |
If any of the above errors are tracked frequently, that may indicate e a problem with the implementation of the Mobile SDK in your app.
Use cases
Predictive in-app messaging
You can decide to target only the customers with the highest likelihood of conversion. By using Predictions, you create a customer segment with the highest probability of completing a certain action, such as a purchase or interaction. These segments can thereafter be used in in-app messages.
Connect the desktop experience with your mobile app.
You can personalize the content of your in-app messages for every individual customer. This is possible thanks to the unified single customer view where you can use all the customer data collected through multiple different channels. You could, for example, check which customers have not opened your newsletter with personalized products, and display to them that same selection of products in the app instead.
Note
Due to personalization being enabled, you can also use product recommendation models within in-app messages to show recommended products.
Clone to another project
This feature allows you to clone in-app messages to other projects you have access to. Read more about Cloneable Data Mapping in our Data Manager article.
Updated 19 days ago