using System; using System.Collections; using System.Collections.Generic; using ThinkingSDK.PC.Config; using ThinkingSDK.PC.Constant; using ThinkingSDK.PC.DataModel; using ThinkingSDK.PC.Storage; using ThinkingSDK.PC.Time; using ThinkingSDK.PC.Utils; using UnityEngine; namespace ThinkingSDK.PC.Main { public class ThinkingPCSDK { private ThinkingPCSDK() { } private static readonly Dictionary Instances = new Dictionary(); private static readonly Dictionary LightInstances = new Dictionary(); private static string CurrentAppid; private static ThinkingSDKInstance GetInstance(string appId) { ThinkingSDKInstance instance = null; if (!string.IsNullOrEmpty(appId)) { appId = appId.Replace(" ", ""); if (LightInstances.ContainsKey(appId)) { instance = LightInstances[appId]; } else if (Instances.ContainsKey(appId)) { instance = Instances[appId]; } } if (instance == null) { instance = Instances[CurrentAppid]; } return instance; } public static ThinkingSDKInstance CurrentInstance() { ThinkingSDKInstance instance = Instances[CurrentAppid]; return instance; } public static ThinkingSDKInstance Init(string appId, string server, string instanceName, ThinkingSDKConfig config = null, MonoBehaviour mono = null) { if (ThinkingSDKUtil.IsEmptyString(appId)) { if (ThinkingSDKPublicConfig.IsPrintLog()) ThinkingSDKLogger.Print("appId is empty"); return null; } ThinkingSDKInstance instance = null; if (!string.IsNullOrEmpty(instanceName)) { if (Instances.ContainsKey(instanceName)) { instance = Instances[instanceName]; } else { instance = new ThinkingSDKInstance(appId, server, instanceName, config, mono); if (string.IsNullOrEmpty(CurrentAppid)) { CurrentAppid = instanceName; } Instances[instanceName] = instance; } } else { if (Instances.ContainsKey(appId)) { instance = Instances[appId]; } else { instance = new ThinkingSDKInstance(appId, server, null, config, mono); if (string.IsNullOrEmpty(CurrentAppid)) { CurrentAppid = appId; } Instances[appId] = instance; } } return instance; } /// /// Sets distinct ID /// /// /// public static void Identifiy(string distinctID, string appId = "") { GetInstance(appId).Identifiy(distinctID); } /// /// Gets distinct ID /// /// /// public static string DistinctId(string appId = "") { return GetInstance(appId).DistinctId(); } /// /// Sets account ID /// /// /// public static void Login(string accountID,string appId = "") { GetInstance(appId).Login(accountID); } /// /// Gets account ID /// /// /// public static string AccountID(string appId = "") { return GetInstance(appId).AccountID(); } /// /// Clear account ID /// public static void Logout(string appId = "") { GetInstance(appId).Logout(); } /// /// Enable Auto-tracking Events /// /// /// public static void EnableAutoTrack(AUTO_TRACK_EVENTS events, Dictionary properties, string appId = "") { GetInstance(appId).EnableAutoTrack(events, properties); } public static void EnableAutoTrack(AUTO_TRACK_EVENTS events, IAutoTrackEventCallback_PC eventCallback, string appId = "") { GetInstance(appId).EnableAutoTrack(events, eventCallback); } public static void SetAutoTrackProperties(AUTO_TRACK_EVENTS events, Dictionary properties, string appId = "") { GetInstance(appId).SetAutoTrackProperties(events, properties); } public static void Track(string eventName,string appId = "") { GetInstance(appId).Track(eventName); } public static void Track(string eventName, Dictionary properties, string appId = "") { GetInstance(appId).Track(eventName,properties); } public static void Track(string eventName, Dictionary properties, DateTime date, string appId = "") { GetInstance(appId).Track(eventName, properties, date); } public static void Track(string eventName, Dictionary properties, DateTime date, TimeZoneInfo timeZone, string appId = "") { GetInstance(appId).Track(eventName, properties, date, timeZone); } public static void TrackForAll(string eventName, Dictionary properties) { foreach (string appId in Instances.Keys) { GetInstance(appId).Track(eventName, properties); } } public static void Track(ThinkingSDKEventData analyticsEvent,string appId = "") { GetInstance(appId).Track(analyticsEvent); } public static void Flush (string appId = "") { GetInstance(appId).Flush(); } //public static void FlushImmediately (string appId = "") //{ // GetInstance(appId).FlushImmediately(); //} public static void SetSuperProperties(Dictionary superProperties,string appId = "") { GetInstance(appId).SetSuperProperties(superProperties); } public static void UnsetSuperProperty(string propertyKey, string appId = "") { GetInstance(appId).UnsetSuperProperty(propertyKey); } public static Dictionary SuperProperties(string appId="") { return GetInstance(appId).SuperProperties(); } public static Dictionary PresetProperties(string appId="") { return GetInstance(appId).PresetProperties(); } public static void ClearSuperProperties(string appId= "") { GetInstance(appId).ClearSuperProperties(); } public static void TimeEvent(string eventName,string appId="") { GetInstance(appId).TimeEvent(eventName); } public static void TimeEventForAll(string eventName) { foreach (string appId in Instances.Keys) { GetInstance(appId).TimeEvent(eventName); } } /// /// Pause Event timing /// /// ture: puase timing, false: resume timing /// event name (null or empty is for all event) public static void PauseTimeEvent(bool status, string eventName = "", string appId = "") { GetInstance(appId).PauseTimeEvent(status, eventName); } public static void UserSet(Dictionary properties, string appId = "") { GetInstance(appId).UserSet(properties); } public static void UserSet(Dictionary properties, DateTime dateTime,string appId = "") { GetInstance(appId).UserSet(properties, dateTime); } public static void UserUnset(string propertyKey,string appId = "") { GetInstance(appId).UserUnset(propertyKey); } public static void UserUnset(string propertyKey, DateTime dateTime,string appId = "") { GetInstance(appId).UserUnset(propertyKey,dateTime); } public static void UserUnset(List propertyKeys, string appId = "") { GetInstance(appId).UserUnset(propertyKeys); } public static void UserUnset(List propertyKeys, DateTime dateTime, string appId = "") { GetInstance(appId).UserUnset(propertyKeys,dateTime); } public static void UserSetOnce(Dictionary properties,string appId = "") { GetInstance(appId).UserSetOnce(properties); } public static void UserSetOnce(Dictionary properties, DateTime dateTime, string appId = "") { GetInstance(appId).UserSetOnce(properties,dateTime); } public static void UserAdd(Dictionary properties, string appId = "") { GetInstance(appId).UserAdd(properties); } public static void UserAdd(Dictionary properties, DateTime dateTime, string appId = "") { GetInstance(appId).UserAdd(properties,dateTime); } public static void UserAppend(Dictionary properties, string appId = "") { GetInstance(appId).UserAppend(properties); } public static void UserAppend(Dictionary properties, DateTime dateTime, string appId = "") { GetInstance(appId).UserAppend(properties,dateTime); } public static void UserUniqAppend(Dictionary properties, string appId = "") { GetInstance(appId).UserUniqAppend(properties); } public static void UserUniqAppend(Dictionary properties, DateTime dateTime, string appId = "") { GetInstance(appId).UserUniqAppend(properties,dateTime); } public static void UserDelete(string appId="") { GetInstance(appId).UserDelete(); } public static void UserDelete(DateTime dateTime,string appId = "") { GetInstance(appId).UserDelete(dateTime); } public static void SetDynamicSuperProperties(IDynamicSuperProperties_PC dynamicSuperProperties, string appId = "") { GetInstance(appId).SetDynamicSuperProperties(dynamicSuperProperties); } public static void SetTrackStatus(TA_TRACK_STATUS status, string appId = "") { GetInstance(appId).SetTrackStatus(status); } public static void OptTracking(bool optTracking,string appId = "") { GetInstance(appId).OptTracking(optTracking); } public static void EnableTracking(bool isEnable, string appId = "") { GetInstance(appId).EnableTracking(isEnable); } public static void OptTrackingAndDeleteUser(string appId = "") { GetInstance(appId).OptTrackingAndDeleteUser(); } public static string CreateLightInstance() { string randomID = System.Guid.NewGuid().ToString("N"); ThinkingSDKInstance lightInstance = ThinkingSDKInstance.CreateLightInstance(); LightInstances[randomID] = lightInstance; return randomID; } public static void CalibrateTime(long timestamp) { ThinkingSDKTimestampCalibration timestampCalibration = new ThinkingSDKTimestampCalibration(timestamp); foreach (KeyValuePair kv in Instances) { kv.Value.SetTimeCalibratieton(timestampCalibration); } } public static void CalibrateTimeWithNtp(string ntpServer) { ThinkingSDKNTPCalibration ntpCalibration = new ThinkingSDKNTPCalibration(ntpServer); foreach (KeyValuePair kv in Instances) { kv.Value.SetTimeCalibratieton(ntpCalibration); } } public static string GetDeviceId() { return ThinkingSDKDeviceInfo.DeviceID(); } public static void EnableLog(bool isEnable) { ThinkingSDKPublicConfig.SetIsPrintLog(isEnable); } public static void SetLibName(string name) { ThinkingSDKPublicConfig.SetName(name); } public static void SetLibVersion(string versionCode) { ThinkingSDKPublicConfig.SetVersion(versionCode); } public static string TimeString(DateTime dateTime, string appId = "") { return GetInstance(appId).TimeString(dateTime); } } }