Unity SDK Quick Start Guide
Learn about the Unity SDK Quick Start Guide β Quickly integrate and set up the Unity SDK in your project.
Overview
This section shows how to install the CleverTap SDK, track your first user event, and see this information within the CleverTap dashboard in less than ten minutes. CleverTap provides Unity SDK that enables app developers to track, segment, and engage their users.
Install
You can now install the CleverTap Unity SDK using the .unitypackage
Unity package or as a local package through Unity Package Manager (UPM).
This installation involves the following major steps:
- Import the CleverTap Unity Package
- Import the CleverTap Unity Package as a Local Dependency
- Set Up the Unity SDK
- Callbacks
Import the CleverTap Unity Package
- Download the latest version of the CleverTap Unity package. Import the
.unitypackage
into your Unity Project. Go to Assets > Import Package > Custom Package. - Add the PlayServiceResolver and the ExternalDependencyManager folders. These folders will install the EDM4U plugin, which automatically adds all the Android and iOS dependencies when building your project.
- Ensure that the scripts inside the
Editor
folder are added. TheAndroidPostImport
script sets upclevertap-android-wrapper
library for Android.IOSPostBuildProcessor
andAndroidProjectPostProcessor
scripts helps iOS and Android setup.
Import the CleverTap Unity Package as a Local Dependency
Clone the latest release version of CleverTap Unity SDK. The SDK can be imported as a local package through the Unity Package Manager.
Set Up the Unity SDK
CleverTap API can be accessed anywhere in your project by simply calling the static CleverTap class. No need to create GameObject with the CleverTapUnity name or attach any script. The new architecture handles the following:
- Instantiation of platform-specific binding (iOS, Android, Native)
- Creation of
GameObject
- Script attachment.
Use the Unity Editor CleverTap Settings dialog (Assets > CleverTap Settings) to configure your account for iOS and Android builds automatically.
Enter your CleverTap Account ID, CleverTap Account token, Region, and personalization settings in the CleverTap Settings Assets > CleverTap Settings.
You can find the CleverTap Account ID, CleverTap Account token, and CleverTap Region on the Settings page of the CleverTap dashboard.

Set your account configuration
This ensures that the CleverTap Post Processor scripts automatically add these settings to the Info.plist
and AndroidManifest.xml
files.
Callbacks
A new mechanism to handle callbacks is introduced. You can now add an event listener for a callback directly through the CleverTap static events. No need to set all callbacks in the CleverTapUnity.cs
anymore.
CleverTap.OnCleverTapDeepLinkCallback += YOUR_CALLBACK_METHOD;
CleverTap.OnCleverTapProfileInitializedCallback += YOUR_CALLBACK_METHOD;
CleverTap.OnCleverTapProfileUpdatesCallback += YOUR_CALLBACK_METHOD;
This introduces breaking changes in the CleverTapUnity.cs
, rendering all existing callback methods obsolete, and these methods will not be called anymore. If you still want to use the callbacks through the CleverTapUnity.cs
methods, each method must subscribe to a new event listener found at CleverTap.On{CleveTapUnity_Callback_MethodName}
.
The following is a sample code on how to subscribe to new event listeners with existing methods in CleverTapUnity.cs
:
CleverTap.OnCleverTapDeepLinkCallback += CleverTapDeepLinkCallback;
CleverTap.OnCleverTapProfileInitializedCallback += CleverTapProfileInitializedCallback;
CleverTap.OnCleverTapProfileUpdatesCallback += CleverTapProfileUpdatesCallback;
CleverTap.OnCleverTapPushOpenedCallback += CleverTapPushOpenedCallback;
CleverTap.OnCleverTapInitCleverTapIdCallback += CleverTapInitCleverTapIdCallback;
CleverTap.OnCleverTapInAppNotificationDismissedCallback += CleverTapInAppNotificationDismissedCallback;
CleverTap.OnCleverTapInAppNotificationShowCallback += CleverTapInAppNotificationShowCallback;
CleverTap.OnCleverTapOnPushPermissionResponseCallback += CleverTapOnPushPermissionResponseCallback;
CleverTap.OnCleverTapInAppNotificationButtonTapped += CleverTapInAppNotificationButtonTapped;
CleverTap.OnCleverTapInboxDidInitializeCallback += CleverTapInboxDidInitializeCallback;
CleverTap.OnCleverTapInboxMessagesDidUpdateCallback += CleverTapInboxMessagesDidUpdateCallback;
CleverTap.OnCleverTapInboxCustomExtrasButtonSelect += CleverTapInboxCustomExtrasButtonSelect;
CleverTap.OnCleverTapInboxItemClicked += CleverTapInboxItemClicked;
CleverTap.OnCleverTapNativeDisplayUnitsUpdated += CleverTapNativeDisplayUnitsUpdated;
CleverTap.OnCleverTapProductConfigFetched += CleverTapProductConfigFetched;
CleverTap.OnCleverTapProductConfigActivated += CleverTapProductConfigActivated;
CleverTap.OnCleverTapProductConfigInitialized += CleverTapProductConfigInitialized;
CleverTap.OnCleverTapFeatureFlagsUpdated += CleverTapFeatureFlagsUpdated;
iOS Specific Instructions
To integrate the required dependencies and configurations for your iOS project. Use a CocoaPods Podfile to manage iOS dependencies. After exporting the project to XCode, run pod install
to install them. The EDM4U plugin can automate this process for each export. Alternatively, manually install pods by running pod install
in the exported XCode project. Ensure to start .xcworkspace
to build the game with dependencies.
SDK Initialization
On iOS, the SDK initialization is done using [CleverTap autoIntegrate]
in the application:didFinishLaunchingWithOptions: method
, with CleverTapUnityAppController
overriding the default UnityAppController
.
If you override UnityAppController
, inherit from CleverTapUnityAppController
or call the required CleverTap methods.
- Set your Account ID (Project ID), Account token (Project Token), and iOS Specific settings in the CleverTap Settings Assets > CleverTap Settings
iOS Specific Settings

