In-app overview
Get started with OneSignal In-App Messages: how to set up, design, trigger, and test in-app campaigns to engage your mobile users effectively.
In-app message examples
In-app messages (IAM) are customizable, targeted messages that display within your mobile app.
What you can do with OneSignal In-App Messages
- Send marketing campaigns from the Dashboard
- Include them in multi-channel flows via Journeys
- Target groups of users with Segments
- Personalize messages with user data
- Integrate with CRMs & tools like HubSpot, Mixpanel, Amplitude, Zapier, and more
In-app setup
Mobile SDK Setup
Add OneSignal to your mobile app codebase.
In-app Message SDK methods
Developers: Access trigger, click handler, and lifecycle APIs.
In-app triggers
Control when messages appear based on user behavior or app activity.
In-app click actions
Define what happens when users interact with your message.
In-app design
Design with drag and drop
Use our visual editor to quickly build messages.
Design with HTML
Full control for developers to customize messages.
Pre-built HTML templates
Start from tested layouts and campaigns.
In-app JS APIs for HTML
Enable advanced behaviors in HTML messages.
Features & use cases
Message Personalization
Add dynamic content to personalize messages for each user.
Multi-Language Messaging
Localize your content for global audiences.
Target outdated app versions
Prompt users to update their app.
App store review prompts
Increase your ratings with timely review requests.
Create user surveys
Collect feedback inside your app.
Push permission prompts
Improve push opt-in rates.
Location permission prompts
Ask users to enable location tracking.
Send in-app messages
Journeys
Automate messaging workflows based on user behavior.
Dashboard
Continue below to learn how to send in-app messages manually from the dashboard.
Steps for sending messages with OneSignal:
Select the message channel
- Go to Messages > In-App > New In-App
- Use the options menu to edit, resume, or duplicate messages.
Options to duplicate or edit in-app templates
Choose a composition method
- Choose either the Block Editor or HTML Editor
- Or use pre-built Templates or past messages.
Set a name and label
- Add internal tracking metadata.
- API equivalent:
name
Set an audience
-
Include or exclude Segments
-
Default: “All Users”
-
Segment logic: multiple segments use “OR”; duplicates removed automatically
In-app messages are delivered to all subscriptions in the segment, regardless of push opt-in status.
Audience settings
Message
Choose an editor to design the message content.
Once an editor is selected, it cannot be changed for that message.
Editing screen
Click Actions
Customize what happens when users click elements in your message.
Click action options
Click Actions
Customize what happens when users click elements in your message.
Event Streams
Track interactions with the message.
SDK Click Handler
React to click events with our mobile SDK.
Deep Linking
Navigate users on click.
Triggers
Define when messages should appear during app sessions.
Trigger setup
Four trigger types:
On app open
Trigger when user launches the app.
Session duration
Delay X seconds after app open.
Since last message
Delay X time after last in-app message.
Custom triggers
Controlled via SDK addTrigger(s)
.
When should this message dismiss?
Messages can dismiss:
- On user interaction (click, swipe)
- After a set time (auto-dismiss)
Auto-dismiss after 90 seconds
Schedule & frequency
- Start Showing: When message becomes eligible
- Stop Showing: Set end date/time or “Show forever”
How often do you want to show this message?
- Only once (default)
- Every time triggers are met
- Multiple times with custom repeat logic:
Examples:
- Show 2 times with 1 hour gap
- Show 12 times with 30 days gap
Example will show the message a total of 12 times every 30 days.
Display logic
In-app messages are not actively pushed. Instead, they’re pulled at app start based on audience + displayed based on trigger logic.
The message will display if:
- The user meets audience criteria before a new session starts.
- A new session starts when the user opens your app after it has been in the background or closed for at least 30 seconds.
- If users have the app open when the message goes live or enters the segment(s) during the same session, they will need to put the app out of focus (close or background) for at least 30 seconds to be eligible to see the message.
- The trigger conditions are met.
- The scheduled time and frequency is valid.
If segment criteria change mid-session, users must reopen the app to see the message.
Testing
While testing, it is recommended to do the following:
- Set your device as a Test subscription and create a segment with the Test Users filter. Use this segment while testing.
- Set “How often do you want to show this message?” to “Every time trigger conditions are satisfied” unless you are explicitly testing the other options.
- When you set an in-app message live, make sure the app is closed our out-of-focus for at least 30 seconds before opening the app again. This will ensure you are opening the app to create a new session and be eligible for the message.
- Use the Send Test In-App button to preview the message on your device.
- Your device must be a registered Test User. See Find Devices & Set Test Users.
- This sends a push notification to your test device, click the push to open the app, and displaying the message.
- Push notifications are only sent for testing purposes. Push will not be sent in production.
- Tag Substitution does not work for test In-App Messages.
Need help?
Chat with our Support team or email support@onesignal.com
Please include:
- Details of the issue you’re experiencing and steps to reproduce if available
- Your OneSignal App ID
- The External ID or Subscription ID if applicable
- The URL to the message you tested in the OneSignal Dashboard if applicable
- Any relevant logs or error messages
We’re happy to help!