OneSignal is a paid push notification service that supports sending messages via both Apple Push Notification Service (APNs) as well as Firebase Cloud Messaging (FCM).

To configure the OneSignal integration, you will need an active account which has credentials for APNs, FCM or both, and have access to the OneSignal App ID and Rest API Key available via your application’s settings page.

Setting the Device Token

Once OneSignal has been configured with your credentials for APNs/FCM, and the OneSignal SDK has been set up and configured for your application, your users will begin to be automatically assigned a unique OneSignal player_id identifier by the SDK.

This identifier allows targeting your user when sending push notifications without having to retrieve the specific Android or iOS device tokens - which are managed by OneSignal.

In order to target the OneSignal user from Novu, you must register the OneSignal player_idas the deviceToken for your Novu subscriber. This value can be retrieved via the OneSignal SDK for your platform.

Once you have the user’s player_id value, the deviceToken for your Novu subscriber can be set via:

import {
  Novu,
  ChatProviderIdEnum
} from '@novu/node';

const novu = new Novu("<NOVU_SECRET_KEY>");

await novu.subscribers.setCredentials('subscriberId', PushProviderIdEnum.OneSignal, {
// Your user's unique 'player_id' from OneSignal
deviceTokens: ['ad0452ca-3ca7-43b5-bf9b-fa93fd322035'],
});

Checkout the API reference for more details.

SDK Trigger Example

novu.trigger("<WORKFLOW_TRIGGER_IDENTIFIER>", {
  to: {
    subscriberId: "<SUBSCRIBER_ID>",
  },
  payload: {
    abc: "def", // If the notification is a data notification, the payload will be sent as the data
  },
  overrides: {
    subtitle: "This is subtitle value",
    mutableContent: "Mutable content value",
    // for android notification categories
    channelId: "category_id",
    // for ios notification categories
    categoryId: "Category id",
    // same value is used for all sizes and browsers
    icon: "https://image.com/icon.png",
    // used for both android and ios
    sound: "sound file url"
  }
});