In this article
-
Push notification setup FAQs
- What does OS Notifications toggle do?
- What is the difference between endpointEnabled and notificationsEnabled?
- When using Segment, is it possible to use the Segment Identify call to add device tokens to user profiles?
- Is it possible to send push notifications to apps that do not incorporate Iterable's mobile SDKs?
- Is it possible to export push tokens for my users from our existing push provider and add them into Iterable using the registerDeviceToken API?
- Will users of old app versions (in which Iterable's SDK is installed) receive Iterable push notifications, assuming they have valid push tokens on their Iterable user profiles?
- If users upgrade from old app versions (without Iterable's SDK installed) to new app versions (with Iterable's SDK installed), will they receive push notifications from Iterable before opening the new version of the app?
- If users opted in to push notifications when using older versions of an app, will they continue to receive push notifications after installing new versions of that same app (even if they aren't asked to opt in to push notifications again)?
- Is it possible to track custom events and properties?
- Is there a maximum length or size for push notifications?
- What is the payload that is received on device?
-
In-app message FAQs
- What kind of devices can display in-app messages?
- Are in-app messages available for all types of campaigns?
- Can in-app messages be associated with Iterable message channels?
- Is it possible to receive in-app messages in apps not configured to use push notifications?
- How can in-app messages be customized?
- When can mobile apps display in-app messages?
- How is it possible to control in-app message rendering?
- How does a mobile app know when new in-app messages are available?
- Will users see the same in-app messages more than once?
- What versions of Iterable's mobile SDK support in-app messages?
- Is it possible to receive and display in-app messages without using Iterable's mobile SDKs?
- Is it possible to create a close button that looks like an X?
- What happens when a user receives multiple in-app messages?
- What is the difference between POST /api/events/inAppConsume and POST /api/inApp/cancel?
-
Deep Link FAQs
- What happens if a user clicks on a universal link associated with an app they do not have installed?
- Is it possible to have more than one apple-app-site-association file for my domain?
- Will this work for subdomains (cats.example.com) or only the top level domain (example.com)?
- What should an apple-app-site-association file look like? How does all this work?
- Is it possible to use wildcards in an apple-app-site-association file?
- What does an apple-app-site-association file look like?
Push notification setup FAQs
What does OS Notifications toggle do?
OS Notifications toggle on Android, when enabled, let's OS render the notification message by sending a push of type "notification message". If you are using SDK, you don't need to enable the toggle. OS notifications when disabled send data message to Android. SDKs render data message type.
What is the difference between endpointEnabled and notificationsEnabled?
-
endpointEnabled
is a flag set on the server based on token validity. -
notificationsEnabled
is a flag indicating device settings.
When using Segment, is it possible to use the Segment Identify call to add device tokens to user profiles?
Unfortunately, you cannot use this method. You must call the Iterable
POST /api/users/registerDeviceToken
API endpoint to add push tokens.
Is it possible to send push notifications to apps that do not incorporate Iterable's mobile SDKs?
Yes, this is possible. Add valid device tokens to user profiles via the
POST /api/users/registerDeviceToken
API endpoint.
We recommend using Iterable's iOS SDK and Android SDK, which make it easier to send the token to Iterable for new versions of your app. Additional SDK benefits include automatic tracking of push opens, simple implementation of rich content in push notifications, and support for deep linking.
Is it possible to export push tokens for my users from our existing push provider and add them into Iterable using the registerDeviceToken API?
Yes, these push tokens should work.
On Android, a push token is associated with the device, app, and the project/API key you request it for.
On iOS, the push token is associated with the device, app, and certificate/provisioning profile the app is running under when requesting the token.
Will users of old app versions (in which Iterable's SDK is installed) receive Iterable push notifications, assuming they have valid push tokens on their Iterable user profiles?
As long as the push token is still valid and the user has opted in to push notifications, the push notification will work.
If users upgrade from old app versions (without Iterable's SDK installed) to new app versions (with Iterable's SDK installed), will they receive push notifications from Iterable before opening the new version of the app?
Depends. If APNS/GCM decides the push token remains the same with the new app, then it should work fine. However, the push tokens are subject to change. Various factors such as OS upgrades, app upgrades, wiping your device, etc. may or may not change the token (depending on OS and other factors). This Stack Overflow post provides more details.
If users opted in to push notifications when using older versions of an app, will they continue to receive push notifications after installing new versions of that same app (even if they aren't asked to opt in to push notifications again)?
This will work. Each time the app is opened, the
POST /api/users/registerDeviceToken
API call will pass the token to Iterable. If the token has changed, it will
update the user's profile in Iterable with the new token. Since the user has
already opted in to receive push from your app in the past, the user will
receive push notifications.
Is it possible to track custom events and properties?
You can track custom events via the track function call on the track SDK. You
can also update user contact fields via the updateUser
function call on the
SDK.
Is there a maximum length or size for push notifications?
There are best practices for the size of your push notifications to ensure deliverability and high engagement rates.
Here are some key numbers to keep in mind:
Limit the size of a push notification to 2KB, including the entire message and its payload.
4–8 lines or 140–280 characters: Depending on what language your team is using, you might be able to deliver a 2000 character message. However, remember that your message may be truncated after four to eight lines. Short and sweet is best. Plus, since we know they are on mobile, some users may be using expensive cellular data to engage with you instead of WiFi, so be kind and shrink those message sizes.
What is the payload that is received on device?
The payload received on device contains a specific iterable section with the key
itbl
, which is used by the SDK to track the notification.The notification also contains all of the platform-specific information as expected (for example,
aps
for iOS).-
The custom payload data is set on the root level of the notification payload.
-
iOS example:
{ "itbl": { "templateId": 7, "campaignId": 2, "messageId": "9c438a20d26e4e9f8ad4edea23f811cd", "isGhostPush": false }, "aps": { "alert": "test push message" }, "custom": "", "fields": "", "here": "" }
-
Android example:
Bundle[{itbl={"campaignId":207256,"isGhostPush":false,"messageId":"9c438a20d26e4e9f8ad4edea23f811cd","templateId":296434}, google.sent_time=1481139004, body=Android URI deeplink test, from=668868396390, custom-key=custom-value, uri=itblTest://testingDeeplink, google.message_id=0:1512675342843879%694c27b9f9fd7ece}]
-
In-app message FAQs
What kind of devices can display in-app messages?
iOS and Android devices can display in-app messages.
Are in-app messages available for all types of campaigns?
Yes. Iterable supports in-app messages for blast, triggered, and journey-related campaigns.
Can in-app messages be associated with Iterable message channels?
Yes, in-app messages can be tied to different message channels and types.
Is it possible to receive in-app messages in apps not configured to use push notifications?
Iterable uses silent push to notify device that in-app messages are available. We use silent pushes so client doesn't have to continuously poll the server to check if in-apps are available. If you do not have push set up, you will still be able to receive in-app messages on app launch and when app is in foreground.
How can in-app messages be customized?
Customization of the in-app can be done from in-app templates. SDK fetches the HTML from server and displays.
When can mobile apps display in-app messages?
In-app messages display when an app is in the foreground.
In addition to listening for silent push notifications, Iterable's mobile SDK checks for new in-app messages at strategic times—such as when the app comes to the foreground.
How is it possible to control in-app message rendering?
You can call getMessages
and render in-app at a specific location in your
app.
How does a mobile app know when new in-app messages are available?
Iterable alerts mobile apps to the existence of new in-app messages by sending silent push notifications. After receiving a silent push notification and downloading its associated in-app messages, an app can decide whether or not to display them, and in what order.
Silent push notifications aren't visible or audible to the user. Instead, they're background notifications that serve as a communication mechanism between Iterable and the app.
Will users see the same in-app messages more than once?
No, in-app messages will not be shown to users who have already seen them.
What versions of Iterable's mobile SDK support in-app messages?
In-app messages have been supported since version 4.4.0 of the iOS SDK and version 2.2.0 of the Android SDK.
However, it's always best to use the most recent version of Iterable's mobile SDKs. For information about the deprecation and end-of-life schedule for older SDK versions, read about the deprecation schedules for Iterable's iOS SDK and Iterable's Android SDK.
Is it possible to receive and display in-app messages without using Iterable's mobile SDKs?
Yes. For instructions, read Setting up In-App Messages (Without the SDK). However, Iterable strongly recommends using the mobile SDKs.
Is it possible to create a close button that looks like an X?
One way to create an X-style close button is to use the Beefree editor with a configuration similar to the following:
- Add a button to the message template
- Set the button's text to
X
- Set the button's URL to
action://
, which will close the in-app message when tapped - Choose a Background Color for the button
- Choose a Text Color for the button
- For Align, choose right
- Specify a Border Radius of
20
- For Content Padding, specify:
-
0
for Top and Bottom -
10
for Left and Right
-
- Specify a Solid, 1-pixel border of any desired color.
What happens when a user receives multiple in-app messages?
Unless the mobile app has been customized to selectively display in-app messages, it will show all in-app messages in the order that you send them.
What is the difference between POST /api/events/inAppConsume and POST /api/inApp/cancel?
-
Indicates that a user has viewed or deleted an in-app message and remove the message from the server's message queue. It's only necessary to call this endpoint if you're not using one of Iterable's mobile SDKs.
-
Indicates that an in-app message should not be delivered to a user and remove it from the server's queue.
Deep Link FAQs
What happens if a user clicks on a universal link associated with an app they do not have installed?
The user will get directed to your website. This also works for Android App Links.
Is it possible to have more than one apple-app-site-association file for my domain?
Yes. For more information, read Deep Links Setup.
Will this work for subdomains (cats.example.com) or only the top level domain (example.com)?
Iterable can rewrite URLs for subdomains as well as top-level domains.
What should an apple-app-site-association file look like? How does all this work?
NOTES
- Iterable can now use unmodified
apple-app-site-association
files to understand how to rewrite links for deep linking. Previously, Iterable required a custom"appID": "iterable"
section in this file, but this is no longer necessary. However, Iterable still supports this older format. - If you'd like to update your
apple-app-site-association
file to use the the standard format, please talk to your Iterable customer success manager. - For more information about the
apple-app-site-association
file and how to create one, read Apple's Supporting Associated Domains document. - For more information about setting up deep links with Iterable, read Deep Links Setup.
Consider the following apple-app-site-association
file:
{ "applinks": { "apps": [], "details": [ { "appID": "<TEAM_ID>.<BUNDLE_ID>", "paths": [ "NOT /samplepath/toignore", "/samplepath/*" ] } ] } }
The paths
section defines rules that define which URLs your app can handle.
For example:
- (Rule #1)
NOT /samplepath/toignore
defines a URL your app cannot open. When sending messages, Iterable rewrites links that match this path as normal links (containing/u/
). - (Rule #2)
/samplepath/*
defines a set of URLs your app can open. When sending messages, Iterable rewrites links that match this path as universal links (containing/a/
).
After you have configured Iterable and your mobile app to work with iOS Universal Links, the following things happen when sending a campaign:
Iterable examines each link in the message and compares it to the list of rules in your tracking domain's aggregate
apple-app-site-association
file to see if there is a match. For this example, assume that one of your links is<YOUR_DOMAIN>.com/samplepath/hello.html
.If there is a match, Iterable rewrites the link before sending the message. In this example,
<YOUR_DOMAIN>.com/samplepath/hello.html
matches rule #2 above, and Iterable rewrites it as<YOUR_LINK_TRACKING_DOMAIN>.com/a/ABCD1234
, whereABCD1234
is a unique identifier associated with that link (used only by Iterable; you don't need to do anything with this).Iterable remembers that
/a/ABCD1234
(the unique identifier) maps to/samplepath/hello.html
(the actual destination).When a user clicks on the rewritten link (
/a/ABCD1234
), iOS determines that your app can open it (by examining yourapple-app-site-association
file and your App ID), and allows it to do so.In your app, Iterable's SDK calls Iterable's API to track the click and get the destination URL (
/samplepath/hello.html
) associated with the link's unique identifier (/a/ABCD1234
).Your app receives
/samplepath/hello.html
from Iterable, inspects the URL, and navigates to the appropriate content.
Here's a high-level illustration of this process:
Is it possible to use wildcards in an apple-app-site-association file?
Yes. Use *
to match any substring and ?
to match any single character.
Combine wildcards as necessary; for example, /foo/*/bar/201?/mypage
matches /foo/abc/bar/2015/mypage
and /foo/def/bar/2019/mypage
.
For more details, read Apple's Support Universal Links document.
What does an apple-app-site-association file look like?
Use this template to get started:
{ "applinks": { "apps": [], "details": [ { "appID": "<TEAM_ID>.<BUNDLE_ID>", "paths": [ // Insert rules defining the URLs handled by the App ID ] } ] } }