508 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			508 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			C#
		
	
	
	
| using System;
 | |
| using System.Collections.Generic;
 | |
| using ThinkingData.Analytics.Utils;
 | |
| using UnityEngine;
 | |
| using UnityEngine.SceneManagement;
 | |
| 
 | |
| namespace ThinkingData.Analytics.Wrapper
 | |
| {
 | |
|     public partial class TDWrapper
 | |
|     {
 | |
|         public static MonoBehaviour sMono;
 | |
|         private static TDDynamicSuperPropertiesHandler mDynamicSuperProperties;
 | |
|         private static Dictionary<string, TDAutoTrackEventHandler> mAutoTrackEventCallbacks = new Dictionary<string, TDAutoTrackEventHandler>();
 | |
|         private static Dictionary<string, Dictionary<string, object>> mAutoTrackProperties = new Dictionary<string, Dictionary<string, object>>();
 | |
|         private static Dictionary<string, TDAutoTrackEventType> mAutoTrackEventInfos = new Dictionary<string, TDAutoTrackEventType>();
 | |
|         private static System.Random rnd = new System.Random();
 | |
| 
 | |
|         private static string default_appId = null;
 | |
| 
 | |
|         // add Dictionary to Dictionary
 | |
|         public static void AddDictionary(Dictionary<string, object> originalDic, Dictionary<string, object> subDic)
 | |
|         {
 | |
|             if (originalDic != subDic)
 | |
|             {
 | |
|                 foreach (KeyValuePair<string, object> kv in subDic)
 | |
|                 {
 | |
|                     originalDic[kv.Key] = kv.Value;
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         private static string serilize<T>(Dictionary<string, T> data) {
 | |
|             return TDMiniJson.Serialize(data, getTimeString);
 | |
|         }
 | |
| 
 | |
|         public static void ShareInstance(TDConfig token, MonoBehaviour mono, bool initRequired = true)
 | |
|         {
 | |
|             sMono = mono;
 | |
|             if (string.IsNullOrEmpty(default_appId)) default_appId = token.appId;
 | |
|             if (initRequired) init(token);
 | |
|         }
 | |
| 
 | |
|         public static void EnableLog(bool enable)
 | |
|         {
 | |
|             enableLog(enable);
 | |
|         }
 | |
| 
 | |
|         public static void SetVersionInfo(string version)
 | |
|         {
 | |
|             setVersionInfo("Unity", version);
 | |
|         }
 | |
| 
 | |
|         public static void SetDistinctId(string uniqueId, string appId)
 | |
|         {
 | |
|             identify(uniqueId, appId);
 | |
|         }
 | |
| 
 | |
|         public static string GetDistinctId(string appId)
 | |
|         {
 | |
|             return getDistinctId(appId);
 | |
|         }
 | |
| 
 | |
|         public static void Login(string accountId, string appId)
 | |
|         {
 | |
|             login(accountId, appId);
 | |
|         }
 | |
| 
 | |
|         public static void Logout(string appId)
 | |
|         {
 | |
|             logout(appId);
 | |
|         }
 | |
| 
 | |
|         public static void EnableAutoTrack(TDAutoTrackEventType events, Dictionary<string, object> properties, string appId)
 | |
|         {
 | |
|             if (string.IsNullOrEmpty(appId)) appId = default_appId;
 | |
|             UpdateAutoTrackSceneInfos(events, appId);
 | |
|             SetAutoTrackProperties(events, properties, appId);
 | |
|             enableAutoTrack(events, properties, appId);
 | |
|             if ((events & TDAutoTrackEventType.AppSceneLoad) != 0)
 | |
|             {
 | |
|                 TrackSceneLoad(SceneManager.GetActiveScene(), appId);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         public static void EnableAutoTrack(TDAutoTrackEventType events, TDAutoTrackEventHandler eventCallback, string appId)
 | |
|         {
 | |
|             if (string.IsNullOrEmpty(appId)) appId = default_appId;
 | |
|             UpdateAutoTrackSceneInfos(events, appId);
 | |
|             mAutoTrackEventCallbacks[appId] = eventCallback;
 | |
|             //mAutoTrackEventCallback = eventCallback;
 | |
|             enableAutoTrack(events, eventCallback, appId);
 | |
|             if ((events & TDAutoTrackEventType.AppSceneLoad) != 0)
 | |
|             {
 | |
|                 TrackSceneLoad(SceneManager.GetActiveScene(), appId);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         private static string TDAutoTrackEventType_APP_SCENE_LOAD = "AppSceneLoad";
 | |
|         private static string TDAutoTrackEventType_APP_SCENE_UNLOAD = "AppSceneUnload";
 | |
|         public static void SetAutoTrackProperties(TDAutoTrackEventType events, Dictionary<string, object> properties, string appId)
 | |
|         {
 | |
|             if ((events & TDAutoTrackEventType.AppSceneLoad) != 0)
 | |
|             {
 | |
|                 if (mAutoTrackProperties.ContainsKey(TDAutoTrackEventType_APP_SCENE_LOAD))
 | |
|                 {
 | |
|                     AddDictionary(mAutoTrackProperties[TDAutoTrackEventType_APP_SCENE_LOAD], properties);
 | |
|                 }
 | |
|                 else
 | |
|                     mAutoTrackProperties[TDAutoTrackEventType_APP_SCENE_LOAD] = properties;
 | |
|             }
 | |
|             if ((events & TDAutoTrackEventType.AppSceneUnload) != 0)
 | |
|             {
 | |
|                 if (mAutoTrackProperties.ContainsKey(TDAutoTrackEventType_APP_SCENE_UNLOAD))
 | |
|                 {
 | |
|                     AddDictionary(mAutoTrackProperties[TDAutoTrackEventType_APP_SCENE_UNLOAD], properties);
 | |
|                 }
 | |
|                 else
 | |
|                     mAutoTrackProperties[TDAutoTrackEventType_APP_SCENE_UNLOAD] = properties;
 | |
|             }
 | |
|             setAutoTrackProperties(events, properties, appId);
 | |
|         }
 | |
| 
 | |
|         public static void TrackSceneLoad(Scene scene, string appId = "")
 | |
|         {
 | |
|             Dictionary<string, object> properties = new Dictionary<string, object>() {
 | |
|                 { "#scene_name", scene.name },
 | |
|                 { "#scene_path", scene.path }
 | |
|             };
 | |
|             if (mAutoTrackProperties.ContainsKey(TDAutoTrackEventType_APP_SCENE_LOAD))
 | |
|             {
 | |
|                 AddDictionary(properties, mAutoTrackProperties[TDAutoTrackEventType_APP_SCENE_LOAD]);
 | |
|             }
 | |
|             if (string.IsNullOrEmpty(appId))
 | |
|             {
 | |
|                 foreach (var kv in mAutoTrackEventInfos)
 | |
|                 {
 | |
|                     Dictionary<string, object> finalProperties = new Dictionary<string, object>(properties);
 | |
|                     if (mAutoTrackEventCallbacks.ContainsKey(kv.Key))
 | |
|                     {
 | |
|                         AddDictionary(finalProperties, mAutoTrackEventCallbacks[kv.Key].GetAutoTrackEventProperties((int)TDAutoTrackEventType.AppSceneLoad, properties));
 | |
|                     }
 | |
|                     if ((kv.Value & TDAutoTrackEventType.AppSceneLoad) != 0)
 | |
|                     {
 | |
|                         Track("ta_scene_loaded", finalProperties, kv.Key);
 | |
|                     }
 | |
|                     if ((kv.Value & TDAutoTrackEventType.AppSceneUnload) != 0)
 | |
|                     {
 | |
|                         TimeEvent("ta_scene_unloaded", kv.Key);
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 Dictionary<string, object> finalProperties = new Dictionary<string, object>(properties);
 | |
|                 if (mAutoTrackEventCallbacks.ContainsKey(appId))
 | |
|                 {
 | |
|                     AddDictionary(finalProperties, mAutoTrackEventCallbacks[appId].GetAutoTrackEventProperties((int)TDAutoTrackEventType.AppSceneLoad, properties));
 | |
|                 }
 | |
|                 Track("ta_scene_loaded", finalProperties, appId);
 | |
|                 TimeEvent("ta_scene_unloaded", appId);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         public static void TrackSceneUnload(Scene scene, string appId = "")
 | |
|         {
 | |
|             Dictionary<string, object> properties = new Dictionary<string, object>() {
 | |
|                 { "#scene_name", scene.name },
 | |
|                 { "#scene_path", scene.path }
 | |
|             };
 | |
|             if (mAutoTrackProperties.ContainsKey(TDAutoTrackEventType_APP_SCENE_UNLOAD))
 | |
|             {
 | |
|                 AddDictionary(properties, mAutoTrackProperties[TDAutoTrackEventType_APP_SCENE_UNLOAD]);
 | |
|             }
 | |
|             foreach (var kv in mAutoTrackEventInfos)
 | |
|             {
 | |
|                 Dictionary<string, object> finalProperties = new Dictionary<string, object>(properties);
 | |
|                 if (mAutoTrackEventCallbacks.ContainsKey(kv.Key))
 | |
|                 {
 | |
|                     AddDictionary(finalProperties, mAutoTrackEventCallbacks[kv.Key].GetAutoTrackEventProperties((int)TDAutoTrackEventType.AppSceneUnload, properties));
 | |
|                 }
 | |
|                 if ((kv.Value & TDAutoTrackEventType.AppSceneUnload) != 0)
 | |
|                 {
 | |
|                     Track("ta_scene_unloaded", finalProperties, kv.Key);
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         private static void UpdateAutoTrackSceneInfos(TDAutoTrackEventType events, string appId = "")
 | |
|         {
 | |
|             if (string.IsNullOrEmpty(appId)) appId = default_appId;
 | |
|             mAutoTrackEventInfos[appId] = events;
 | |
|         }
 | |
| 
 | |
|         private static Dictionary<string, object> getFinalEventProperties(Dictionary<string, object> properties)
 | |
|         {
 | |
|             TDPropertiesChecker.CheckProperties(properties);
 | |
| 
 | |
|             if (null != mDynamicSuperProperties)
 | |
|             {
 | |
|                 Dictionary<string, object> finalProperties = new Dictionary<string, object>();
 | |
|                 TDPropertiesChecker.MergeProperties(mDynamicSuperProperties.GetDynamicSuperProperties(), finalProperties);
 | |
|                 TDPropertiesChecker.MergeProperties(properties, finalProperties);
 | |
|                 return finalProperties;
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 return properties;
 | |
|             }
 | |
| 
 | |
|         }
 | |
|         public static void Track(string eventName, Dictionary<string, object> properties, string appId)
 | |
|         {
 | |
|             TDPropertiesChecker.CheckString(eventName);
 | |
|             track(eventName, getFinalEventProperties(properties), appId);
 | |
|         }
 | |
| 
 | |
|         public static void TrackStr(string eventName, string properties, string appId)
 | |
|         {
 | |
|             trackStr(eventName, properties, appId);
 | |
|         }
 | |
| 
 | |
|         public static void Track(string eventName, Dictionary<string, object> properties, DateTime datetime, string appId)
 | |
|         {
 | |
|             TDPropertiesChecker.CheckString(eventName);
 | |
|             track(eventName, getFinalEventProperties(properties), datetime, appId);
 | |
|         }
 | |
| 
 | |
|         public static void Track(string eventName, Dictionary<string, object> properties, DateTime datetime, TimeZoneInfo timeZone, string appId)
 | |
|         {
 | |
|             TDPropertiesChecker.CheckString(eventName);
 | |
|             track(eventName, getFinalEventProperties(properties), datetime, timeZone, appId);
 | |
|         }
 | |
| 
 | |
|         public static void TrackForAll(string eventName, Dictionary<string, object> properties)
 | |
|         {
 | |
|             TDPropertiesChecker.CheckString(eventName);
 | |
|             trackForAll(eventName, getFinalEventProperties(properties));
 | |
|         }
 | |
| 
 | |
|         public static void Track(TDEventModel taEvent, string appId)
 | |
|         {
 | |
|             if (null == taEvent || null == taEvent.EventType)
 | |
|             {
 | |
|                 if(TDLog.GetEnable()) TDLog.w("Ignoring invalid TA event");
 | |
|                 return;
 | |
|             }
 | |
| 
 | |
|             if (taEvent.GetEventTime() == null)
 | |
|             {
 | |
|                 if(TDLog.GetEnable()) TDLog.w("ppp null...");
 | |
|             }
 | |
|             TDPropertiesChecker.CheckString(taEvent.EventName);
 | |
|             TDPropertiesChecker.CheckProperties(taEvent.Properties);
 | |
|             track(taEvent, appId);
 | |
|         }
 | |
| 
 | |
|         public static void QuickTrack(string eventName, Dictionary<string, object> properties, string appId)
 | |
|         {
 | |
|             if ("SceneView" == eventName)
 | |
|             {
 | |
|                 if (properties == null)
 | |
|                 {
 | |
|                     properties = new Dictionary<string, object>() { };
 | |
|                 }
 | |
|                 Scene scene = SceneManager.GetActiveScene();
 | |
|                 if (scene != null)
 | |
|                 {
 | |
|                     properties.Add("#scene_name", scene.name);
 | |
|                     properties.Add("#scene_path", scene.path);
 | |
|                 }
 | |
|                 Track("ta_scene_view", properties, appId);
 | |
|             }
 | |
|             else if ("AppClick" == eventName)
 | |
|             {
 | |
|                 if (properties == null)
 | |
|                 {
 | |
|                     properties = new Dictionary<string, object>() { };
 | |
|                 }
 | |
|                 Track("ta_app_click", properties, appId);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         public static void SetSuperProperties(Dictionary<string, object> superProperties, string appId)
 | |
|         {
 | |
|             TDPropertiesChecker.CheckProperties(superProperties);
 | |
|             setSuperProperties(superProperties, appId);
 | |
|         }
 | |
| 
 | |
|         public static void SetSuperProperties(string superProperties, string appId)
 | |
|         {
 | |
|             setSuperProperties(superProperties, appId);
 | |
|         }
 | |
| 
 | |
|         public static void UnsetSuperProperty(string superPropertyName, string appId)
 | |
|         {
 | |
|             TDPropertiesChecker.CheckString(superPropertyName);
 | |
|             unsetSuperProperty(superPropertyName, appId);
 | |
|         }
 | |
| 
 | |
|         public static void ClearSuperProperty(string appId)
 | |
|         {
 | |
|             clearSuperProperty(appId);
 | |
|         }
 | |
| 
 | |
| 
 | |
|         public static void TimeEvent(string eventName, string appId)
 | |
|         {
 | |
|             TDPropertiesChecker.CheckString(eventName);
 | |
|             timeEvent(eventName, appId);
 | |
|         }
 | |
| 
 | |
|         public static void TimeEventForAll(string eventName)
 | |
|         {
 | |
|             TDPropertiesChecker.CheckString(eventName);
 | |
|             timeEventForAll(eventName);
 | |
|         }
 | |
| 
 | |
|         public static Dictionary<string, object> GetSuperProperties(string appId)
 | |
|         {
 | |
|             return getSuperProperties(appId);
 | |
|         }
 | |
| 
 | |
|         public static Dictionary<string, object> GetPresetProperties(string appId)
 | |
|         {
 | |
|             return getPresetProperties(appId);
 | |
|         }
 | |
| 
 | |
|         public static void UserSet(Dictionary<string, object> properties, string appId)
 | |
|         {
 | |
|             TDPropertiesChecker.CheckProperties(properties);
 | |
|             userSet(properties, appId);
 | |
|         }
 | |
| 
 | |
|         public static void UserSet(string properties, string appId)
 | |
|         {
 | |
|             userSet(properties, appId);
 | |
|         }
 | |
| 
 | |
|         public static void UserSet(Dictionary<string, object> properties, DateTime dateTime, string appId)
 | |
|         {
 | |
|             TDPropertiesChecker.CheckProperties(properties);
 | |
|             userSet(properties, dateTime, appId);
 | |
|         }
 | |
| 
 | |
|         public static void UserSetOnce(Dictionary<string, object> properties, string appId)
 | |
|         {
 | |
|             TDPropertiesChecker.CheckProperties(properties);
 | |
|             userSetOnce(properties, appId);
 | |
|         }
 | |
| 
 | |
|         public static void UserSetOnce(string properties, string appId)
 | |
|         {
 | |
|             userSetOnce(properties, appId);
 | |
|         }
 | |
| 
 | |
|         public static void UserSetOnce(Dictionary<string, object> properties, DateTime dateTime, string appId)
 | |
|         {
 | |
|             TDPropertiesChecker.CheckProperties(properties);
 | |
|             userSetOnce(properties, dateTime, appId);
 | |
|         }
 | |
| 
 | |
|         public static void UserUnset(List<string> properties, string appId)
 | |
|         {
 | |
|             TDPropertiesChecker.CheckProperties(properties);
 | |
|             userUnset(properties, appId);
 | |
|         }
 | |
| 
 | |
|         public static void UserUnset(List<string> properties, DateTime dateTime, string appId)
 | |
|         {
 | |
|             TDPropertiesChecker.CheckProperties(properties);
 | |
|             userUnset(properties, dateTime, appId);
 | |
|         }
 | |
| 
 | |
|         public static void UserAdd(Dictionary<string, object> properties, string appId)
 | |
|         {
 | |
|             TDPropertiesChecker.CheckProperties(properties);
 | |
|             userAdd(properties, appId);
 | |
|         }
 | |
| 
 | |
|         public static void UserAddStr(string properties, string appId)
 | |
|         {
 | |
|             userAddStr(properties, appId);
 | |
|         }
 | |
| 
 | |
|         public static void UserAdd(Dictionary<string, object> properties, DateTime dateTime, string appId)
 | |
|         {
 | |
|             TDPropertiesChecker.CheckProperties(properties);
 | |
|             userAdd(properties, dateTime, appId);
 | |
|         }
 | |
| 
 | |
|         public static void UserAppend(Dictionary<string, object> properties, string appId)
 | |
|         {
 | |
|             TDPropertiesChecker.CheckProperties(properties);
 | |
|             userAppend(properties, appId);
 | |
|         }
 | |
| 
 | |
|         public static void UserAppend(string properties, string appId)
 | |
|         {
 | |
|             userAppend(properties, appId);
 | |
|         }
 | |
| 
 | |
|         public static void UserAppend(Dictionary<string, object> properties, DateTime dateTime, string appId)
 | |
|         {
 | |
|             TDPropertiesChecker.CheckProperties(properties);
 | |
|             userAppend(properties, dateTime, appId);
 | |
|         }
 | |
| 
 | |
|         public static void UserUniqAppend(Dictionary<string, object> properties, string appId) 
 | |
|         {
 | |
|             TDPropertiesChecker.CheckProperties(properties);
 | |
|             userUniqAppend(properties, appId);
 | |
|         }
 | |
| 
 | |
|         public static void UserUniqAppend(string properties, string appId)
 | |
|         {
 | |
|             userUniqAppend(properties, appId);
 | |
|         }
 | |
| 
 | |
|         public static void UserUniqAppend(Dictionary<string, object> properties, DateTime dateTime, string appId) 
 | |
|         {
 | |
|             TDPropertiesChecker.CheckProperties(properties);
 | |
|             userUniqAppend(properties, dateTime, appId);
 | |
|         }
 | |
| 
 | |
|         public static void UserDelete(string appId)
 | |
|         {
 | |
|             userDelete(appId);
 | |
|         }
 | |
| 
 | |
|         public static void UserDelete(DateTime dateTime, string appId)
 | |
|         {
 | |
|             userDelete(dateTime, appId);
 | |
|         }
 | |
| 
 | |
|         public static void Flush(string appId)
 | |
|         {
 | |
|             flush(appId);
 | |
|         }
 | |
| 
 | |
|         public static void SetNetworkType(TDNetworkType networkType)
 | |
|         {
 | |
|             setNetworkType(networkType);
 | |
|         }
 | |
| 
 | |
|         public static string GetDeviceId()
 | |
|         {
 | |
|             return getDeviceId();
 | |
|         }
 | |
| 
 | |
|         public static void SetDynamicSuperProperties(TDDynamicSuperPropertiesHandler dynamicSuperProperties, string appId)
 | |
|         {
 | |
|             if (!TDPropertiesChecker.CheckProperties(dynamicSuperProperties.GetDynamicSuperProperties()))
 | |
|             {
 | |
|                 if(TDLog.GetEnable()) TDLog.d("Cannot set dynamic super properties due to invalid properties.");
 | |
|             }
 | |
|             mDynamicSuperProperties = dynamicSuperProperties;
 | |
|             setDynamicSuperProperties(dynamicSuperProperties, appId);
 | |
|         }
 | |
| 
 | |
|         public static void SetTrackStatus(TDTrackStatus status, string appId)
 | |
|         {
 | |
|             setTrackStatus(status, appId);
 | |
|         }
 | |
| 
 | |
|         public static void OptOutTracking(string appId)
 | |
|         {
 | |
|             optOutTracking(appId);
 | |
|         }
 | |
| 
 | |
|         public static void OptOutTrackingAndDeleteUser(string appId)
 | |
|         {
 | |
|             optOutTrackingAndDeleteUser(appId);
 | |
|         }
 | |
| 
 | |
|         public static void OptInTracking(string appId)
 | |
|         {
 | |
|             optInTracking(appId);
 | |
|         }
 | |
| 
 | |
|         public static void EnableTracking(bool enabled, string appId)
 | |
|         {
 | |
|             enableTracking(enabled, appId);
 | |
|         }
 | |
| 
 | |
|         public static string CreateLightInstance()
 | |
|         {
 | |
|             return createLightInstance();
 | |
|         }
 | |
| 
 | |
|         public static void CalibrateTime(long timestamp)
 | |
|         {
 | |
|             calibrateTime(timestamp);
 | |
|         }
 | |
| 
 | |
|         public static void CalibrateTimeWithNtp(string ntpServer)
 | |
|         {
 | |
|             calibrateTimeWithNtp(ntpServer);
 | |
|         }
 | |
| 
 | |
|         public static void EnableThirdPartySharing(TDThirdPartyType shareType, Dictionary<string, object> properties = null, string appId = "")
 | |
|         {
 | |
|             if (null == properties) properties = new Dictionary<string, object>();
 | |
|             enableThirdPartySharing(shareType, properties, appId);
 | |
|         }
 | |
|     }
 | |
| }
 | |
| 
 |