Unity SDK: Advanced Options

Singular Unity SDK
Singular Unity SDK version 4.0.14 (see Change Log)

Unity 4.7.2+

Sample App Review our sample app for an example of a complete SDK integration based on best practices.
Integration Guides
  1. Basic Integration
  2. Tracking Events and Revenue
  3. Implementing Deep Links
  4. Adding SKAdNetwork Support
  5. Advanced Options


[NEW] Creating Short Referrer Links

Note: This functionality is available in SDK version 4.0.14+.

Use short links to transform long, parameter-filled Singular Links into shorter and more secure links that are convenient for sharing.

Typically, you will want to create short links dynamically so that your app's users can share them with friends to invite them to use the app.

To create a short link, you need:

  • A Singular Link that leads to your app download (see the Singular Links FAQ).
  • Any parameters you want to add to the link dynamically (see Tracking Link Parameters for the list of options).
  • The name and ID of the referring user, if you want to be able to track new app installs back to the user who shared the link.

Use the createReferrerShortLink method to create a short link as in the example below.

void callback(string shortLinkURL, string error){
    // Add your share logic here if shortLinkURL is not null
    // If there was an error, add logic to retry/abort/modify the params
// passed to the function, based on the cause of the error } SingularSDK.createReferrerShortLink( "https://sample.sng.link/B4tbm/v8fp?_dl=https%3A%2F%2Fabc.com", "John Doe", // Referrer Name "342", // Referrer ID new Dictionary<string, string>() { // a Dictionary object containing any parameters you want to add {"channel", "sms"} }, callback );

Adding Ad Revenue Attribution Support

Note: Starting in version 3.0.0, Singular added the option to set up ad revenue attribution through the Singular SDK.

Ad revenue attribution can still be set up the old way, using API calls, without updating the Singular SDK in your apps. However, if you want to measure ad revenue for SKAdNetwork campaigns, you have to set up ad revenue attribution through the SDK.

To add ad revenue attribution support in the Singular SDK:

  1. If you haven't done so yet, contact your Singular Customer Success Manager to enable ad revenue attribution for your account.
  2. Update to the latest version of the Singular SDK.
  3. Add the appropriate code snippet to your Singular SDK integration, depending on the mediation platform you use for ad revenue data.
AdMob AppLovin MAX IronSource Other (Generic)
// Note: This is a beta feature. Contact Admob to have it enabled.

RewardedAd rewardedAd;
public void HandleRewardedAdLoaded(object sender, EventArgs args)
this.rewardedAd = args.rewardedAd;

AdValue impressionData;
private void HandleAdPaidEvent(object sender, AdValueEventArgs args)
this.impressionData = args.AdValue;

SingularAdData data = new SingularAdData("Admob", impressionData.CurrencyCode, impressionData.Value/1000000f);



Note: Pass currency as a three-letter ISO 4217 currency code, e.g., "USD," "EUR", "INR".

Tracking Uninstalls

Note: Uninstall tracking is only available to Enterprise customers.

Android Uninstall Tracking

To enable uninstall tracking for your Android app, first configure the app in the Singular platform as detailed in Setting Up Uninstall Tracking. Then follow the instructions below.

Note: Google deprecated the GCM APIs on April 2018. Use FCM for uninstall tracking.

Enabling Uninstall Tracking Using Firebase Cloud Messaging (FCM)

1. Integrate with FCM:

To track uninstalls, you can use the services of the Firebase Cloud Messaging (FCM) platform. If you are not already using FCM follow Google's instructions on how to Set up a Firebase Cloud Messaging client app on Android.

FCM Requirements (source)

FCM clients require devices running Android 4.1 or higher that also have the Google Play Store app installed, or an emulator running Android 4.1 with Google APIs. Note that you are not limited to deploying your Android apps through Google Play Store.

Users/devices who are not running on supported versions of Android will not be available for Singular uninstall tracking.

2. Update the AndroidManifest.xml File:

Update your AndroidManifest.xml file to add the necessary intent filter for your app (replace MyFirebaseMessagingService with your class that implements the Firebase Service):

<service android:name=".java.MyFirebaseMessagingService"
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter> </service> <service android:name=".java.MyFirebaseMessagingService" android:exported="false"> intent-filter> action android:name="com.google.firebase.MESSAGING_EVENT" /> </intent-filter> </service>

3. Register and Send the FCM Device Token:

After retrieving the FCM token, pass it as a parameter to the 'RegisterTokenForUninstall' method:

SingularSDK.RegisterTokenForUninstall(String fcmDeviceToken);

Note that the 'RegisterTokenForUninstall' method should be called before the 'SingularSDK.InitializeSingularSDK()' method.

iOS Uninstall Tracking

Uninstall tracking on iOS is based on Apple push-notification technology. If your app doesn't currently support push notifications, see Apple's guide. If your app already supports push notifications, all you need to do is pass the device token returned from APNS using the RegisterTokenForUninstall  method, after the SDK is initialized. 

SingularSDK.RegisterTokenForUninstall Method
Description Pass the device token returned from APNS. Note that the APNS token is usually binary data in the native form, but you need to pass it as a string.
public static void RegisterTokenForUninstall
(string APNSToken)
Usage Example
// pass the APNS token as a hex-string 

Adding Global Properties

The Singular SDK lets you define custom additional properties that you want to send to the Singular servers with every session and event sent from the app. These properties can represent any information you want about the user, the app mode or status, or anything else. Once you set these properties, they are available as dimensions in your reports and you can use them to break down your data.

For example, if you have a gaming app, you can define a property called "Level" and set it initially to "0". Any session and event sent from the app will be sent with "Level": "0". Once the user levels up you reset the property to "1" and so on. You can then get your reports, including sessions, event counts, and revenue data, broken down by user level.

  • You can define up to 5 global properties.
  • They persist between app runs (with the latest value you gave them) until you unset them or the user uninstalls the app.
  • Each property name and value can be up to 200 characters long. If you pass a longer property name or value, it will be truncated to 200 characters.
  • Global properties are accessible and available in user-level exports and postbacks. In the future, aggregate reporting support will be added. Let your Singular customer success manager know if you have any questions or are interested in updates to global properties support!

Setting Global Properties before Initialization

You can use the SetGlobalProperty method to set global properties through SingularSDK before initializing the SDK. Make sure to turn off the `Initialize On awake` flag if you want your global properties to be included in the session. 

Note that since global properties and their values persist between app runs, the property that you are setting may already be set to a different value. Use the overrideExisting parameter to tell the SDK whether to override an existing property with the new value or not.

Setting Global Properties After Initialization

Use the following methods to set, unset, and retrieve global properties at any time in the app's run.

SingularSDK.SetGlobalProperty Method

Set a global property to a given value.


  • If the property does not exist yet, and there are already 5 other global properties, the property will not be added.
  • If the property has already been set, the overrideExisting parameter determines whether the existing value will be overridden.
  • The method returns true if the property was set successfully or false otherwise.
Signature public static bool SetGlobalProperty(string key, string value, bool overrideExisting)
Usage Example
bool result = SingularSDK.SetGlobalProperty("key", "value", false);
SingularSDK.GetGlobalProperties Method
Description Retrieve all the global properties and their current values as a Map.
Signature public static Dictionary<string, string> GetGlobalProperties()
Usage Example
Dictionary<string, string> props = SingularSDK.GetGlobalProperties();
SingularSDK.UnsetGlobalProperty Method
Description Remove a global property.
Signature public static void UnsetGlobalProperty(string key)
Usage Example
SingularSDK.ClearGlobalProperties Method
Description Remove all global properties.
Signature public static void ClearGlobalProperties()
Usage Example

Collecting the Install Referrer on Older Android Devices

In Android, the install referrer is Singular's most accurate tool to determine attribution, in addition to helping Singular detect and analyze fraud attempts. It is an identifier provided by the Google Play Store that points to the ad that the user clicked on before installing the app.

On devices that have the latest version of the Google Play Store, the Singular SDK collects the install referrer value automatically (since Singular is integrated with the latest Google Play Referrer API).

To collect the install referrer on older devices, follow the instructions in the Android SDK guide.

Complying with Data Privacy Laws

Singular provides privacy-safeguarding functionality to help you cooperate with any partners who may be complying with consumer privacy laws such as GDPR and CCPA (California Consumer Privacy Act). These partners want to be notified if the end-user has consented to share their private information.

If you have implemented a way to ask users for consent to share their information, use the LimitDataSharing method to notify Singular of the user's choice:

  • Use SingularSDK.LimitDataSharing(false) to indicate that the user consented (opted in) to share their information.
  • Use SingularSDK.LimitDataSharing(true) if the user did not consent.

Singular will pass this information on to partners who require it in order to comply with relevant regulations.

Note: The use of the method is optional, but there may be attribution information that the partner will share with Singular only if specifically notified that the user has opted in.

SingularSDK.LimitDataSharing Method
Signature SingularSDK.LimitDataSharing(bool shouldLimitDataSharing)
Description Notify Singular of user consent (opt-in) for sharing private data.
Usage Example
// User has opted in to sharing data

Additional Methods for GDPR Compliance

The Singular SDK provides several methods to help you comply with GDPR policies and let Singular know about user consent or non-consent for tracking.

SingularSDK.TrackingOptIn Method
Description Notify Singular of user consent (opt-in) for tracking.
Usage Example
SingularSDK.StopAllTracking Method
Description Stop all tracking activities for this user on this app.
Note: Calling this method effectively disables the SDK, even after the app restarts (the state is persistent)! The only way to re-enable tracking is by calling resumeAllTracking().
Usage Example
SingularSDK.ResumeAllTracking Method
Description Resume tracking for this user on this app.
Usage Example
SingularSDK.IsAllTrackingStopped Method
Description Check the tracking status for this user on this app. Returns true if tracking has been stopped using StopAllTracking() and not resumed.
Usage Example