1618 lines
		
	
	
		
			61 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			1618 lines
		
	
	
		
			61 KiB
		
	
	
	
		
			C#
		
	
	
	
| /*
 | |
|  * 
 | |
|     Copyright 2019, ThinkingData, Inc
 | |
|     Licensed under the Apache License, Version 2.0 (the "License");
 | |
|     you may not use this file except in compliance with the License.
 | |
|     You may obtain a copy of the License at
 | |
| 
 | |
|         http://www.apache.org/licenses/LICENSE-2.0
 | |
| 
 | |
|     Unless required by applicable law or agreed to in writing, software
 | |
|     distributed under the License is distributed on an "AS IS" BASIS,
 | |
|     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | |
|     See the License for the specific language governing permissions and
 | |
|     limitations under the License.
 | |
|     SDK VERSION:3.2.2
 | |
|  */
 | |
| 
 | |
| /**    
 | |
| \mainpage
 | |
| 
 | |
| \section main_introduction Introduction
 | |
| 
 | |
| ThinkingData Analytics SDK for Unity.
 | |
| 
 | |
| This is the [ThinkingData](https://www.thinkingdata.cn)™ Analytics SDK for Unity. Documentation is available on our help center in the following languages:
 | |
| 
 | |
| - [English](https://docs.thinkingdata.cn/ta-manual/latest/en/installation/installation_menu/client_sdk/game_engine_sdk_installation/unity_sdk_installation/unity_sdk_installation.html)
 | |
| - [中文](https://docs.thinkingdata.cn/ta-manual/latest/installation/installation_menu/client_sdk/game_engine_sdk_installation/unity_sdk_installation/unity_sdk_installation.html)
 | |
| 
 | |
|  */
 | |
| 
 | |
| #if !(UNITY_5_4_OR_NEWER)
 | |
| #define DISABLE_TA
 | |
| #warning "Your Unity version is not supported by us - ThinkingAnalyticsSDK disabled"
 | |
| #endif
 | |
| 
 | |
| using System;
 | |
| using System.Collections.Generic;
 | |
| using ThinkingData.Analytics.Utils;
 | |
| using ThinkingData.Analytics.Wrapper;
 | |
| using UnityEngine;
 | |
| using ThinkingData.Analytics.TDException;
 | |
| using UnityEngine.SceneManagement;
 | |
| 
 | |
| namespace ThinkingData.Analytics
 | |
