Skip to main content
Courier integrates with many different push providers. Each provider may have specific requirements for delivering a message to a recipient, such as device tokens or provider-specific profile fields.

Available Push Providers

ProviderDescription
Apple Push Notifications (APNS)iOS/macOS push via APNS with P8/P12 auth and Courier Mobile SDK support
Firebase Cloud Messaging (FCM)Android/iOS/Web push via Google FCM with Courier Mobile SDK support
ExpoCross-platform push for Expo/React Native apps
OneSignalMulti-platform push via OneSignal’s notification platform
AirshipEnterprise push via Airship (formerly Urban Airship)
Pusher BeamsPush via Pusher Beams to users or interest groups
PusherReal-time messaging via Pusher Channels
MagicBellIn-app notifications via MagicBell
PushbulletCross-device push via Pushbullet
BeamerIn-app changelog and push notifications via Beamer
NowPushCross-platform push via NowPush
Can’t find a provider? Open up a chat on the Courier site, or email support@courier.com

Push Channel Override

Push channel overrides allow you to set the body, clickAction, data, icon, and title of a push notification. Data structure for the push channel override:
{
  "message": {
    "channels": {
      "push": {
        "override": {
          "body": "",
          "clickAction": "",
          "data": "",
          "icon": "",
          "title": ""
        }
      }
    }
    //... rest of message
  }
}

Data Mapping

All push channels have the ability to explicitly turn on data mapping. Data mapping can be useful to help limit how much data is passed to the push provider. For example, you can either pass the entire data payload as
data: request("data")
or explicitly choose which values to pass down:
data: {
  "firstName": data("firstName"), // accesses the data object
  "email": profile("email"), // accesses the profile object
  "template": request("template") // accesses the entire request received.
}

Tracking

Courier will attach a trackingUrl for all push requests that allow the state of the push notification to be updated. This is automatically done via the Courier Mobile SDKs, but you can control it manually like this:

Example Message

{
  "message": {
    "data": {
      "trackingUrl": "https://api.courier.com/e/123_channelTrackingId"
      // other data attributes
    }
    // other messages attributes
  }
}

Example Request

fetch("https://api.courier.com/e/123_channelTrackingId", {
  method: "POST",
  headers: {
    "X-Courier-Client-Key": "YOUR_COURIER_CLIENT_KEY",
  },
  body: JSON.stringify({
    event: "DELIVERED", // CLICKED or DELIVERED
  }),
});

Provider-Specific Tracking

Different push providers include the trackingUrl in different parts of their payload:

Airship

Courier will send trackingUrl in global_attributes data bag when you receive push notification in your client application.

APN (Apple Push Notifications)

trackingUrl will be part of data attribute in incoming payload when you receive push notification in your client application.

Firebase

trackingUrl will be part of data attribute in incoming message payload when you receive push notification in your client application.

Expo

trackingUrl will be part of data attribute in incoming payload when you receive push notification in your client application.

Pusher

trackingUrl will be part of data attribute in the incoming payload when you receive push notification in your client application.