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 mAutoTrackEventCallbacks = new Dictionary(); private static Dictionary> mAutoTrackProperties = new Dictionary>(); private static Dictionary mAutoTrackEventInfos = new Dictionary(); private static System.Random rnd = new System.Random(); private static string default_appId = null; // add Dictionary to Dictionary public static void AddDictionary(Dictionary originalDic, Dictionary subDic) { if (originalDic != subDic) { foreach (KeyValuePair kv in subDic) { originalDic[kv.Key] = kv.Value; } } } private static string serilize(Dictionary 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 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 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 properties = new Dictionary() { { "#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 finalProperties = new Dictionary(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 finalProperties = new Dictionary(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 properties = new Dictionary() { { "#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 finalProperties = new Dictionary(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 getFinalEventProperties(Dictionary properties) { TDPropertiesChecker.CheckProperties(properties); if (null != mDynamicSuperProperties) { Dictionary finalProperties = new Dictionary(); TDPropertiesChecker.MergeProperties(mDynamicSuperProperties.GetDynamicSuperProperties(), finalProperties); TDPropertiesChecker.MergeProperties(properties, finalProperties); return finalProperties; } else { return properties; } } public static void Track(string eventName, Dictionary 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 properties, DateTime datetime, string appId) { TDPropertiesChecker.CheckString(eventName); track(eventName, getFinalEventProperties(properties), datetime, appId); } public static void Track(string eventName, Dictionary properties, DateTime datetime, TimeZoneInfo timeZone, string appId) { TDPropertiesChecker.CheckString(eventName); track(eventName, getFinalEventProperties(properties), datetime, timeZone, appId); } public static void TrackForAll(string eventName, Dictionary 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 properties, string appId) { if ("SceneView" == eventName) { if (properties == null) { properties = new Dictionary() { }; } 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() { }; } Track("ta_app_click", properties, appId); } } public static void SetSuperProperties(Dictionary 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 GetSuperProperties(string appId) { return getSuperProperties(appId); } public static Dictionary GetPresetProperties(string appId) { return getPresetProperties(appId); } public static void UserSet(Dictionary 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 properties, DateTime dateTime, string appId) { TDPropertiesChecker.CheckProperties(properties); userSet(properties, dateTime, appId); } public static void UserSetOnce(Dictionary 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 properties, DateTime dateTime, string appId) { TDPropertiesChecker.CheckProperties(properties); userSetOnce(properties, dateTime, appId); } public static void UserUnset(List properties, string appId) { TDPropertiesChecker.CheckProperties(properties); userUnset(properties, appId); } public static void UserUnset(List properties, DateTime dateTime, string appId) { TDPropertiesChecker.CheckProperties(properties); userUnset(properties, dateTime, appId); } public static void UserAdd(Dictionary 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 properties, DateTime dateTime, string appId) { TDPropertiesChecker.CheckProperties(properties); userAdd(properties, dateTime, appId); } public static void UserAppend(Dictionary 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 properties, DateTime dateTime, string appId) { TDPropertiesChecker.CheckProperties(properties); userAppend(properties, dateTime, appId); } public static void UserUniqAppend(Dictionary 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 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 properties = null, string appId = "") { if (null == properties) properties = new Dictionary(); enableThirdPartySharing(shareType, properties, appId); } } }