- Disable IDFV β Set
CleverTapDisableIDFV
totrue
to disable IDFV usage for CleverTap ID.
IDFV Usage for CleverTap ID
Starting from CleverTap Unity SDK 2.1.2, you can optionally disable the usage of IDFV for CleverTap ID by selecting CLEVERTAP_DISABLE_IDFV. We recommend this for apps that send data from different iOS apps to a common CleverTap account. By default, the CLEVERTAP_DISABLE_IDFV checkbox is cleared.
- Use AutoIntegrate β Initializes the iOS SDK with
[CleverTap autoIntegrate]
, automatically swizzling the application and push notification methods. To disable swizzling, setCleverTapIOSUseAutoIntegrate
tofalse
. - Use UNUserNotificationCenter β Ensures that notifications are handled correctly and is required whether you use autoIntegrate or not. If you implement the delegate in your own class, disable the
UNUserNotificationCenterDelegate
from being set toCleverTapUnityAppController
by unchecking theCleverTapIOSUseUNUserNotificationCenter
setting. In this case, you must implement theUNUserNotificationCenterDelegate
methods yourself and call the CleverTap methods. - Present Notifications Foreground β Display remote notifications while the app is in the foreground. By default, this setting is
false
, andUNNotificationPresentationOptionNone
is used. The notification is handled silently, but if it contains a deeplink, the app opens it. If you set this option totrue
, notifications appear as a banner or alert usingUNNotificationPresentationOptionBanner/Alert
|UNNotificationPresentationOptionBadge
|UNNotificationPresentationOptionSound
.
- Set up EDM4U plugin to install CocoaPods automatically. Go to Assets > External Dependency Manager > iOS Resolver > Settings. You can also install CocoaPods manually using
pod install
.

Set up EDM4U plugin
- Open the
.xcworkspace
project. - To enable Push Notifications, ensure to add the Push Notifications capability to your Xcode project.
- Build and run your iOS project.
Add Region Code
To know how to add region code for iOS in Unity SDK, refer to Region Codes.
Android Specific Instructions
To integrate the required dependencies and configurations for your Android project, follow these steps in Unity Editor:
- Go to File > Build Settings > Android > Player Settings > Publishing Settings > Build.
- Enable .gradle templates and custom AndroidManifest.
- EDM4U populates the Custom Main Gradle Template and Gradle Properties Template with the required Android dependencies.

