OneSignal Help & Documentation

Welcome to the OneSignal New IA developer hub. You'll find comprehensive guides and documentation to help you start working with OneSignal New IA as quickly as possible, as well as support if you get stuck. Let's jump right in!

Get Started    Discussions

Database, DMP, & CRM Integration

How to link your database user data with OneSignal

Syncing your user data from a Database, CRM or Data Management Platform (DMP) with OneSignal is an important priority for successful integration.

Each User is stored in OneSignal as a device record with a unique player_id (OneSignal User ID). A single user can have multiple player_id records based on how many devices they use to interact with your app/site.

You can send OneSignal your unique Database/DMP User ID called the external_user_id and associate that with multiple player_id records. Also, you can get the OneSignal player_id's and send it to your Database.

Linking Your External User ID to OneSignal Player ID

Use the OneSignal SDK setExternalUserId method each time the user logs into the app/site.

Example Linking the External User ID

For Web Push, a Player ID is generated when the user subscribes. You can detect if the user is subscribed using the isPushNotificationsEnabled method and set the External User ID when pulled from your server.

This same concept can be done with all of our mobile SDKs. A Player ID on mobile is generated as soon as the user opens the app with the OneSignal SDK is initialized.

let exteranlUserId = "your User ID fetched from backend server";

OneSignal.push(function() {
  OneSignal.isPushNotificationsEnabled(function(isEnabled) {
    if (isEnabled)
      console.log("Push notifications are enabled!");
      OneSignal.setExternalUserId(exteranlUserId);
    else
      console.log("Push notifications are not enabled yet.");    
  });
});

Once the external_user_id is set, you can:

  1. Target devices with push and email through our Create Notification REST API Call using the include_external_user_ids targeting parameter. Also see Sending Transactional Messages.
  2. Use the CSV List Upload feature to tag and segment users based on the external_user_id's set in our system.
  3. Update tags with our API Edit Tags with External User ID endpoint.

Adding the OneSignal Player ID to your Database

To store the device's OneSignal Player ID to your Database, use the OneSignal SDK User Data methods which returns the Player ID and other available data on the device.

Example Storing the OneSignal Player ID

For Web Push, a Player ID is generated when the user subscribes. You can detect if the user is subscribed using the isPushNotificationsEnabled method and get the OneSignal Player ID.

Then make a POST to your server with the data.

This same concept can be done with all of our mobile SDKs. A Player ID on mobile is generated as soon as the user opens the app with the OneSignal SDK is initialized.

OneSignal.push(function() {
  OneSignal.isPushNotificationsEnabled(function(isEnabled) {
    if (isEnabled)
      console.log("Push notifications are enabled!");
      OneSignal.getUserId( function(userId) {
        // Make a POST call to your server with the user ID
        // Mixpanel Example
        // mixpanel.people.set({ $onesignal_user_id: userId });
      });
    else
      console.log("Push notifications are not enabled yet.");    
  });
});
// Android SDK Example addSubscriptionObserver
public class MainActivity extends Activity implements OSSubscriptionObserver {
  protected void onCreate(Bundle savedInstanceState) {
    OneSignal.addSubscriptionObserver(this);
  }
  
  public void onOSSubscriptionChanged(OSSubscriptionStateChanges stateChanges) {
    if (!stateChanges.getFrom().getSubscribed() &&
        stateChanges.getTo().getSubscribed()) {
         // The user is subscribed
         // Either the user subscribed for the first time
         // Or the user was subscribed -> unsubscribed -> subscribed
         stateChanges.getTo().getUserId();
         // Make a POST call to your server with the user ID
      }
  }
}
// iOS SDK Example addSubscriptionObserver
// AppDelegate.h
// Add OSSubscriptionObserver after UIApplicationDelegate
@interface AppDelegate : UIResponder <UIApplicationDelegate, OSSubscriptionObserver>
@end

// AppDelegate.m
@implementation AppDelegate
  
- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  // Add your AppDelegate as an obsserver
  [OneSignal addSubscriptionObserver:self];
}

// Add this new method
- (void)onOSSubscriptionChanged:(OSSubscriptionStateChanges*)stateChanges {
  
    if (!stateChanges.from.subscribed && stateChanges.to.subscribed) {
         // The user is subscribed
         // Either the user subscribed for the first time
         // Or the user was subscribed -> unsubscribed -> subscribed
         stateChanges.to.userId
        // Make a POST call to your server with the user ID
    }
}
// iOS SDK Example addSubscriptionObserver
// AppDelegate.swift
// Add OSSubscriptionObserver after UIApplicationDelegate
class AppDelegate: UIResponder, UIApplicationDelegate, OSSubscriptionObserver {

   func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
      // Add your AppDelegate as an obsserver
      OneSignal.add(self as OSSubscriptionObserver)
   }

   // Add this new method
   func onOSSubscriptionChanged(_ stateChanges: OSSubscriptionStateChanges!) {
      if !stateChanges.from.subscribed && stateChanges.to.subscribed {
         // The user is subscribed
         // Either the user subscribed for the first time
         // Or the user was subscribed -> unsubscribed -> subscribed
         stateChanges.to.userId
        // Make a POST call to your server with the user ID
      }
   }

Once the Player ID is saved, you can:

  1. Target devices with push and email through our Create Notification REST API Call using the include_player_ids targeting parameter. See Sending Transactional Messages.
  2. Use the List Upload feature to tag and segment users based on the player_id set in our system.
  3. Use the API Edit Device Call to update tags or external_user_id's on devices.

If you haven't already done so, please see our Data Integration blog post for more details.


Linking Data Between OneSignal and a Database

Other common data you want to link between your Database and OneSignal are:

Most custom data can be stored to OneSignal in the form of Data Tags which are key:value pairs of string or integer data. We do not recommend storing array or dictionary data types as tags.

Any data tags sent to OneSignal should be for the purpose of sending notifications, either through creating Segments or using API Filters.

Tags can also be used within notifications for Message Personalization, i.e adding custom information into the push like the "username" or "last product added to cart".

Please see our Use Cases & Best Practices for other ideas on using tags.

Updated about 12 hours ago



Database, DMP, & CRM Integration


How to link your database user data with OneSignal

Suggested Edits are limited on API Reference Pages

You can only suggest edits to Markdown body content, but not to the API spec.