#if UNITY_OPENHARMONY && !(UNITY_EDITOR) using System; using System.Collections.Generic; using ThinkingAnalytics; using ThinkingData.Analytics.Utils; using UnityEngine; namespace ThinkingData.Analytics.Wrapper { public partial class TDWrapper { private static readonly OpenHarmonyJSClass openHarmonyJsClass = new OpenHarmonyJSClass("TDOpenHarmonyProxy"); private static TimeZoneInfo defaultTimeZone = null; private static TDTimeZone defaultTDTimeZone = TDTimeZone.Local; private static void init(TDConfig token) { string timeZoneId = token.getTimeZoneId(); defaultTDTimeZone = token.timeZone; string timeZone = ""; if (null != timeZoneId && timeZoneId.Length > 0) { timeZone = timeZoneId; if (defaultTimeZone == null) { try { defaultTimeZone = TimeZoneInfo.FindSystemTimeZoneById(timeZoneId); } catch (Exception) { } } } else { if (defaultTimeZone == null) { defaultTimeZone = TimeZoneInfo.Local; } } openHarmonyJsClass.CallStatic("init", token.appId, token.serverUrl, (int)token.mode, timeZone, token.encryptVersion, token.encryptPublicKey); } private static string getTimeString(DateTime dateTime) { if (defaultTimeZone == null) { return TDCommonUtils.FormatDate(dateTime, defaultTDTimeZone); } else { return TDCommonUtils.FormatDate(dateTime, defaultTimeZone); } } private static void enableLog(bool enable) { openHarmonyJsClass.CallStatic("enableLog", enable); } private static void setVersionInfo(string libName, string version) { openHarmonyJsClass.CallStatic("setLibraryInfo", libName, version); } private static void identify(string uniqueId, string appId) { openHarmonyJsClass.CallStatic("setDistinctId", uniqueId, appId); } private static string getDistinctId(string appId) { return openHarmonyJsClass.CallStatic("getDistinctId", appId); } private static void login(string uniqueId, string appId) { openHarmonyJsClass.CallStatic("login", uniqueId, appId); } private static void logout(string appId) { openHarmonyJsClass.CallStatic("logout", appId); } private static void enableAutoTrack(TDAutoTrackEventType events, Dictionary properties, string appId) { openHarmonyJsClass.CallStatic("enableAutoTrack", (int)events, appId); } private static void enableAutoTrack(TDAutoTrackEventType events, TDAutoTrackEventHandler eventCallback, string appId) { } private static void setAutoTrackProperties(TDAutoTrackEventType events, Dictionary properties, string appId) { } private static void track(string eventName, Dictionary properties, DateTime dateTime, string appId) { track(eventName, properties, dateTime, null, appId); } private static void track(string eventName, Dictionary properties, DateTime dateTime, TimeZoneInfo timeZone, string appId) { long dateTimeTicksUTC = TimeZoneInfo.ConvertTimeToUtc(dateTime).Ticks; DateTime dtFrom = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc); long currentMillis = (dateTimeTicksUTC - dtFrom.Ticks) / 10000; string timeZoneId = ""; if (timeZone != null) { timeZoneId = timeZone.Id; } openHarmonyJsClass.CallStatic("track", eventName, serilize(properties), currentMillis, timeZoneId, appId); } private static void track(string eventName, Dictionary properties, string appId) { openHarmonyJsClass.CallStatic("track", eventName, serilize(properties), 0, "", appId); } private static void trackForAll(string eventName, Dictionary properties) { track(eventName, properties, ""); } private static void track(TDEventModel taEvent, string appId) { int eventType = -1; ; switch (taEvent.EventType) { case TDEventModel.TDEventType.First: eventType = 1; break; case TDEventModel.TDEventType.Updatable: eventType = 2; break; case TDEventModel.TDEventType.Overwritable: eventType = 3; break; } if (eventType < 0) return; string jsonStr; if (taEvent.Properties == null) { jsonStr = taEvent.StrProperties; } else { jsonStr = serilize(taEvent.Properties); } long eventTime = 0; if (taEvent.GetEventTime() != null && taEvent.GetEventTime() != DateTime.MinValue) { long dateTimeTicksUTC = TimeZoneInfo.ConvertTimeToUtc(taEvent.GetEventTime()).Ticks; DateTime dtFrom = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc); eventTime = (dateTimeTicksUTC - dtFrom.Ticks) / 10000; } string timeZoneId = ""; if (taEvent.GetEventTimeZone() != null) { timeZoneId = taEvent.GetEventTimeZone().Id; } openHarmonyJsClass.CallStatic("trackEvent", eventType, taEvent.EventName, jsonStr, taEvent.GetEventId(), eventTime, timeZoneId, appId); } private static void trackStr(string eventName, string properties, string appId) { openHarmonyJsClass.CallStatic("track", eventName, properties, 0, "", appId); } private static void setSuperProperties(Dictionary superProperties, string appId) { openHarmonyJsClass.CallStatic("setSuperProperties", serilize(superProperties), appId); } private static void setSuperProperties(string superProperties, string appId) { openHarmonyJsClass.CallStatic("setSuperProperties", superProperties, appId); } private static void unsetSuperProperty(string superPropertyName, string appId) { openHarmonyJsClass.CallStatic("unsetSuperProperty", superPropertyName, appId); } private static void clearSuperProperty(string appId) { openHarmonyJsClass.CallStatic("clearSuperProperties", appId); } private static Dictionary getSuperProperties(string appId) { string superPropertiesString = openHarmonyJsClass.CallStatic("getSuperProperties", appId); return TDMiniJson.Deserialize(superPropertiesString); } private static Dictionary getPresetProperties(string appId) { string presetPropertiesString = openHarmonyJsClass.CallStatic("getPresetProperties", appId); return TDMiniJson.Deserialize(presetPropertiesString); } private static void timeEvent(string eventName, string appId) { openHarmonyJsClass.CallStatic("timeEvent", eventName, appId); } private static void timeEventForAll(string eventName) { openHarmonyJsClass.CallStatic("timeEvent", eventName, ""); } private static void userSet(Dictionary properties, string appId) { userSet(properties, new DateTime(), appId); } private static void userSet(Dictionary properties, DateTime dateTime, string appId) { long dateTimeTicksUTC = TimeZoneInfo.ConvertTimeToUtc(dateTime).Ticks; DateTime dtFrom = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc); long currentMillis = (dateTimeTicksUTC - dtFrom.Ticks) / 10000; openHarmonyJsClass.CallStatic("userSet", serilize(properties), currentMillis, appId); } private static void userSet(string properties, string appId) { openHarmonyJsClass.CallStatic("userSet", properties, 0, appId); } private static void userSetOnce(Dictionary properties, string appId) { userSetOnce(properties, new DateTime(), appId); } private static void userSetOnce(Dictionary properties, DateTime dateTime, string appId) { long dateTimeTicksUTC = TimeZoneInfo.ConvertTimeToUtc(dateTime).Ticks; DateTime dtFrom = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc); long currentMillis = (dateTimeTicksUTC - dtFrom.Ticks) / 10000; openHarmonyJsClass.CallStatic("userSetOnce", serilize(properties), currentMillis, appId); } private static void userSetOnce(string properties, string appId) { openHarmonyJsClass.CallStatic("userSetOnce", properties, 0, appId); } private static void userUnset(List properties, string appId) { userUnset(properties, new DateTime(), appId); } private static void userUnset(List properties, DateTime dateTime, string appId) { long dateTimeTicksUTC = TimeZoneInfo.ConvertTimeToUtc(dateTime).Ticks; DateTime dtFrom = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc); long currentMillis = (dateTimeTicksUTC - dtFrom.Ticks) / 10000; foreach (string property in properties) { openHarmonyJsClass.CallStatic("userUnset", property, currentMillis, appId); } } private static void userAdd(Dictionary properties, string appId) { userAdd(properties, new DateTime(), appId); } private static void userAdd(Dictionary properties, DateTime dateTime, string appId) { long dateTimeTicksUTC = TimeZoneInfo.ConvertTimeToUtc(dateTime).Ticks; DateTime dtFrom = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc); long currentMillis = (dateTimeTicksUTC - dtFrom.Ticks) / 10000; openHarmonyJsClass.CallStatic("userAdd", serilize(properties), currentMillis, appId); } private static void userAddStr(string properties, string appId) { openHarmonyJsClass.CallStatic("userAdd", properties, 0, appId); } private static void userAppend(Dictionary properties, string appId) { userAppend(properties, new DateTime(), appId); } private static void userAppend(Dictionary properties, DateTime dateTime, string appId) { long dateTimeTicksUTC = TimeZoneInfo.ConvertTimeToUtc(dateTime).Ticks; DateTime dtFrom = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc); long currentMillis = (dateTimeTicksUTC - dtFrom.Ticks) / 10000; openHarmonyJsClass.CallStatic("userAppend", serilize(properties), currentMillis, appId); } private static void userAppend(string properties, string appId) { openHarmonyJsClass.CallStatic("userAppend", properties, 0, appId); } private static void userUniqAppend(Dictionary properties, string appId) { userUniqAppend(properties, new DateTime(), appId); } private static void userUniqAppend(Dictionary properties, DateTime dateTime, string appId) { long dateTimeTicksUTC = TimeZoneInfo.ConvertTimeToUtc(dateTime).Ticks; DateTime dtFrom = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc); long currentMillis = (dateTimeTicksUTC - dtFrom.Ticks) / 10000; openHarmonyJsClass.CallStatic("userUniqAppend", serilize(properties), currentMillis, appId); } private static void userUniqAppend(string properties, string appId) { openHarmonyJsClass.CallStatic("userUniqAppend", properties, 0, appId); } private static void userDelete(string appId) { userDelete(new DateTime(), appId); } private static void userDelete(DateTime dateTime, string appId) { long dateTimeTicksUTC = TimeZoneInfo.ConvertTimeToUtc(dateTime).Ticks; DateTime dtFrom = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc); long currentMillis = (dateTimeTicksUTC - dtFrom.Ticks) / 10000; openHarmonyJsClass.CallStatic("userDelete", currentMillis, appId); } private static void flush(string appId) { openHarmonyJsClass.CallStatic("flush", appId); } private static string getDeviceId() { return openHarmonyJsClass.CallStatic("getDeviceId"); } private static void setNetworkType(TDNetworkType networkType) { openHarmonyJsClass.CallStatic("setNetWorkType", (int)networkType); } private static void setDynamicSuperProperties(TDDynamicSuperPropertiesHandler dynamicSuperProperties, string appId) { } private static void setTrackStatus(TDTrackStatus status, string appId) { } private static void optOutTracking(string appId) { } private static void optOutTrackingAndDeleteUser(string appId) { } private static void optInTracking(string appId) { } private static void enableTracking(bool enabled, string appId) { } private static string createLightInstance() { return ""; } private static void calibrateTime(long timestamp) { openHarmonyJsClass.CallStatic("calibrateTime", timestamp); } private static void calibrateTimeWithNtp(string ntpServer) { } private static void enableThirdPartySharing(TDThirdPartyType shareType, Dictionary properties, string appId) { } } } #endif