SDK_UnityMoney/Assets/ThinkingAnalytics/Wrapper/TDWrapper.cs

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);
}
}
}