Build Settings
-
Make the following changes to your Android application project, if applicable:
-
If you have implemented a custom
android.app.Application
class, add the following code:@Override public void onCreate() { ActivityLifecycleCallback.register(this); super.onCreate(); CleverTapUnityAPI.initialize(this); }
Otherwise, use
com.clevertap.unity.CleverTapUnityApplication
as shown in the Manifest below. -
If you have implemented a custom Launcher Activity, add the following code:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); CleverTapUnityAPI.onLauncherActivityCreate(this); } @Override public void onNewIntent(Intent intent) { super.onNewIntent(intent); CleverTapUnityAPI.onLauncherActivityNewIntent(this, intent); }
Otherwise, use
com.clevertap.unity.CleverTapUnityApplication
as shown in the Manifest below.
-
-
Edit the
AndroidManifest.xml
file inAssets/Plugins/Android
to add your Bundle Identifier, FCM Sender ID, and Deep Link URL scheme (if applicable). CleverTap configuration (Account ID, Token, Region, etc) can also be specified in this file if it was not provided through the CleverTap Settings dialog:
<?xml version="1.0" encoding="utf-8"?>
<manifest
package="YOUR_BUNDLE_IDENTIFIER"
xmlns:android="http://schemas.android.com/apk/res/android"
android:installLocation="preferExternal"
android:versionCode="1"
android:versionName="1.0">
<supports-screens
android:anyDensity="true"
android:largeScreens="true"
android:normalScreens="true"
android:smallScreens="true"
android:xlargeScreens="true" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-feature android:glEsVersion="0x00020000" />
<uses-feature
android:name="android.hardware.touchscreen"
android:required="false" />
<uses-feature
android:name="android.hardware.touchscreen.multitouch"
android:required="false" />
<uses-feature
android:name="android.hardware.touchscreen.multitouch.distinct"
android:required="false" />
<application
android:debuggable="true"
android:icon="@drawable/app_icon"
android:isGame="true"
android:name="com.clevertap.unity.CleverTapUnityApplication"
android:label="@string/app_name"
android:theme="@style/UnityThemeSelector">
<activity
android:name="com.clevertap.unity.CleverTapOverrideActivity"
android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|fontScale"
android:label="@string/app_name"
android:launchMode="singleTask"
android:screenOrientation="fullSensor">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.LEANBACK_LAUNCHER" />
</intent-filter>
<!-- Deep Links uncomment and replace YOUR_URL_SCHEME, if applicable, or remove if not supporting deep links-->
<!--
<intent-filter android:label="@string/app_name">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="YOUR_URL_SCHEME" />
</intent-filter>
-->
<meta-data
android:name="unityplayer.UnityActivity"
android:value="true" />
</activity>
<service
android:name="com.clevertap.android.sdk.pushnotification.fcm.FcmMessageListenerService"
android:exported="true">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
<service
android:name="com.clevertap.android.sdk.pushnotification.CTNotificationIntentService"
android:exported="false">
<intent-filter>
<action android:name="com.clevertap.PUSH_EVENT" />
</intent-filter>
</service>
<!-- Uncomment these lines to manually add your account configuration.
<meta-data
android:name="CLEVERTAP_ACCOUNT_ID"
android:value="Your CleverTap Account ID" />
<meta-data
android:name="CLEVERTAP_TOKEN"
android:value="Your CleverTap Account Token" />
<meta-data
android:name="CLEVERTAP_REGION"
android:value="Your CleverTap Account Region" />
<meta-data
android:name="CLEVERTAP_PROXY_DOMAIN"
android:value="Your CleverTap Account Proxy Domain" />
<meta-data
android:name="CLEVERTAP_SPIKY_PROXY_DOMAIN"
android:value="Your CleverTap Account Spiky Proxy Domain" />
-->
</application>
</manifest>
- Add your
google-services.json
file to the project's Assets folder. - Build your app or Android project as usual.
Add Region Code
To know how to add region code for Android in Unity SDK, refer to Region Codes.
Track User Profiles
Create a User profile when the user logs in (On User Login):
Dictionary<string, string> newProps = new Dictionary<string, string>();
newProps.Add("Identity", "123456");
newProps.put("Name", "Jack Montana"); // String
newProps.put("Identity", "61026032"); // String
newProps.put("Email", "[email protected]"); // Email address of the user
newProps.put("Phone", "+14155551234"); // Phone (with the country code, starting with +)
newProps.put("Gender", "M"); // Can be either M or F
CleverTap.OnUserLogin(newProps);
Track User Events
Record an event without event data:
// record basic event with no properties
CleverTap.RecordEvent("testEvent");
Record an event with event data:
// record event with properties
Dictionary<string, object> Props = new Dictionary<string, object>();
Props.Add("testKey", "testValue");
CleverTap.RecordEvent("testEventWithProps", Props);
Updated 17 days ago