| {
 | |
|     /// <summary>
 | |
|     /// ThinkingData Analytics SDK for Unity.
 | |
|     /// </summary>
 | |
|     [DisallowMultipleComponent]
 | |
|     public class TDAnalytics : MonoBehaviour
 | |
|     {
 | |
|         #region settings
 | |
|         //[System.Serializable]
 | |
|         //public class TDConfig
 | |
|         //{
 | |
|         //    public string appId;
 | |
|         //    public string serverUrl;
 | |
|         //    public TDMode mode;
 | |
|         //    public TDTimeZone timeZone;
 | |
|         //    public string timeZoneId;
 | |
|         //    public bool enableEncrypt; // enable data encryption, default is false (iOS/Android only)
 | |
|         //    public int encryptVersion; // secret key version (iOS/Android only)
 | |
|         //    public string encryptPublicKey; // public secret key (iOS/Android only)
 | |
|         //    public TDSSLPinningMode pinningMode; // SSL Pinning mode, default is NONE (iOS/Android only)
 | |
|         //    public bool allowInvalidCertificates; // allow invalid certificates, default is false (iOS/Android only)
 | |
|         //    public bool validatesDomainName; // enable to verify domain name, default is true (iOS/Android only)
 | |
|         //    private string sName;
 | |
|         //    public string name { set { if (!string.IsNullOrEmpty(value)) sName = value.Replace(" ", ""); } get { return sName; } } // instances name
 | |
| 
 | |
|         //    //public TDConfig(string appId, string serverUrl, TDMode mode = TDMode.Normal, TDTimeZone timeZone = TDTimeZone.Local, string timeZoneId = null, string instanceName = null)
 | |
|         //    public TDConfig(string appId, string serverUrl)
 | |
|         //    {
 | |
|         //        this.appId = appId.Replace(" ", "");
 | |
|         //        this.serverUrl = serverUrl;
 | |
|         //        this.mode = TDMode.Normal;
 | |
|         //        this.timeZone = TDTimeZone.Local;
 | |
|         //        this.timeZoneId = null;
 | |
|         //        this.enableEncrypt = false;
 | |
|         //        this.encryptVersion = 0;
 | |
|         //        this.encryptPublicKey = null;
 | |
|         //        this.pinningMode = TDSSLPinningMode.NONE;
 | |
|         //        this.allowInvalidCertificates = false;
 | |
|         //        this.validatesDomainName = true;
 | |
|         //        //if (!string.IsNullOrEmpty(instanceName))
 | |
|         //        //{
 | |
|         //        //    instanceName = instanceName.Replace(" ", "");
 | |
|         //        //}
 | |
|         //    }
 | |
| 
 | |
|         //    //public string GetInstanceName()
 | |
|         //    //{
 | |
|         //    //    return this.instanceName;
 | |
|         //    //}
 | |
| 
 | |
|         //    public string getTimeZoneId()
 | |
|         //    {
 | |
|         //        switch (timeZone)
 | |
|         //        {
 | |
|         //            case TDTimeZone.UTC:
 | |
|         //                return "UTC";
 | |
|         //            case TDTimeZone.Asia_Shanghai:
 | |
|         //                return "Asia/Shanghai";
 | |
|         //            case TDTimeZone.Asia_Tokyo:
 | |
|         //                return "Asia/Tokyo";
 | |
|         //            case TDTimeZone.America_Los_Angeles:
 | |
|         //                return "America/Los_Angeles";
 | |
|         //            case TDTimeZone.America_New_York:
 | |
|         //                return "America/New_York";
 | |
|         //            case TDTimeZone.Other:
 | |
|         //                return timeZoneId;
 | |
|         //            default:
 | |
|         //                break;
 | |
|         //        }
 | |
|         //        return null;
 | |
|         //    }
 | |
|         //}
 | |
| 
 | |
|         //public enum TDTimeZone
 | |
|         //{
 | |
|         //    Local,
 | |
|         //    UTC,
 | |
|         //    Asia_Shanghai,
 | |
|         //    Asia_Tokyo,
 | |
|         //    America_Los_Angeles,
 | |
|         //    America_New_York,
 | |
|         //    Other = 100
 | |
|         //}
 | |
| 
 | |
|         //public enum TDMode
 | |
|         //{
 | |
|         //    Debug = 1,
 | |
|         //    DebugOnly = 2,
 | |
|         //    Normal = 0
 | |
|         //}
 | |
| 
 | |
|         //public enum TDNetworkType
 | |
|         //{
 | |
|         //    Wifi = 1,
 | |
|         //    All = 0
 | |
|         //}
 | |
| 
 | |
|         [Header("Configuration")]
 | |
|         [Tooltip("Enable Start SDK Manually")]
 | |
|         public bool startManually = true;
 | |
| 
 | |
|         [Tooltip("Enable Log")]
 | |
|         public bool enableLog = true;
 | |
|         [Tooltip("Sets the Network Type")]
 | |
|         public TDNetworkType networkType = TDNetworkType.All;
 | |
| 
 | |
|         [Header("Project")]
 | |
|         [Tooltip("Project Setting, APP ID is given when the project is created")]
 | |
|         [HideInInspector]
 | |
|         public TDConfig[] configs = new TDConfig[1];
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Whether to enable logs
 | |
|         /// </summary>
 | |
|         /// <param name="enable">enable logs</param>
 | |
|         public static void EnableLog(bool enable)
 | |
|         {
 | |
|             if (sThinkingData != null)
 | |
|             {
 | |
|                 sThinkingData.enableLog = enable;
 | |
|                 TDLog.EnableLog(enable);
 | |
|                 TDWrapper.EnableLog(enable);
 | |
|             }
 | |
|         }
 | |
|         /// <summary>
 | |
|         /// Set custom distinct ID, to replace the distinct ID generated by the system 
 | |
|         /// </summary>
 | |
|         /// <param name="distinctId">distinct ID</param>
 | |
|         /// <param name="appId">project ID (optional)</param>
 | |
|         public static void SetDistinctId(string distinctId, string appId = "")
 | |
|         {
 | |
|             if (tracking_enabled)
 | |
|             {
 | |
|                 TDWrapper.SetDistinctId(distinctId, appId);
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 System.Reflection.MethodBase method = System.Reflection.MethodBase.GetCurrentMethod();
 | |
|                 object[] parameters = new object[] { distinctId, appId };
 | |
|                 eventCaches.Add(new Dictionary<string, object>() {
 | |
|                     { "method", method},
 | |
|                     { "parameters", parameters}
 | |
|                 });
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Returns the current distinct ID
 | |
|         /// </summary>
 | |
|         /// <returns>distinct ID</returns>
 | |
|         /// <param name="appId">project ID (optional)</param>
 | |
|         public static string GetDistinctId(string appId = "")
 | |
|         {
 | |
|             if (tracking_enabled)
 | |
|             {
 | |
|                 return TDWrapper.GetDistinctId(appId);
 | |
|             }
 | |
|             return null;
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Set account ID. This method does not upload Login events
 | |
|         /// </summary>
 | |
|         /// <param name="account">account ID</param>
 | |
|         /// <param name="appId">project ID (optional)</param>
 | |
|         public static void Login(string account, string appId = "")
 | |
|         {
 | |
|             if (tracking_enabled)
 | |
|             {
 | |
|                 TDWrapper.Login(account, appId);
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 System.Reflection.MethodBase method = System.Reflection.MethodBase.GetCurrentMethod();
 | |
|                 object[] parameters = new object[] { account, appId };
 | |
|                 eventCaches.Add(new Dictionary<string, object>() {
 | |
|                     { "method", method},
 | |
|                     { "parameters", parameters}
 | |
|                 });
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Clear account ID. This method does not upload Logout events
 | |
|         /// </summary>
 | |
|         /// <param name="appId">project ID (optional) </param>
 | |
|         public static void Logout(string appId = "")
 | |
|         {
 | |
|             if (tracking_enabled)
 | |
|             {
 | |
|                 TDWrapper.Logout(appId);
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 System.Reflection.MethodBase method = System.Reflection.MethodBase.GetCurrentMethod();
 | |
|                 object[] parameters = new object[] { appId };
 | |
|                 eventCaches.Add(new Dictionary<string, object>() {
 | |
|                     { "method", method},
 | |
|                     { "parameters", parameters}
 | |
|                 });
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Enable auto-tracking
 | |
|         /// </summary>
 | |
|         /// <param name="eventType">auto-tracking eventType</param>
 | |
|         /// <param name="properties">properties for auto-tracking events (optional)</param>
 | |
|         /// <param name="appId">project ID (optional)</param>
 | |
|         public static void EnableAutoTrack(TDAutoTrackEventType eventType, Dictionary<string, object> properties = null, string appId = "")
 | |
|         {
 | |
|             if (tracking_enabled)
 | |
|             {
 | |
|                 if (properties == null)
 | |
|                 {
 | |
|                     properties = new Dictionary<string, object>();
 | |
|                 }
 | |
|                 TDWrapper.EnableAutoTrack(eventType, properties, appId);
 | |
|                 if ((eventType & TDAutoTrackEventType.AppCrash) != 0 && !TDPublicConfig.DisableCSharpException)
 | |
|                 {
 | |
|                     TDExceptionHandler.RegisterTAExceptionHandler(properties);
 | |
|                 }
 | |
|                 if ((eventType & TDAutoTrackEventType.AppSceneLoad) != 0)
 | |
|                 {
 | |
|                     SceneManager.sceneLoaded -= TDAnalytics.OnSceneLoaded;
 | |
|                     SceneManager.sceneLoaded += TDAnalytics.OnSceneLoaded;
 | |
|                 }
 | |
|                 if ((eventType & TDAutoTrackEventType.AppSceneUnload) != 0)
 | |
|                 {
 | |
|                     SceneManager.sceneUnloaded -= TDAnalytics.OnSceneUnloaded;
 | |
|                     SceneManager.sceneUnloaded += TDAnalytics.OnSceneUnloaded;
 | |
|                 }
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 System.Reflection.MethodBase method = System.Reflection.MethodBase.GetCurrentMethod();
 | |
|                 object[] parameters = new object[] { eventType, properties, appId };
 | |
|                 eventCaches.Add(new Dictionary<string, object>() {
 | |
|                     { "method", method},
 | |
|                     { "parameters", parameters}
 | |
|                 });
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Enable auto-tracking
 | |
|         /// </summary>
 | |
|         /// <param name="events">auto-tracking eventType</param>
 | |
|         /// <param name="eventHandler">callback for auto-tracking events</param>
 | |
|         /// <param name="appId">project ID (optional)</param>
 | |
|         public static void EnableAutoTrack(TDAutoTrackEventType eventType, TDAutoTrackEventHandler eventHandler, string appId = "")
 | |
|         {
 | |
|             if (tracking_enabled)
 | |
|             {
 | |
|                 TDWrapper.EnableAutoTrack(eventType, eventHandler, appId);
 | |
|                 if ((eventType & TDAutoTrackEventType.AppCrash) != 0 && !TDPublicConfig.DisableCSharpException)
 | |
|                 {
 | |
|                     TDExceptionHandler.RegisterTAExceptionHandler(eventHandler);
 | |
|                 }
 | |
|                 if ((eventType & TDAutoTrackEventType.AppSceneLoad) != 0)
 | |
|                 {
 | |
|                     SceneManager.sceneLoaded -= TDAnalytics.OnSceneLoaded;
 | |
|                     SceneManager.sceneLoaded += TDAnalytics.OnSceneLoaded;
 | |
|                 }
 | |
|                 if ((eventType & TDAutoTrackEventType.AppSceneUnload) != 0)
 | |
|                 {
 | |
|                     SceneManager.sceneUnloaded -= TDAnalytics.OnSceneUnloaded;
 | |
|                     SceneManager.sceneUnloaded += TDAnalytics.OnSceneUnloaded;
 | |
|                 }
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 System.Reflection.MethodBase method = System.Reflection.MethodBase.GetCurrentMethod();
 | |
|                 object[] parameters = new object[] { eventType, eventHandler, appId };
 | |
|                 eventCaches.Add(new Dictionary<string, object>() {
 | |
|                     { "method", method},
 | |
|                     { "parameters", parameters}
 | |
|                 });
 | |
|             }
 | |
| 
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Set properties for auto-tracking events
 | |
|         /// </summary>
 | |
|         /// <param name="eventType">auto-tracking eventType</param>
 | |
|         /// <param name="properties">properties for auto-tracking events</param>
 | |
|         /// <param name="appId">project ID (optional)</param>
 | |
|         public static void SetAutoTrackProperties(TDAutoTrackEventType eventType, Dictionary<string, object> properties, string appId = "")
 | |
|         {
 | |
|             if (tracking_enabled)
 | |
|             {
 | |
|                 TDWrapper.SetAutoTrackProperties(eventType, properties, appId);
 | |
|                 if ((eventType & TDAutoTrackEventType.AppCrash) != 0 && !TDPublicConfig.DisableCSharpException)
 | |
|                 {
 | |
|                     TDExceptionHandler.SetAutoTrackProperties(properties);
 | |
|                 }
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 System.Reflection.MethodBase method = System.Reflection.MethodBase.GetCurrentMethod();
 | |
|                 object[] parameters = new object[] { eventType, properties, appId };
 | |
|                 eventCaches.Add(new Dictionary<string, object>() {
 | |
|                     { "method", method},
 | |
|                     { "parameters", parameters}
 | |
|                 });
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Track a Event
 | |
|         /// </summary>
 | |
|         /// <param name="eventName">event name</param>
 | |
|         /// <param name="appId">project ID (optional)</param>
 | |
|         public static void Track(string eventName, string appId = "")
 | |
|         {
 | |
|             Track(eventName, null, appId);
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Track a Event
 | |
|         /// </summary>
 | |
|         /// <param name="eventName">the event name</param>
 | |
|         /// <param name="properties">properties for the event</param>
 | |
|         /// <param name="appId">project ID (optional)</param>
 | |
|         public static void Track(string eventName, Dictionary<string, object> properties, string appId = "")
 | |
|         {
 | |
|             if (tracking_enabled)
 | |
|             {
 | |
|                 TDWrapper.Track(eventName, properties, appId);
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 System.Reflection.MethodBase method = System.Reflection.MethodBase.GetCurrentMethod();
 | |
|                 object[] parameters = new object[] { eventName, properties, appId };
 | |
|                 eventCaches.Add(new Dictionary<string, object>() {
 | |
|                     { "method", method},
 | |
|                     { "parameters", parameters}
 | |
|                 });
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Track a Event
 | |
|         /// </summary>
 | |
|         /// <param name="eventName">the event name</param>
 | |
|         /// <param name="properties">properties for the event</param>
 | |
|         /// <param name="date">date for the event</param>
 | |
|         /// <param name="appId">project ID (optional)</param>
 | |
|         //[Obsolete("Method is deprecated, please use Track(string eventName, Dictionary<string, object> properties, DateTime date, TimeZoneInfo timeZone, string appId = \"\") instead.")]
 | |
|         //public static void Track(string eventName, Dictionary<string, object> properties, DateTime date, string appId = "")
 | |
|         //{
 | |
|         //    if (tracking_enabled)
 | |
|         //    {
 | |
|         //        TDWrapper.Track(eventName, properties, date, appId);
 | |
|         //    }
 | |
|         //    else
 | |
|         //    {
 | |
|         //        System.Reflection.MethodBase method = System.Reflection.MethodBase.GetCurrentMethod();
 | |
|         //        object[] parameters = new object[] { eventName, properties, date, appId };
 | |
|         //        eventCaches.Add(new Dictionary<string, object>() {
 | |
|         //            { "method", method},
 | |
|         //            { "parameters", parameters}
 | |
|         //        });
 | |
|         //    }
 | |
|         //}
 | |
| 
 | |
|         public static void TrackStr(string eventName, string properties = "", string appId = "")
 | |
|         {
 | |
|             if (tracking_enabled)
 | |
|             {
 | |
|                 TDWrapper.TrackStr(eventName, properties, appId);
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 System.Reflection.MethodBase method = System.Reflection.MethodBase.GetCurrentMethod();
 | |
|                 object[] parameters = new object[] { eventName, properties, appId };
 | |
|                 eventCaches.Add(new Dictionary<string, object>() {
 | |
|                     { "method", method},
 | |
|                     { "parameters", parameters}
 | |
|                 });
 | |
|             }
 | |
|         }
 | |
| 
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Track a Event
 | |
|         /// </summary>
 | |
|         /// <param name="eventName">the event name</param>
 | |
|         /// <param name="properties">properties for the event</param>
 | |
|         /// <param name="date">date for the event</param>
 | |
|         /// <param name="timeZone">time zone for the event</param>
 | |
|         /// <param name="appId">project ID (optional)</param>
 | |
|         public static void Track(string eventName, Dictionary<string, object> properties, DateTime time, TimeZoneInfo timeZone, string appId = "")
 | |
|         {
 | |
|             if (tracking_enabled)
 | |
|             {
 | |
|                 TDWrapper.Track(eventName, properties, time, timeZone, appId);
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 System.Reflection.MethodBase method = System.Reflection.MethodBase.GetCurrentMethod();
 | |
|                 object[] parameters = new object[] { eventName, properties, time, timeZone, appId };
 | |
|                 eventCaches.Add(new Dictionary<string, object>() {
 | |
|                     { "method", method},
 | |
|                     { "parameters", parameters}
 | |
|                 });
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Track a Special Event (First Event/Updatable Event/Overwritable Event)
 | |
|         /// </summary>
 | |
|         /// <param name="eventModel">the special event</param>
 | |
|         /// <param name="appId">project ID (optional)</param>
 | |
|         public static void Track(TDEventModel eventModel, string appId = "")
 | |
|         {
 | |
|             if (tracking_enabled)
 | |
|             {
 | |
|                 TDWrapper.Track(eventModel, appId);
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 System.Reflection.MethodBase method = System.Reflection.MethodBase.GetCurrentMethod();
 | |
|                 object[] parameters = new object[] { eventModel, appId };
 | |
|                 eventCaches.Add(new Dictionary<string, object>() {
 | |
|                     { "method", method},
 | |
|                     { "parameters", parameters}
 | |
|                 });
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Quickly track a Special Event
 | |
|         /// </summary>
 | |
|         /// <param name="eventName">the event name, 'SceneView' for scene view event, 'AppClick' for click event</param>
 | |
|         /// <param name="properties"> event properties </param>
 | |
|         /// <param name="appId"></param>
 | |
|         public static void QuickTrack(string eventName, Dictionary<string, object> properties = null, string appId = "")
 | |
|         {
 | |
|             if (tracking_enabled)
 | |
|             {
 | |
|                 TDWrapper.QuickTrack(eventName, properties, appId);
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 System.Reflection.MethodBase method = System.Reflection.MethodBase.GetCurrentMethod();
 | |
|                 object[] parameters = new object[] { eventName, properties, appId };
 | |
|                 eventCaches.Add(new Dictionary<string, object>() {
 | |
|                     { "method", method},
 | |
|                     { "parameters", parameters}
 | |
|                 });
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Report events data to TE server immediately
 | |
|         /// </summary>
 | |
|         /// <param name="appId">project ID (optional)</param>
 | |
|         public static void Flush(string appId = "")
 | |
|         {
 | |
|             if (tracking_enabled)
 | |
|             {
 | |
|                 TDWrapper.Flush(appId);
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 System.Reflection.MethodBase method = System.Reflection.MethodBase.GetCurrentMethod();
 | |
|                 object[] parameters = new object[] { appId };
 | |
|                 eventCaches.Add(new Dictionary<string, object>() {
 | |
|                     { "method", method},
 | |
|                     { "parameters", parameters}
 | |
|                 });
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Scenes load Delegate
 | |
|         /// </summary>
 | |
|         /// <param name="scene">the load scene</param>
 | |
|         /// <param name="mode">the scene loading mode</param>
 | |
|         public static void OnSceneLoaded(Scene scene, LoadSceneMode mode)
 | |
|         {
 | |
|             if (tracking_enabled)
 | |
|             {
 | |
|                 TDWrapper.TrackSceneLoad(scene);
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 System.Reflection.MethodBase method = System.Reflection.MethodBase.GetCurrentMethod();
 | |
|                 object[] parameters = new object[] { scene, mode };
 | |
|                 eventCaches.Add(new Dictionary<string, object>() {
 | |
|                     { "method", method},
 | |
|                     { "parameters", parameters}
 | |
|                 });
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Scenes unload Delegate
 | |
|         /// </summary>
 | |
|         /// <param name="scene">the unload scene</param>
 | |
|         public static void OnSceneUnloaded(Scene scene)
 | |
|         {
 | |
|             if (tracking_enabled)
 | |
|             {
 | |
|                 TDWrapper.TrackSceneUnload(scene);
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 System.Reflection.MethodBase method = System.Reflection.MethodBase.GetCurrentMethod();
 | |
|                 object[] parameters = new object[] { scene };
 | |
|                 eventCaches.Add(new Dictionary<string, object>() {
 | |
|                     { "method", method},
 | |
|                     { "parameters", parameters}
 | |
|                 });
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Super Properties, refer to properties that would be uploaded by each event
 | |
|         /// </summary>
 | |
|         /// <param name="superProperties">super properties for events</param>
 | |
|         /// <param name="appId">project ID (optional)</param>
 | |
|         public static void SetSuperProperties(Dictionary<string, object> properties, string appId = "")
 | |
|         {
 | |
|             if (tracking_enabled)
 | |
|             {
 | |
|                 TDWrapper.SetSuperProperties(properties, appId);
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 System.Reflection.MethodBase method = System.Reflection.MethodBase.GetCurrentMethod();
 | |
|                 object[] parameters = new object[] { properties, appId };
 | |
|                 eventCaches.Add(new Dictionary<string, object>() {
 | |
|                     { "method", method},
 | |
|                     { "parameters", parameters}
 | |
|                 });
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         public static void SetSuperProperties(string properties, string appId = "")
 | |
|         {
 | |
|             if (tracking_enabled)
 | |
|             {
 | |
|                 TDWrapper.SetSuperProperties(properties, appId);
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 System.Reflection.MethodBase method = System.Reflection.MethodBase.GetCurrentMethod();
 | |
|                 object[] parameters = new object[] { properties, appId };
 | |
|                 eventCaches.Add(new Dictionary<string, object>() {
 | |
|                     { "method", method},
 | |
|                     { "parameters", parameters}
 | |
|                 });
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Delete Property form current Super Properties
 | |
|         /// </summary>
 | |
|         /// <param name="property">property name</param>
 | |
|         /// <param name="appId">project ID (optional)</param>
 | |
|         public static void UnsetSuperProperty(string property, string appId  = "")
 | |
|         {
 | |
|             if (tracking_enabled)
 | |
|             {
 | |
|                 TDWrapper.UnsetSuperProperty(property, appId);
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 System.Reflection.MethodBase method = System.Reflection.MethodBase.GetCurrentMethod();
 | |
|                 object[] parameters = new object[] { property, appId };
 | |
|                 eventCaches.Add(new Dictionary<string, object>() {
 | |
|                     { "method", method},
 | |
|                     { "parameters", parameters}
 | |
|                 });
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Returns current Super Properties
 | |
|         /// </summary>
 | |
|         /// <returns>current super properties</returns>
 | |
|         /// <param name="appId">project ID (optional)</param>
 | |
|         public static Dictionary<string, object> GetSuperProperties(string appId = "")
 | |
|         {
 | |
|             if (tracking_enabled)
 | |
|             {
 | |
|                 return TDWrapper.GetSuperProperties(appId);
 | |
|             }
 | |
|             return null;
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Clear current Super Properties
 | |
|         /// </summary>
 | |
|         /// <param name="appId">project ID (optional)</param>
 | |
|         public static void ClearSuperProperties(string appId = "")
 | |
|         {
 | |
|             if (tracking_enabled)
 | |
|             {
 | |
|                 TDWrapper.ClearSuperProperty(appId);
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 System.Reflection.MethodBase method = System.Reflection.MethodBase.GetCurrentMethod();
 | |
|                 object[] parameters = new object[] { appId };
 | |
|                 eventCaches.Add(new Dictionary<string, object>() {
 | |
|                     { "method", method},
 | |
|                     { "parameters", parameters}
 | |
|                 });
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Returns current Preset Properties
 | |
|         /// </summary>
 | |
|         /// <returns>current preset properties</returns>
 | |
|         /// <param name="appId">project ID (optional)</param>
 | |
|         public static TDPresetProperties GetPresetProperties(string appId = "")
 | |
|         {
 | |
|             if (tracking_enabled)
 | |
|             {
 | |
|                 Dictionary<string, object> properties = TDWrapper.GetPresetProperties(appId);
 | |
|                 TDPresetProperties presetProperties = new TDPresetProperties(properties);
 | |
|                 return presetProperties;
 | |
|             }
 | |
|             return null;
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Sets the Dynamic Super Properties.
 | |
|         /// </summary>
 | |
|         /// <param name="dynamicSuperProperties">dynamic super properties interface</param>
 | |
|         /// <param name="appId">project ID (optional)</param>
 | |
|         public static void SetDynamicSuperProperties(TDDynamicSuperPropertiesHandler propertiesHandler, string appId = "")
 | |
|         {
 | |
|             if (tracking_enabled)
 | |
|             {
 | |
|                 TDWrapper.SetDynamicSuperProperties(propertiesHandler, appId);
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 System.Reflection.MethodBase method = System.Reflection.MethodBase.GetCurrentMethod();
 | |
|                 object[] parameters = new object[] { propertiesHandler, appId };
 | |
|                 eventCaches.Add(new Dictionary<string, object>() {
 | |
|                     { "method", method},
 | |
|                     { "parameters", parameters}
 | |
|                 });
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Records Event Duration, call TimeEvent to start timing for the Event, call Track to end timing
 | |
|         /// </summary>
 | |
|         /// <param name="eventName">the event name</param>
 | |
|         /// <param name="appId">project ID (optional)</param>
 | |
|         public static void TimeEvent(string eventName, string appId = "")
 | |
|         {
 | |
|             if (tracking_enabled)
 | |
|             {
 | |
|                 TDWrapper.TimeEvent(eventName, appId);
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 System.Reflection.MethodBase method = System.Reflection.MethodBase.GetCurrentMethod();
 | |
|                 object[] parameters = new object[] { eventName, appId };
 | |
|                 eventCaches.Add(new Dictionary<string, object>() {
 | |
|                     { "method", method},
 | |
|                     { "parameters", parameters}
 | |
|                 });
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Sets User Properties, this will overwrite the original properties value
 | |
|         /// </summary>
 | |
|         /// <param name="properties">user properties</param>
 | |
|         /// <param name="appId">project ID (optional)</param>
 | |
|         public static void UserSet(Dictionary<string, object> properties, string appId = "")
 | |
|         {
 | |
|             if (tracking_enabled)
 | |
|             {
 | |
|                 TDWrapper.UserSet(properties, appId);
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 System.Reflection.MethodBase method = System.Reflection.MethodBase.GetCurrentMethod();
 | |
|                 object[] parameters = new object[] { properties, appId };
 | |
|                 eventCaches.Add(new Dictionary<string, object>() {
 | |
|                     { "method", method},
 | |
|                     { "parameters", parameters}
 | |
|                 });
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         public static void UserSet(string properties, string appId = "")
 | |
|         {
 | |
|             if (tracking_enabled)
 | |
|             {
 | |
|                 TDWrapper.UserSet(properties, appId);
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 System.Reflection.MethodBase method = System.Reflection.MethodBase.GetCurrentMethod();
 | |
|                 object[] parameters = new object[] { properties, appId };
 | |
|                 eventCaches.Add(new Dictionary<string, object>() {
 | |
|                     { "method", method},
 | |
|                     { "parameters", parameters}
 | |
|                 });
 | |
|             }
 | |
|         }
 | |
| 
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Sets User Properties, this will overwrite the original properties value
 | |
|         /// </summary>
 | |
|         /// <param name="properties">user properties</param>
 | |
|         /// <param name="dateTime">date time</param>
 | |
|         /// <param name="appId">project ID (optional)</param>
 | |
|         public static void UserSet(Dictionary<string, object> properties, DateTime dateTime, string appId = "")
 | |
|         {
 | |
|             if (tracking_enabled)
 | |
|             {
 | |
|                 TDWrapper.UserSet(properties, dateTime, appId);
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 System.Reflection.MethodBase method = System.Reflection.MethodBase.GetCurrentMethod();
 | |
|                 object[] parameters = new object[] { properties , dateTime, appId};
 | |
|                 eventCaches.Add(new Dictionary<string, object>() {
 | |
|                     { "method", method},
 | |
|                     { "parameters", parameters}
 | |
|                 });
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Unsets one of User Porperties, this would not create properties that have not been created in TE
 | |
|         /// </summary>
 | |
|         /// <param name="property">the user property name</param>
 | |
|         /// <param name="appId">project ID (optional)</param>
 | |
|         public static void UserUnset(string property, string appId = "")
 | |
|         {
 | |
|             List<string> properties = new List<string>();
 | |
|             properties.Add(property);
 | |
|             UserUnset(properties, appId);
 | |
|         }
 | |
| 
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Unsets some of User Porperties, this would not create properties that have not been created in TE
 | |
|         /// </summary>
 | |
|         /// <param name="properties">the user properties name</param>
 | |
|         /// <param name="appId">project ID (optional)</param>
 | |
|         public static void UserUnset(List<string> properties, string appId = "")
 | |
|         {
 | |
|             if (tracking_enabled)
 | |
|             {
 | |
|                 TDWrapper.UserUnset(properties, appId);
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 System.Reflection.MethodBase method = System.Reflection.MethodBase.GetCurrentMethod();
 | |
|                 object[] parameters = new object[] { properties, appId };
 | |
|                 eventCaches.Add(new Dictionary<string, object>() {
 | |
|                     { "method", method},
 | |
|                     { "parameters", parameters}
 | |
|                 });
 | |
|             }
 | |
| 
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Unsets some of User Porperties, this would not create properties that have not been created in TE
 | |
|         /// </summary>
 | |
|         /// <param name="properties">the user properties name</param>
 | |
|         /// <param name="dateTime">date time</param>
 | |
|         /// <param name="appId">project ID (optional)</param>
 | |
|         public static void UserUnset(List<string> properties, DateTime dateTime, string appId = "")
 | |
|         {
 | |
|             if (tracking_enabled)
 | |
|             {
 | |
|                 TDWrapper.UserUnset(properties, dateTime, appId);
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 System.Reflection.MethodBase method = System.Reflection.MethodBase.GetCurrentMethod();
 | |
|                 object[] parameters = new object[] { properties, dateTime, appId };
 | |
|                 eventCaches.Add(new Dictionary<string, object>() {
 | |
|                     { "method", method},
 | |
|                     { "parameters", parameters}
 | |
|                 });
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Sets User Properties for Once. This message would be neglected, if such property had been set before
 | |
|         /// </summary>
 | |
|         /// <param name="properties">user properties</param>
 | |
|         /// <param name="appId">project ID (optional)</param>
 | |
|         public static void UserSetOnce(Dictionary<string, object> properties, string appId = "")
 | |
|         {
 | |
|             if (tracking_enabled)
 | |
|             {
 | |
|                 TDWrapper.UserSetOnce(properties, appId);
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 System.Reflection.MethodBase method = System.Reflection.MethodBase.GetCurrentMethod();
 | |
|                 object[] parameters = new object[] { properties, appId };
 | |
|                 eventCaches.Add(new Dictionary<string, object>() {
 | |
|                     { "method", method},
 | |
|                     { "parameters", parameters}
 | |
|                 });
 | |
|             }
 | |
| 
 | |
|         }
 | |
| 
 | |
|         public static void UserSetOnce(string properties, string appId = "")
 | |
|         {
 | |
|             if (tracking_enabled)
 | |
|             {
 | |
|                 TDWrapper.UserSetOnce(properties, appId);
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 System.Reflection.MethodBase method = System.Reflection.MethodBase.GetCurrentMethod();
 | |
|                 object[] parameters = new object[] { properties, appId };
 | |
|                 eventCaches.Add(new Dictionary<string, object>() {
 | |
|                     { "method", method},
 | |
|                     { "parameters", parameters}
 | |
|                 });
 | |
|             }
 | |
| 
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Sets User Properties for Once. The property would be neglected, if such property had been set before
 | |
|         /// </summary>
 | |
|         /// <param name="properties">user properties</param>
 | |
|         /// <param name="dateTime">date time</param>
 | |
|         /// <param name="appId">project ID (optional)</param>
 | |
|         public static void UserSetOnce(Dictionary<string, object> properties, DateTime dateTime, string appId = "")
 | |
|         {
 | |
|             if (tracking_enabled)
 | |
|             {
 | |
|                 TDWrapper.UserSetOnce(properties, dateTime, appId);
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 System.Reflection.MethodBase method = System.Reflection.MethodBase.GetCurrentMethod();
 | |
|                 object[] parameters = new object[] { properties, dateTime,appId };
 | |
|                 eventCaches.Add(new Dictionary<string, object>() {
 | |
|                     { "method", method},
 | |
|                     { "parameters", parameters}
 | |
|                 });
 | |
|             }
 | |
| 
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Accumulates the property. If the property has not been set, it would be given a value of 0 before computing. 
 | |
|         /// </summary>
 | |
|         /// <param name="property">the property name</param>
 | |
|         /// <param name="value">value of the property</param>
 | |
|         /// <param name="appId">project ID (optional)</param>
 | |
|         public static void UserAdd(string property, object value, string appId = "")
 | |
|         {
 | |
|             Dictionary<string, object> properties = new Dictionary<string, object>()
 | |
|             {
 | |
|                 { property, value }
 | |
|             };
 | |
|             UserAdd(properties, appId);
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Accumulates the property. If the property has not been set, it would be given a value of 0 before computing. 
 | |
|         /// </summary>
 | |
|         /// <param name="properties">user properties</param>
 | |
|         /// <param name="appId">project ID (optional)</param>
 | |
|         public static void UserAdd(Dictionary<string, object> properties, string appId = "")
 | |
|         {
 | |
|             if (tracking_enabled)
 | |
|             {
 | |
|                 TDWrapper.UserAdd(properties, appId);
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 System.Reflection.MethodBase method = System.Reflection.MethodBase.GetCurrentMethod();
 | |
|                 object[] parameters = new object[] { properties, appId };
 | |
|                 eventCaches.Add(new Dictionary<string, object>() {
 | |
|                     { "method", method},
 | |
|                     { "parameters", parameters}
 | |
|                 });
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         public static void UserAddStr(string properties, string appId = "")
 | |
|         {
 | |
|             if (tracking_enabled)
 | |
|             {
 | |
|                 TDWrapper.UserAddStr(properties, appId);
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 System.Reflection.MethodBase method = System.Reflection.MethodBase.GetCurrentMethod();
 | |
|                 object[] parameters = new object[] { properties, appId };
 | |
|                 eventCaches.Add(new Dictionary<string, object>() {
 | |
|                     { "method", method},
 | |
|                     { "parameters", parameters}
 | |
|                 });
 | |
|             }
 | |
|         }
 | |
| 
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Accumulates the property, type of Number. If the property has not been set, it would be given a value of 0 before computing. 
 | |
|         /// </summary>
 | |
|         /// <param name="properties">user properties</param>
 | |
|         /// <param name="dateTime">date time</param>
 | |
|         /// <param name="appId">project ID (optional)</param>
 | |
|         public static void UserAdd(Dictionary<string, object> properties, DateTime dateTime, string appId = "")
 | |
|         {
 | |
|             if (tracking_enabled)
 | |
|             {
 | |
|                 TDWrapper.UserAdd(properties, dateTime, appId);
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 System.Reflection.MethodBase method = System.Reflection.MethodBase.GetCurrentMethod();
 | |
|                 object[] parameters = new object[] { properties, dateTime, appId };
 | |
|                 eventCaches.Add(new Dictionary<string, object>() {
 | |
|                     { "method", method},
 | |
|                     { "parameters", parameters}
 | |
|                 });
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Appends the property, type of List.
 | |
|         /// </summary>
 | |
|         /// <param name="properties">user properties</param>
 | |
|         /// <param name="appId">project ID (optional)</param>
 | |
|         public static void UserAppend(Dictionary<string, object> properties, string appId = "")
 | |
|         {
 | |
|             if (tracking_enabled)
 | |
|             {
 | |
|                 TDWrapper.UserAppend(properties, appId);
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 System.Reflection.MethodBase method = System.Reflection.MethodBase.GetCurrentMethod();
 | |
|                 object[] parameters = new object[] { properties, appId };
 | |
|                 eventCaches.Add(new Dictionary<string, object>() {
 | |
|                     { "method", method},
 | |
|                     { "parameters", parameters}
 | |
|                 });
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         public static void UserAppend(string properties, string appId = "")
 | |
|         {
 | |
|             if (tracking_enabled)
 | |
|             {
 | |
|                 TDWrapper.UserAppend(properties, appId);
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 System.Reflection.MethodBase method = System.Reflection.MethodBase.GetCurrentMethod();
 | |
|                 object[] parameters = new object[] { properties, appId };
 | |
|                 eventCaches.Add(new Dictionary<string, object>() {
 | |
|                     { "method", method},
 | |
|                     { "parameters", parameters}
 | |
|                 });
 | |
|             }
 | |
|         }
 | |
| 
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Appends the property, type of List.
 | |
|         /// </summary>
 | |
|         /// <param name="properties">user properties</param>
 | |
|         /// <param name="dateTime">date time</param>
 | |
|         /// <param name="appId">project ID (optional)</param>
 | |
|         public static void UserAppend(Dictionary<string, object> properties, DateTime dateTime, string appId = "")
 | |
|         {
 | |
|             if (tracking_enabled)
 | |
|             {
 | |
|                 TDWrapper.UserAppend(properties, dateTime, appId);
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 System.Reflection.MethodBase method = System.Reflection.MethodBase.GetCurrentMethod();
 | |
|                 object[] parameters = new object[] { properties, dateTime, appId };
 | |
|                 eventCaches.Add(new Dictionary<string, object>() {
 | |
|                     { "method", method},
 | |
|                     { "parameters", parameters}
 | |
|                 });
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Appends the property Uniquely, type of List. If the property has been set, it would be neglected
 | |
|         /// </summary>
 | |
|         /// <param name="properties">user properties</param>
 | |
|         /// <param name="appId">project ID (optional)</param>
 | |
|         public static void UserUniqAppend(Dictionary<string, object> properties, string appId = "")
 | |
|         {
 | |
|             if (tracking_enabled)
 | |
|             {
 | |
|                 TDWrapper.UserUniqAppend(properties, appId);
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 System.Reflection.MethodBase method = System.Reflection.MethodBase.GetCurrentMethod();
 | |
|                 object[] parameters = new object[] { properties, appId };
 | |
|                 eventCaches.Add(new Dictionary<string, object>() {
 | |
|                     { "method", method},
 | |
|                     { "parameters", parameters}
 | |
|                 });
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         public static void UserUniqAppend(string properties, string appId = "")
 | |
|         {
 | |
|             if (tracking_enabled)
 | |
|             {
 | |
|                 TDWrapper.UserUniqAppend(properties, appId);
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 System.Reflection.MethodBase method = System.Reflection.MethodBase.GetCurrentMethod();
 | |
|                 object[] parameters = new object[] { properties, appId };
 | |
|                 eventCaches.Add(new Dictionary<string, object>() {
 | |
|                     { "method", method},
 | |
|                     { "parameters", parameters}
 | |
|                 });
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Appends the property Uniquely, type of List. If the property has been set, it would be neglected
 | |
|         /// </summary>
 | |
|         /// <param name="properties">user prpoerties</param>
 | |
|         /// <param name="dateTime">date time</param>
 | |
|         /// <param name="appId">project ID (optional)</param>
 | |
|         public static void UserUniqAppend(Dictionary<string, object> properties, DateTime dateTime, string appId = "")
 | |
|         {
 | |
|             if (tracking_enabled)
 | |
|             {
 | |
|                 TDWrapper.UserUniqAppend(properties, dateTime, appId);
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 System.Reflection.MethodBase method = System.Reflection.MethodBase.GetCurrentMethod();
 | |
|                 object[] parameters = new object[] { properties, dateTime, appId };
 | |
|                 eventCaches.Add(new Dictionary<string, object>() {
 | |
|                     { "method", method},
 | |
|                     { "parameters", parameters}
 | |
|                 });
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Deletes All Properties for a user, the events triggered by the user are still exist
 | |
|         /// </summary>
 | |
|         /// <param name="appId">project ID (optional)</param>
 | |
|         public static void UserDelete(string appId = "")
 | |
|         {
 | |
|             if (tracking_enabled)
 | |
|             {
 | |
|                 TDWrapper.UserDelete(appId);
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 System.Reflection.MethodBase method = System.Reflection.MethodBase.GetCurrentMethod();
 | |
|                 object[] parameters = new object[] { appId };
 | |
|                 eventCaches.Add(new Dictionary<string, object>() {
 | |
|                     { "method", method},
 | |
|                     { "parameters", parameters}
 | |
|                 });
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Deletes All Properties for a user, the events triggered by the user are still exist
 | |
|         /// </summary>
 | |
|         /// <param name="dateTime">date time</param>
 | |
|         /// <param name="appId">project ID (optional)</param>
 | |
|         //public static void UserDelete(DateTime dateTime, string appId = "")
 | |
|         //{
 | |
|         //    if (tracking_enabled)
 | |
|         //    {
 | |
|         //        TDWrapper.UserDelete(dateTime, appId);
 | |
|         //    }
 | |
|         //    else
 | |
|         //    {
 | |
|         //        System.Reflection.MethodBase method = System.Reflection.MethodBase.GetCurrentMethod();
 | |
|         //        object[] parameters = new object[] { dateTime, appId };
 | |
|         //        eventCaches.Add(new Dictionary<string, object>() {
 | |
|         //            { "method", method},
 | |
|         //            { "parameters", parameters}
 | |
|         //        });
 | |
|         //    }
 | |
|         //}
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Sets Network Type for report date to TE
 | |
|         /// </summary>
 | |
|         /// <param name="networkType">network type, see TDNetworkType</param>
 | |
|         /// <param name="appId">project ID (optional)</param>
 | |
|         public static void SetNetworkType(TDNetworkType networkType, string appId =  "")
 | |
|         {
 | |
|             if (tracking_enabled)
 | |
|             {
 | |
|                 TDWrapper.SetNetworkType(networkType);
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 System.Reflection.MethodBase method = System.Reflection.MethodBase.GetCurrentMethod();
 | |
|                 object[] parameters = new object[] { networkType, appId };
 | |
|                 eventCaches.Add(new Dictionary<string, object>() {
 | |
|                     { "method", method},
 | |
|                     { "parameters", parameters}
 | |
|                 });
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Gets TDAnalytics SDK version
 | |
|         /// </summary>
 | |
|         /// <returns>SDK version</returns>
 | |
|         public static string GetSDKVersion()
 | |
|         {
 | |
|             return TDPublicConfig.LIB_VERSION;
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Gets the device identifier.
 | |
|         /// </summary>
 | |
|         /// <returns>The device identifier.</returns>
 | |
|         public static string GetDeviceId()
 | |
|         {
 | |
|             if (tracking_enabled)
 | |
|             {
 | |
|                 return TDWrapper.GetDeviceId();
 | |
|             } 
 | |
|             return null;
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Sets Data Report Status
 | |
|         /// </summary>
 | |
|         /// <param name="status">data report status, see TDTrackStatus</param>
 | |
|         /// <param name="appId">project ID (optional)</param>
 | |
|         public static void SetTrackStatus(TDTrackStatus status, string appId = "")
 | |
|         {
 | |
|             if (tracking_enabled)
 | |
|             {
 | |
|                 TDWrapper.SetTrackStatus(status, appId);
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 System.Reflection.MethodBase method = System.Reflection.MethodBase.GetCurrentMethod();
 | |
|                 object[] parameters = new object[] { status, appId };
 | |
|                 eventCaches.Add(new Dictionary<string, object>() {
 | |
|                     { "method", method},
 | |
|                     { "parameters", parameters}
 | |
|                 });
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Stops Report Event Data, and Clear Cache Data (include unreported event data, custom distinct ID, account ID, Super Properties)
 | |
|         /// </summary>
 | |
|         /// <param name="appId">project ID (optional)</param>
 | |
|         [Obsolete("Method is deprecated, please use SetTrackStatus() instead.")]
 | |
|         public static void OptOutTracking(string appId = "")
 | |
|         {
 | |
|             if (tracking_enabled)
 | |
|             {
 | |
|                 TDWrapper.OptOutTracking(appId);
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 System.Reflection.MethodBase method = System.Reflection.MethodBase.GetCurrentMethod();
 | |
|                 object[] parameters = new object[] { appId };
 | |
|                 eventCaches.Add(new Dictionary<string, object>() {
 | |
|                     { "method", method},
 | |
|                     { "parameters", parameters}
 | |
|                 });
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Stops Report Event Data, and Clear Cache Data (include unreported event data, custom distinct ID, account ID, super properties), and Delete User
 | |
|         /// </summary>
 | |
|         /// <param name="appId">project ID (optional)</param>
 | |
|         [Obsolete("Method is deprecated, please use SetTrackStatus() instead.")]
 | |
|         public static void OptOutTrackingAndDeleteUser(string appId = "")
 | |
|         {
 | |
|             if (tracking_enabled)
 | |
|             {
 | |
|                 TDWrapper.OptOutTrackingAndDeleteUser(appId);
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 System.Reflection.MethodBase method = System.Reflection.MethodBase.GetCurrentMethod();
 | |
|                 object[] parameters = new object[] { appId };
 | |
|                 eventCaches.Add(new Dictionary<string, object>() {
 | |
|                     { "method", method},
 | |
|                     { "parameters", parameters}
 | |
|                 });
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Resumes Report Event Data
 | |
|         /// </summary>
 | |
|         /// <param name="appId">project ID (optional)</param>
 | |
|         [Obsolete("Method is deprecated, please use SetTrackStatus() instead.")]
 | |
|         public static void OptInTracking(string appId = "")
 | |
|         {
 | |
|             if (tracking_enabled)
 | |
|             {
 | |
|                 TDWrapper.OptInTracking(appId);
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 System.Reflection.MethodBase method = System.Reflection.MethodBase.GetCurrentMethod();
 | |
|                 object[] parameters = new object[] { appId };
 | |
|                 eventCaches.Add(new Dictionary<string, object>() {
 | |
|                     { "method", method},
 | |
|                     { "parameters", parameters}
 | |
|                 });
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Enable Report Event Data
 | |
|         /// </summary>
 | |
|         /// <param name="enabled">Whether to enable reported data</param>
 | |
|         /// <param name="appId">project ID (optional)</param>
 | |
|         [Obsolete("Method is deprecated, please use SetTrackStatus() instead.")]
 | |
|         public static void EnableTracking(bool enabled, string appId = "")
 | |
|         {
 | |
|             if (tracking_enabled)
 | |
|             {
 | |
|                 TDWrapper.EnableTracking(enabled, appId);
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 System.Reflection.MethodBase method = System.Reflection.MethodBase.GetCurrentMethod();
 | |
|                 object[] parameters = new object[] { enabled, appId };
 | |
|                 eventCaches.Add(new Dictionary<string, object>() {
 | |
|                     { "method", method},
 | |
|                     { "parameters", parameters}
 | |
|                 });
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Creats Light Instance, it has same project ID to main instance, diffent distinct ID, account ID, super properties
 | |
|         /// </summary>
 | |
|         /// <param name="appId">project ID (optional)</param>
 | |
|         /// <returns>light instance token </returns>
 | |
|         public static string LightInstance(string appId = "") {
 | |
|             if (tracking_enabled)
 | |
|             {
 | |
|                 return TDWrapper.CreateLightInstance();
 | |
|             }
 | |
|             return null;
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Calibrate Event Time, calibrated times are used for events after that
 | |
|         /// If both CalibrateTime and CalibrateTimeWithNtp are called, the event time is based on the CalibrateTimeWithNtp result.
 | |
|         /// </summary>
 | |
|         /// <param name="timestamp">currnt Unix timestamp, units Ms </param>
 | |
|         public static void CalibrateTime(long timestamp)
 | |
|         {
 | |
|             TDWrapper.CalibrateTime(timestamp);
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Calibrate Event Time, calibrated times are used for events after that
 | |
|         /// If NTP server is not returns in 3s, the time will not be re-calibrated
 | |
|         /// If both CalibrateTime and CalibrateTimeWithNtp are called, the event time is based on the CalibrateTimeWithNtp result.
 | |
|         /// </summary>
 | |
|         /// <param name="ntpServer">NTP server, e.g 'time.asia.apple.com' </param>
 | |
|         public static void CalibrateTimeWithNtp(string ntpServer)
 | |
|         {
 | |
|             TDWrapper.CalibrateTimeWithNtp(ntpServer);
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Cross Platform
 | |
|         /// Share TE account system info to other platforms
 | |
|         /// </summary>
 | |
|         /// <param name="shareType">type of platforms, see TDThirdPartyType</param>
 | |
|         /// <param name="properties">properties of platforms</param>
 | |
|         /// <param name="appId">project ID (optional)</param>
 | |
|         public static void EnableThirdPartySharing(TDThirdPartyType shareType, Dictionary<string, object> properties = null, string appId = "")
 | |
|         {
 | |
|             if (tracking_enabled)
 | |
|             {
 | |
|                 TDWrapper.EnableThirdPartySharing(shareType, properties, appId);
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 System.Reflection.MethodBase method = System.Reflection.MethodBase.GetCurrentMethod();
 | |
|                 object[] parameters = new object[] { shareType };
 | |
|                 eventCaches.Add(new Dictionary<string, object>() {
 | |
|                     { "method", method},
 | |
|                     { "parameters", parameters}
 | |
|                 });
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Gets the Local Country/Region Code
 | |
|         /// the two-letter code defined in ISO 3166 for the country/region
 | |
|         /// </summary>
 | |
|         /// <returns>country/region code</returns>
 | |
|         public static string GetLocalRegion()
 | |
|         {
 | |
|             return System.Globalization.RegionInfo.CurrentRegion.TwoLetterISORegionName;
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Start Thinking Analytics SDK
 | |
|         /// </summary>
 | |
|         /// <param name="appId">project ID</param>
 | |
|         /// <param name="serverUrl">project URL</param>
 | |
|         public static void Init(string appId, string serverUrl)
 | |
|         {
 | |
|             TDConfig tDConfig = new TDConfig(appId, serverUrl);
 | |
|             Init(tDConfig);
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Start Thinking Analytics SDK
 | |
|         /// </summary>
 | |
|         /// <param name="config">project setting, see TDConfig</param>
 | |
|         public static void Init(TDConfig config)
 | |
|         {
 | |
|             new GameObject("ThinkingData", typeof(TDAnalytics));
 | |
|             TDConfig[] configs = new TDConfig[1];
 | |
|             configs[0] = config;
 | |
|             TDAnalytics.Init(configs);
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Start Thinking Analytics SDK
 | |
|         /// </summary>
 | |
|         /// <param name="configs">projects setting, see TDConfig</param>
 | |
|         public static void Init(TDConfig[] configs = null)
 | |
|         {
 | |
|             #if DISABLE_TA
 | |
|             tracking_enabled = false;
 | |
|             #else
 | |
|             tracking_enabled = true;
 | |
|             #endif
 | |
| 
 | |
|             if (tracking_enabled)
 | |
|             {
 | |
|                 TDPublicConfig.GetPublicConfig();
 | |
|                 TDLog.EnableLog(sThinkingData.enableLog);
 | |
|                 TDWrapper.EnableLog(sThinkingData.enableLog);
 | |
|                 TDWrapper.SetVersionInfo(TDPublicConfig.LIB_VERSION);
 | |
|                 if (configs == null)
 | |
|                 {
 | |
|                     configs = sThinkingData.configs;
 | |
|                 }
 | |
|                 try
 | |
|                 {
 | |
|                     for (int i = 0; i < configs.Length; i++)
 | |
|                     {
 | |
|                         TDConfig config = configs[i];
 | |
|                         if (!string.IsNullOrEmpty(config.appId))
 | |
|                         {
 | |
|                             config.appId = config.appId.Replace(" ", "");
 | |
|                             TDWrapper.ShareInstance(config, sThinkingData);
 | |
|                             TDWrapper.SetNetworkType(sThinkingData.networkType);
 | |
|                             if (TDLog.GetEnable()) TDLog.i(string.Format("TDAnalytics SDK initialize success, AppId = {0}, ServerUrl = {1}, Mode = {2}, TimeZone = {3}, DeviceId = {4}, Lib = Unity, LibVersion = {5}{6}", config.appId, config.serverUrl, config.mode, config.timeZone, GetDeviceId(), GetSDKVersion(), (config.name != null ? (", Name = " + config.name) : "")));
 | |
|                         }
 | |
|                     }
 | |
|                 }
 | |
|                 catch (Exception ex)
 | |
|                 {
 | |
|                     if(TDLog.GetEnable()) TDLog.i("ThinkingAnalytics start Error: " + ex.Message);
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             FlushEventCaches();
 | |
|         }
 | |
| 
 | |
|         #region internal
 | |
|         private static void FlushEventCaches()
 | |
|         {
 | |
|             List<Dictionary<string, object>> tmpEventCaches = new List<Dictionary<string, object>>(eventCaches);
 | |
|             eventCaches.Clear();
 | |
|             foreach (Dictionary<string, object> eventCache in tmpEventCaches)
 | |
|             {
 | |
|                 if (eventCache.ContainsKey("method") && eventCache.ContainsKey("parameters"))
 | |
|                 {
 | |
|                     System.Reflection.MethodBase method = (System.Reflection.MethodBase)eventCache["method"];
 | |
|                     object[] parameters = (object[])eventCache["parameters"];
 | |
|                     method.Invoke(null, parameters);
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         private void Awake()
 | |
|         {
 | |
|             if (sThinkingData == null)
 | |
|             {
 | |
|                 sThinkingData = this;
 | |
|                 DontDestroyOnLoad(gameObject);
 | |
|             } 
 | |
|             else
 | |
|             {
 | |
|                 Destroy(gameObject);
 | |
|                 return;
 | |
|             }
 | |
| 
 | |
|             if (this.startManually == false) 
 | |
|             {
 | |
|                 TDAnalytics.Init();
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         private void Start()
 | |
|         {
 | |
|         }
 | |
| 
 | |
|         private void OnApplicationQuit()
 | |
|         {
 | |
|             //Scene scene = SceneManager.GetActiveScene();
 | |
|             //if (scene != null)
 | |
|             //{
 | |
|             //    OnSceneUnloaded(scene);
 | |
|             //}
 | |
|         }
 | |
| 
 | |
|         private static TDAnalytics sThinkingData;
 | |
|         private static bool tracking_enabled = false;
 | |
|         private static List<Dictionary<string, object>> eventCaches = new List<Dictionary<string, object>>();
 | |
|         #endregion
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// SDK Configuration information class
 | |
|     /// </summary>
 | |
|     [System.Serializable]
 | |
|     public class TDConfig
 | |
|     {
 | |
|         /// <summary>
 | |
|         /// Project ID
 | |
|         /// </summary>
 | |
|         public string appId;
 | |
|         /// <summary>
 | |
|         /// Project URL
 | |
|         /// </summary>
 | |
|         public string serverUrl;
 | |
|         /// <summary>
 | |
|         /// SDK Mode
 | |
|         /// </summary>
 | |
|         public TDMode mode;
 | |
|         /// <summary>
 | |
|         /// TIme Zone Type
 | |
|         /// </summary>
 | |
|         public TDTimeZone timeZone;
 | |
|         /// <summary>
 | |
|         /// Time Zone ID
 | |
|         /// </summary>
 | |
|         public string timeZoneId;
 | |
|         /// <summary>
 | |
|         /// enable data encryption, default is false (iOS/Android only)
 | |
|         /// </summary>
 | |
|         internal bool enableEncrypt;
 | |
|         /// <summary>
 | |
|         /// secret key version (iOS/Android only)
 | |
|         /// </summary>
 | |
|         internal int encryptVersion;
 | |
|         /// <summary>
 | |
|         /// public secret key (iOS/Android only)
 | |
|         /// </summary>
 | |
|         internal string encryptPublicKey;
 | |
|         internal string symType;
 | |
|         internal string asymType;
 | |
|         /// <summary>
 | |
|         /// SSL Pinning mode, default is NONE (iOS/Android only)
 | |
|         /// </summary>
 | |
|         public TDSSLPinningMode pinningMode;
 | |
|         /// <summary>
 | |
|         /// allow invalid certificates, default is false (iOS/Android only)
 | |
|         /// </summary>
 | |
|         public bool allowInvalidCertificates;
 | |
|         /// <summary>
 | |
|         /// enable to verify domain name, default is true (iOS/Android only)
 | |
|         /// </summary>
 | |
|         public bool validatesDomainName;
 | |
|         /// <summary>
 | |
|         /// SDK instance name, to call SDK quickly
 | |
|         /// </summary>
 | |
|         public string name { set { if (!string.IsNullOrEmpty(value)) sName = value.Replace(" ", ""); } get { return sName; } } // instances name
 | |
|         private string sName;
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Construct TDConfig instance
 | |
|         /// </summary>
 | |
|         /// <param name="appId"> project ID</param>
 | |
|         /// <param name="serverUrl"> project URL </param>
 | |
|         public TDConfig(string appId, string serverUrl)
 | |
|         {
 | |
|             this.appId = appId.Replace(" ", "");
 | |
|             this.serverUrl = serverUrl;
 | |
|             this.mode = TDMode.Normal;
 | |
|             this.timeZone = TDTimeZone.Local;
 | |
|             this.timeZoneId = null;
 | |
|             this.enableEncrypt = false;
 | |
|             this.encryptPublicKey = null;
 | |
|             this.encryptVersion = 0;
 | |
|             this.symType = null;
 | |
|             this.asymType = null;
 | |
|             this.pinningMode = TDSSLPinningMode.NONE;
 | |
|             this.allowInvalidCertificates = false;
 | |
|             this.validatesDomainName = true;
 | |
|         }
 | |
| 
 | |
|         public void EnableEncrypt(string publicKey, int version = 0, string symType = "", string asymType = "")
 | |
|         {
 | |
|             this.enableEncrypt = true;
 | |
|             this.encryptVersion = version;
 | |
|             this.encryptPublicKey = publicKey;
 | |
|             this.symType = symType;
 | |
|             this.asymType = asymType;
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Get Time Zone Identify Code in SDK
 | |
|         /// </summary>
 | |
|         /// <returns> Time Zone ID </returns>
 | |
|         public string getTimeZoneId()
 | |
|         {
 | |
|             switch (timeZone)
 | |
|             {
 | |
|                 case TDTimeZone.UTC:
 | |
|                     return "UTC";
 | |
|                 case TDTimeZone.Asia_Shanghai:
 | |
|                     return "Asia/Shanghai";
 | |
|                 case TDTimeZone.Asia_Tokyo:
 | |
|                     return "Asia/Tokyo";
 | |
|                 case TDTimeZone.America_Los_Angeles:
 | |
|                     return "America/Los_Angeles";
 | |
|                 case TDTimeZone.America_New_York:
 | |
|                     return "America/New_York";
 | |
|                 case TDTimeZone.Other:
 | |
|                     return timeZoneId;
 | |
|                 default:
 | |
|                     break;
 | |
|             }
 | |
|             return null;
 | |
|         }
 | |
|     }
 | |
| 
 | |
| }
 |