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 apiKey in App Studio for automatic setup, or call initialize at runtime when you need dynamic configuration.
  • User identification: Tie devices to Iterable profiles with setEmail or setUserId, then refresh the push token with registerPush as documented by Iterable.
👍

Developer Demo

Display 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 caseExample
Push notificationsDeliver Iterable mobile push to opted-in users
Audience segmentationTarget campaigns to segments defined in Iterable
Deep linkingOpen notification actions inside the app instead of an external browser
User identificationAssociate 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:

  1. Configure Iterable in Median: Complete Plugin setup and Enable the plugin, including deep linking if you need in-app URLs.
  2. Tune dashboard settings: Review Configuration options for active, autoRegister, apiKey, and dataRegion.
  3. Wire the JavaScript Bridge: Implement JavaScript bridge functions—initialize (if not using dashboard auto-init), check isInitialized, register push, request permission, and identify users.
  4. Validate end-to-end: Run through Testing checklist and use Troubleshooting if something fails.

Important considerations

  • If autoRegister is true, the app may prompt for notification permission automatically; otherwise control timing with requestPermission and your own UX.
  • After setEmail or setUserId, call registerPush so Iterable receives an updated token for that user.
  • Set dataRegion when your Iterable workspace uses a non-default region (for example EU).

Integration Guide

Plugin setup

Enable the plugin

  1. Navigate to Push Notifications: In the Median.co dashboard, open the Push Notifications tab and select Iterable.
  2. Enable Iterable: Turn the plugin on and paste your Iterable API key (and data region if required).
  3. 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

SettingDescriptionDefaultRecommended
activeMaster switch for the Iterable pluginSet true when the integration should run
autoRegisterWhen true, requests push permission automaticallyOptionalUse true only if you want an automatic permission prompt; otherwise prompt explicitly with requestPermission
apiKeyIterable API key; enables automatic initialization when set in configSet from your Iterable project settings
dataRegionRegion-specific routing (for example EU)OptionalSet 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:

ParameterTypeRequiredDescription
apiKeystringYesIterable API key
dataRegionstringNoRegion string when using a regional endpoint (for example EU)
callbackfunctionNoOptional 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:

ParameterTypeRequiredDescription
callbackfunctionNoOptional 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:

ParameterTypeRequiredDescription
callbackfunctionNoOptional 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:

ParameterTypeRequiredDescription
callbackfunctionNoOptional 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:

ParameterTypeRequiredDescription
emailstringYesUser email associated with the Iterable profile
callbackfunctionNoOptional 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:

ParameterTypeRequiredDescription
userIdstringYesYour application’s user identifier
callbackfunctionNoOptional callback; omit to use the returned promise

Testing checklist

Use this checklist to ensure Iterable is working correctly in your app:

  • Plugin configuration includes active, valid apiKey, and correct dataRegion when applicable
  • median.iterable.isInitialized() reflects the expected state after dashboard config or initialize()
  • median.iterable.requestPermission() (or autoRegister) yields the expected permission outcome
  • median.iterable.registerPush() completes with success: true after permission is granted
  • 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 / setUserId and registerPush
  • Failed initialize or registerPush paths 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)
  • Runtime initialize with apiKey / dataRegion matches your Iterable project
  • User switching (setEmail / setUserId changes) is followed by registerPush so tokens stay aligned
  • Permission prompts appear at a sensible time relative to your onboarding
  • Deep-linked notification opens land on the correct in-app destination

Troubleshooting

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.

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.

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.

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.

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.