GameTuner Unity Tracker allows you to collect events from your Unity games or apps. It is lightweight SDK that can be easily integrated into your project.
- GametunerUnityTracker requires Unity 2018.1+ and .NET Standard 2.0 Api Compatibility Level.
- GametunerUnityTracker requires Newtonsoft.Json. This is bundled with Unity 2020.1+ or Newtonsoft.Json-for-Unity can be used for earlier versions.
- GametunerUnityTracker supports both Mono and IL2CPP scripting backends.
GameTuner Unity Tracker can be installed via the Unity Package Manager. To install the latest version, add unity package using Package Manager UI. Add package from git url and use this url:
https://github.com/GameTuner/unity-tracker.git?path=/unity-package
Another way to install GameTuner tracker is to add the following line to your manifest.json
file located under your Unity project's Packages directory:
{
"dependencies": {
"com.algebraai.gametunertracker": "https://github.com/GameTuner/unity-tracker.git?path=/unity-package",
}
}
Installation can be done using .unitypackage file. Download latest release from GitHub Releases and import it into your project.
GametunerUnityTracker requires Newtonsoft.Json. This is bundled with Unity 2020.1+ or Newtonsoft.Json-for-Unity can be used for earlier versions. Or find Newtonsoft.Json.dll in Resource
folder.
You need to import library in your script by adding next lines at the top of your cs
script:
using GametunerTracker;
First you need to initialize plugin:
string analyticsAppID = "game_name"; // app_id of game
string apiKey = "secret_key"; // API key specific to every game
string endpointUrl = "endpoint_url" // endpoint of backend service
bool isSandboxEnabled = false; // is sendbox enviroment
string userID = "user_id"; // user ID set by game developer
bool isHttps = true; // is https enabled
string store = "store_name"; // GooglePlay, AppleStore, Amazon...
GametunerUnityTracker.Init(analyticsAppID, apiKey, endpointUrl, isSandboxEnabled, userID, isHttps, store);
Fields userID
, isHttps
and store
are optional.
If your games are offline, you may not have userId on Init, for that reason we left userID as optional field. Also, you can find method to set userID once you got validated id from server.
Use this method after initialization of plugin.
GametunerUnityTracker.SetUserId(userID);
Plugin will handle caching of userID and triggered events.
To trigger analytics event use:
string eventName = "name_of_event"; // level_played, transaction...
string schemaVersion = "1-0-0"; // version of event schema
Dictionary<string, object> parameters; // parameters of event. It can be null object
int priority = 0; // Priority of event. Higher the number, higher is prority
GametunerUnityTracker.LogEvent(eventName, schschemaVersionema, parameters, priority);
NOTE: If you make a call of LogEvent
method before Init, event will be discarded, so make sure to call Init
before any event log.
There are help methods for logging common events. You can use them to trigger common events or log them as regular event with latest schema version that you created.
public static void LogEventAdStarted(
string adPlacement,
string groupId = null,
string adPlacementGroup = null,
string adProvider = null,
string adType = null,
int limit = int.MinValue,
int limitCounter = int.MinValue,
int durationSeconds = int.MinValue,
string crosspromo = null,
Dictionary<string, object> customParameters = null,
string schemaVersion = null,
int priority = 0);
public static void LogEventAdWatched(
string adPlacement,
bool rewardClaimed,
string groupId = null,
string adPlacementGroup = null,
string adProvider = null,
string adType = null,
int limit = int.MinValue,
int limitCounter = int.MinValue,
int durationSeconds = int.MinValue,
int secondsWatched = int.MinValue,
string crosspromo = null,
Dictionary<string, object> customParameters = null,
string schemaVersion = null,
int priority = 0);
public static void LogEventCurrencyChange(
string currency,
long amountChange,
string groupId = null,
long stashUpdated = int.MinValue,
long currencyLimit = int.MinValue,
long amountWasted = int.MinValue,
string reason = null,
string gameMode = null,
string screen = null,
Dictionary<string, object> customParameters = null,
string schemaVersion = null,
int priority = 0);
public static void LogEventPurchaseInitiated(
string packageName,
string paymentProvider = null,
string packageContents = null,
long premiumCurrency = int.MinValue,
double price = double.MinValue,
string priceCurrency = null,
float priceUSD = float.MinValue,
string shopPlacement = null,
string gameMode = null,
string screen = null,
string groupId = null,
Dictionary<string, int> packageItems = null,
Dictionary<string, object> customParameters = null,
string schemaVersion = null,
int priority = 0);
public static void LogEventPurchase(
string packageName,
double paidAmount,
string paidCurrency,
string transactionId = null,
string paymentProvider = null,
string payload = null,
string packageContents = null,
long premiumCurrency = int.MinValue,
double price = double.MinValue,
string priceCurrency = null,
double priceUsd = double.MinValue,
double paidUsd = double.MinValue,
string gameMode = null,
string shopPlacement = null,
string screen = null,
string transactionCountryCode = null,
string groupId = null,
Dictionary<string, int> packageItems = null,
Dictionary<string, object> customParameters = null,
string schemaVersion = null,
int priority = 0);
Common event can be extended with custom parameters. You can use Dictionary<string, object>
to add custom parameters to common event. If you want to add custom parameters to common event, you need to specify schema version. Event priprity is by default set to 0. Below is example of adding custom parameter to common event:
Dictionary<string, object> parameters = new Dictionary<string, object>();
parameters.Add("custom_parameter", "custom_value");
GametunerUnityTracker.LogEventAdStarted("ad_placement", custom_parameters: parameters, schemaVersion: "1-0-0", priority: 10);
Logging is disabled by default. You can setup logging for debugging purposes before init or any time after init:
LoggingLevel loggingLevel = LoggingLevel.Debug // enum: Error, Debug, Verbose
GametunerUnityTracker.SetLoggingLevel(loggingLevel);
GametunerUnityTracker.EnableLogging();
To disable logging use method
GametunerUnityTracker.DisableLogging();
There are some metadata that are set and saved in tracker, which you can pull. Data is persistent between two session.
GametunerUnityTracker.GetFirstOpenTime(); // gets first_open time in unix timestamp format (long)
GametunerUnityTracker.GetUserID(); // gets user Id set by developer
GametunerUnityTracker.GetInstallationID(); // gets installation ID. Installation ID is set on first_open
New session is triggered automatic in SDK. Session is triggered in next cases:
- When game (app) is opened as cold start (app was not in background)
- When game is opened from background and background time was longer then 5 minutes.
- When game is in foreground and event is triggered after 20 hours of inactivity.
If you need to use new session event (login) in game, you can subscribe to OnSessionStarted
delegate.
GametunerUnityTracker.onSessionStartEvent += OnSessionStart;
private void OnSessionStart(string sessionId, int sessionIndex, string previousSessionId)
{
Debug.Log(string.Format("New session is started. SessionId: {}, SessionIndex: {}, PreviousSessionId: {} ", sessionId, sessionIndex, previousSessionId));
}
This project is fork of Snowplow Unity Tracker version 0.5.0, that is licenced under Apache 2.0 licence.
The GameTuner Unity Tracker is copyright 2022-2024 AlgebraAI.
GameTuner Unity Tracker is released under the Apache 2.0 License.