sk-client/Assets/Plugins/PC/Main/ThinkingPCSDK.cs

367 lines
14 KiB
C#

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<string, ThinkingSDKInstance> Instances = new Dictionary<string, ThinkingSDKInstance>();
private static readonly Dictionary<string, ThinkingSDKInstance> LightInstances = new Dictionary<string, ThinkingSDKInstance>();
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;
}
/// <summary>
/// Sets distinct ID
/// </summary>
/// <param name="distinctID"></param>
/// <param name="appId"></param>
public static void Identifiy(string distinctID, string appId = "")
{
GetInstance(appId).Identifiy(distinctID);
}
/// <summary>
/// Gets distinct ID
/// </summary>
/// <param name="appId"></param>
/// <returns></returns>
public static string DistinctId(string appId = "")
{
return GetInstance(appId).DistinctId();
}
/// <summary>
/// Sets account ID
/// </summary>
/// <param name="accountID"></param>
/// <param name="appId"></param>
public static void Login(string accountID,string appId = "")
{
GetInstance(appId).Login(accountID);
}
/// <summary>
/// Gets account ID
/// </summary>
/// <param name="appId"></param>
/// <returns></returns>
public static string AccountID(string appId = "")
{
return GetInstance(appId).AccountID();
}
/// <summary>
/// Clear account ID
/// </summary>
public static void Logout(string appId = "")
{
GetInstance(appId).Logout();
}
/// <summary>
/// Enable Auto-tracking Events
/// </summary>
/// <param name="events"></param>
/// <param name="appId"></param>
public static void EnableAutoTrack(AUTO_TRACK_EVENTS events, Dictionary<string, object> 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<string, object> 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<string, object> properties, string appId = "")
{
GetInstance(appId).Track(eventName,properties);
}
public static void Track(string eventName, Dictionary<string, object> properties, DateTime date, string appId = "")
{
GetInstance(appId).Track(eventName, properties, date);
}
public static void Track(string eventName, Dictionary<string, object> properties, DateTime date, TimeZoneInfo timeZone, string appId = "")
{
GetInstance(appId).Track(eventName, properties, date, timeZone);
}
public static void TrackForAll(string eventName, Dictionary<string, object> 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<string, object> superProperties,string appId = "")
{
GetInstance(appId).SetSuperProperties(superProperties);
}
public static void UnsetSuperProperty(string propertyKey, string appId = "")
{
GetInstance(appId).UnsetSuperProperty(propertyKey);
}
public static Dictionary<string, object> SuperProperties(string appId="")
{
return GetInstance(appId).SuperProperties();
}
public static Dictionary<string, object> 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);
}
}
/// <summary>
/// Pause Event timing
/// </summary>
/// <param name="status">ture: puase timing, false: resume timing</param>
/// <param name="eventName">event name (null or empty is for all event)</param>
public static void PauseTimeEvent(bool status, string eventName = "", string appId = "")
{
GetInstance(appId).PauseTimeEvent(status, eventName);
}
public static void UserSet(Dictionary<string, object> properties, string appId = "")
{
GetInstance(appId).UserSet(properties);
}
public static void UserSet(Dictionary<string, object> 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<string> propertyKeys, string appId = "")
{
GetInstance(appId).UserUnset(propertyKeys);
}
public static void UserUnset(List<string> propertyKeys, DateTime dateTime, string appId = "")
{
GetInstance(appId).UserUnset(propertyKeys,dateTime);
}
public static void UserSetOnce(Dictionary<string, object> properties,string appId = "")
{
GetInstance(appId).UserSetOnce(properties);
}
public static void UserSetOnce(Dictionary<string, object> properties, DateTime dateTime, string appId = "")
{
GetInstance(appId).UserSetOnce(properties,dateTime);
}
public static void UserAdd(Dictionary<string, object> properties, string appId = "")
{
GetInstance(appId).UserAdd(properties);
}
public static void UserAdd(Dictionary<string, object> properties, DateTime dateTime, string appId = "")
{
GetInstance(appId).UserAdd(properties,dateTime);
}
public static void UserAppend(Dictionary<string, object> properties, string appId = "")
{
GetInstance(appId).UserAppend(properties);
}
public static void UserAppend(Dictionary<string, object> properties, DateTime dateTime, string appId = "")
{
GetInstance(appId).UserAppend(properties,dateTime);
}
public static void UserUniqAppend(Dictionary<string, object> properties, string appId = "")
{
GetInstance(appId).UserUniqAppend(properties);
}
public static void UserUniqAppend(Dictionary<string, object> 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<string, ThinkingSDKInstance> kv in Instances)
{
kv.Value.SetTimeCalibratieton(timestampCalibration);
}
}
public static void CalibrateTimeWithNtp(string ntpServer)
{
ThinkingSDKNTPCalibration ntpCalibration = new ThinkingSDKNTPCalibration(ntpServer);
foreach (KeyValuePair<string, ThinkingSDKInstance> 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);
}
}
}