Iterable
Engage your users by enabling Iterable push notifications.
The Iterable plugin connects your app to Iterable’s iOS and Android SDKs (Overview of Iterable's iOS and Android SDKs) for push delivery, audience targeting, and user identification. Configure the plugin in the Median dashboard (including API key and optional data region), then use the JavaScript Bridge to initialize the SDK when needed, register for push, request permission, and identify users by email or user ID.
Why use Iritable
- Push delivery: Send Iterable campaigns to devices through the native push channel.
- Segmentation and targeting: Align push with Iterable audiences and campaign logic.
- Flexible initialization: Supply
apiKeyin App Studio for automatic setup, or callinitializeat runtime when you need dynamic configuration. - User identification: Tie devices to Iterable profiles with
setEmailorsetUserId, then refresh the push token withregisterPushas documented by Iterable.
Developer DemoDisplay our demo page in your app to test during development https://median.dev/iterable/
Prerequisites
- A Median.co app with JavaScript Bridge enabled
- Access to Push Notifications → Iterable in the Median App Dashboard
- An Iterable API key and (if applicable) a data region such as
EU - Deep linking enabled in the app if notification URLs should open in-app
When to use this plugin
Iterable is essential for apps that need to:
| Use case | Example |
|---|---|
| Push notifications | Deliver Iterable mobile push to opted-in users |
| Audience segmentation | Target campaigns to segments defined in Iterable |
| Deep linking | Open notification actions inside the app instead of an external browser |
| User identification | Associate the device with an email or user ID for testing and personalization |
What you'll do
Use this section as a fast navigation map into the full setup and implementation details:
- Configure Iterable in Median: Complete Plugin setup and Enable the plugin, including deep linking if you need in-app URLs.
- Tune dashboard settings: Review Configuration options for
active,autoRegister,apiKey, anddataRegion. - Wire the JavaScript Bridge: Implement JavaScript bridge functions—initialize (if not using dashboard auto-init), check
isInitialized, register push, request permission, and identify users. - Validate end-to-end: Run through Testing checklist and use Troubleshooting if something fails.
Important considerations
- If
autoRegisteristrue, the app may prompt for notification permission automatically; otherwise control timing withrequestPermissionand your own UX. - After
setEmailorsetUserId, callregisterPushso Iterable receives an updated token for that user. - Set
dataRegionwhen your Iterable workspace uses a non-default region (for exampleEU).
Integration Guide
Plugin setup
Enable the plugin
- Navigate to Push Notifications: In the Median.co dashboard, open the Push Notifications tab and select Iterable.
- Enable Iterable: Turn the plugin on and paste your Iterable API key (and data region if required).
- Configure settings: Adjust
active,autoRegister, and related fields to match your rollout. Enable Deep linking in the app so notification links open in-app rather than only in the device browser.
Configuration options
| Setting | Description | Default | Recommended |
|---|---|---|---|
| active | Master switch for the Iterable plugin | — | Set true when the integration should run |
| autoRegister | When true, requests push permission automatically | Optional | Use true only if you want an automatic permission prompt; otherwise prompt explicitly with requestPermission |
| apiKey | Iterable API key; enables automatic initialization when set in config | — | Set from your Iterable project settings |
| dataRegion | Region-specific routing (for example EU) | Optional | Set to match your Iterable data residency |
Example configuration:
{
"active": true | false,
"autoRegister": true | false, // optional, if true push permission will be requested automatically
"apiKey": STRING, // if specified initialization will initiate automatically, otherwise provide when initializing at runtime via JavaScript Bridge
"dataRegion": STRING // if specified (e.g. 'EU') the app will use region-specific endpoints, can also be provided when initializing at runtime via JavaScript Bridge
}Note: If you omit apiKey from dashboard config, call median.iterable.initialize() from your web layer with the same key and optional dataRegion before relying on other bridge methods.
JavaScript bridge functions
Initialize
Manually initializes the Iterable SDK when you are not relying on automatic initialization from App Studio config.
↔️Median JavaScript Bridge
median.iterable.initialize({ 'apiKey': STRING, 'dataRegion': STRING, // optional, e.g. 'EU' 'callback': function // optional otherwise returns promise }); // Return value: { "success": true | false }
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
apiKey | string | Yes | Iterable API key |
dataRegion | string | No | Region string when using a regional endpoint (for example EU) |
callback | function | No | Optional callback; omit to use the returned promise |
Is initialized
Returns whether the Iterable SDK has been initialized and, when initialized, echoes the active apiKey and dataRegion.
↔️Median JavaScript Bridge
median.iterable.isInitialized({'callback': function}); // Return value: { 'initialized': true | false, 'apiKey': STRING, // available only if initialized is true 'dataRegion': STRING // available only if initialized is true }
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
callback | function | No | Optional callback; omit to use the returned promise |
Register push
Registers the current user for push notifications and refreshes the device token.
↔️Median JavaScript Bridge
median.iterable.registerPush({'callback': function}); // Return value: { "success": true | false }
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
callback | function | No | Optional callback; omit to use the returned promis |
Request permission
Prompts the user for push notification permission.
↔️Median JavaScript Bridge
median.iterable.requestPermission({'callback': function}); // Return value: { "granted": true | false }
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
callback | function | No | Optional callback; omit to use the returned promise |
Set email
Identifies the current user by email in Iterable. After a successful call, invoke registerPush to generate a new token for that profile.
↔️Median JavaScript Bridge
median.iterable.setEmail({ 'email': STRING, 'callback': function // optional otherwise returns promise }); // Return value: { "success": true | false }
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
email | string | Yes | User email associated with the Iterable profile |
callback | function | No | Optional callback; omit to use the returned promise |
Set user ID
Identifies the current user by user ID. After a successful call, invoke registerPush to generate a new token for that profile.
↔️Median JavaScript Bridge
median.iterable.setUserId({ 'userId': STRING, 'callback': function }); // Return value: { "success": true | false }
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
userId | string | Yes | Your application’s user identifier |
callback | function | No | Optional callback; omit to use the returned promise |
Testing checklist
Use this checklist to ensure Iterable is working correctly in your app:
Basic Functionality
- Plugin configuration includes
active, validapiKey, and correctdataRegionwhen applicable -
median.iterable.isInitialized()reflects the expected state after dashboard config orinitialize() -
median.iterable.requestPermission()(orautoRegister) yields the expected permission outcome -
median.iterable.registerPush()completes withsuccess: trueafter permission is granted
Platform Testing
- Push registration and receipt behave on Android test devices
- Push registration and receipt behave on iOS test devices
- Iterable test sends reach the device after
setEmail/setUserIdandregisterPush
Error Scenarios
- Failed
initializeorregisterPushpaths do not leave the app in a broken state (retry or messaging as needed) - Behavior is sane when permission is denied (no silent assumptions that push is enabled)
Edge Cases
- Runtime
initializewithapiKey/dataRegionmatches your Iterable project - User switching (
setEmail/setUserIdchanges) is followed byregisterPushso tokens stay aligned
User Experience
- Permission prompts appear at a sensible time relative to your onboarding
- Deep-linked notification opens land on the correct in-app destination
Troubleshooting
Iterable bridge functions are undefined or not working
Confirm the JavaScript Bridge is enabled in Median App Studio, call bridge APIs after the deviceready event, and verify Iterable is enabled under Push Notifications with active set appropriately.
isInitialized is false or initialize keeps failing?
Check that the API key and optional data region match your Iterable project. If you rely on runtime initialization, ensure median.iterable.initialize() runs before other Iterable calls and that network access is available.
Test sends do not reach the device?
Ensure you have called setEmail or setUserId for the test profile, then registerPush, and that the user has granted notification permission. Confirm the device is registered in Iterable for that identifier.
Notification links open in the browser instead of the app?
Enable and configure Deep linking for your Median app so URLs from Iterable notifications route in-app. Verify URL patterns match your app’s deep link configuration.
EU data region misconfiguration?
If your Iterable workspace uses the EU stack, set dataRegion (for example EU) consistently in App Studio config or in initialize() so the SDK talks to the correct endpoints.
Still having issues?For issues related to Iretable's own configuration, permissions, or platform-specific behavior outside of Median.co, refer to Iretable's integration documentation.
Updated 10 days ago