214 lines
		
	
	
		
			8.9 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			214 lines
		
	
	
		
			8.9 KiB
		
	
	
	
		
			C#
		
	
	
	
| using System.Collections.Generic;
 | |
| using UnityEngine;
 | |
| using ThinkingSDK.PC.Main;
 | |
| using ThinkingSDK.PC.Storage;
 | |
| using ThinkingSDK.PC.Utils;
 | |
| using ThinkingSDK.PC.Constant;
 | |
| public class ThinkingSDKAutoTrack : MonoBehaviour
 | |
| {
 | |
|     private string mAppId;
 | |
|     private TDAutoTrackEventType mAutoTrackEvents = TDAutoTrackEventType.None;
 | |
|     private Dictionary<string, Dictionary<string, object>> mAutoTrackProperties = new Dictionary<string, Dictionary<string, object>>();
 | |
|     private bool mStarted = false;
 | |
|     private TDAutoTrackEventHandler_PC mEventCallback_PC;
 | |
| 
 | |
|     private static string TDAutoTrackEventType_APP_START = "AppStart";
 | |
|     private static string TDAutoTrackEventType_APP_END = "AppEnd";
 | |
|     private static string TDAutoTrackEventType_APP_CRASH = "AppCrash";
 | |
|     private static string TDAutoTrackEventType_APP_INSTALL = "AppInstall";
 | |
| 
 | |
|     // Start is called before the first frame update
 | |
|     void Start()
 | |
|     {
 | |
|     }
 | |
|     void OnApplicationFocus(bool hasFocus)
 | |
|     {
 | |
|         if (hasFocus)
 | |
|         {
 | |
|             if ((mAutoTrackEvents & TDAutoTrackEventType.AppStart) != 0)
 | |
|             {
 | |
|                 Dictionary<string, object> properties = new Dictionary<string, object>();
 | |
|                 if (mAutoTrackProperties.ContainsKey(TDAutoTrackEventType_APP_START))
 | |
|                 {
 | |
|                     ThinkingSDKUtil.AddDictionary(properties, mAutoTrackProperties[TDAutoTrackEventType_APP_START]);
 | |
|                 }
 | |
|                 if (mEventCallback_PC != null)
 | |
|                 {
 | |
|                     ThinkingSDKUtil.AddDictionary(properties, mEventCallback_PC.AutoTrackEventCallback_PC((int) TDAutoTrackEventType.AppStart, properties));
 | |
|                 }
 | |
|                 ThinkingPCSDK.Track(ThinkingSDKConstant.START_EVENT, properties, this.mAppId);
 | |
|             }
 | |
|             if ((mAutoTrackEvents & TDAutoTrackEventType.AppEnd) != 0)
 | |
|             {
 | |
|                 ThinkingPCSDK.TimeEvent(ThinkingSDKConstant.END_EVENT, this.mAppId);
 | |
|             }
 | |
| 
 | |
|             ThinkingPCSDK.PauseTimeEvent(false, appId: this.mAppId);
 | |
|         }
 | |
|         else 
 | |
|         {
 | |
|             if ((mAutoTrackEvents & TDAutoTrackEventType.AppEnd) != 0)
 | |
|             {
 | |
|                 Dictionary<string, object> properties = new Dictionary<string, object>();
 | |
|                 if (mAutoTrackProperties.ContainsKey(TDAutoTrackEventType_APP_END))
 | |
|                 {
 | |
|                     ThinkingSDKUtil.AddDictionary(properties, mAutoTrackProperties[TDAutoTrackEventType_APP_END]);
 | |
|                 }
 | |
|                 if (mEventCallback_PC != null)
 | |
|                 {
 | |
|                     ThinkingSDKUtil.AddDictionary(properties, mEventCallback_PC.AutoTrackEventCallback_PC((int) TDAutoTrackEventType.AppEnd, properties));
 | |
|                 }
 | |
|                 ThinkingPCSDK.Track(ThinkingSDKConstant.END_EVENT, properties, this.mAppId);
 | |
|             }
 | |
|             ThinkingPCSDK.Flush(this.mAppId);
 | |
| 
 | |
|             ThinkingPCSDK.PauseTimeEvent(true, appId: this.mAppId);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     void OnApplicationQuit()
 | |
|     {
 | |
|         if (Application.isFocused == true)
 | |
|         {
 | |
|             OnApplicationFocus(false);
 | |
|         }
 | |
|         //ThinkingPCSDK.FlushImmediately(this.mAppId);
 | |
|     }
 | |
| 
 | |
|     public void SetAppId(string appId)
 | |
|     {
 | |
|         this.mAppId = appId;
 | |
|     }
 | |
| 
 | |
|     public void EnableAutoTrack(TDAutoTrackEventType events, Dictionary<string, object> properties, string appId)
 | |
|     {
 | |
|         SetAutoTrackProperties(events, properties);
 | |
|         if ((events & TDAutoTrackEventType.AppInstall) != 0)
 | |
|         {
 | |
|             object result = ThinkingSDKFile.GetData(appId, ThinkingSDKConstant.IS_INSTALL, typeof(int));
 | |
|             if (result == null)
 | |
|             {
 | |
|                 Dictionary<string, object> mProperties = new Dictionary<string, object>(properties);
 | |
|                 ThinkingSDKFile.SaveData(appId, ThinkingSDKConstant.IS_INSTALL, 1);
 | |
|                 if (mAutoTrackProperties.ContainsKey(TDAutoTrackEventType_APP_INSTALL))
 | |
|                 {
 | |
|                     ThinkingSDKUtil.AddDictionary(mProperties, mAutoTrackProperties[TDAutoTrackEventType_APP_INSTALL]);
 | |
|                 }
 | |
|                 ThinkingPCSDK.Track(ThinkingSDKConstant.INSTALL_EVENT, mProperties, this.mAppId);
 | |
|                 ThinkingPCSDK.Flush(this.mAppId);
 | |
|             } 
 | |
|         }
 | |
|         if ((events & TDAutoTrackEventType.AppStart) != 0 && mStarted == false)
 | |
|         {
 | |
|             Dictionary<string, object> mProperties = new Dictionary<string, object>(properties);
 | |
|             if (mAutoTrackProperties.ContainsKey(TDAutoTrackEventType_APP_START))
 | |
|             {
 | |
|                 ThinkingSDKUtil.AddDictionary(mProperties, mAutoTrackProperties[TDAutoTrackEventType_APP_START]);
 | |
|             }
 | |
|             ThinkingPCSDK.Track(ThinkingSDKConstant.START_EVENT, mProperties, this.mAppId);
 | |
|             ThinkingPCSDK.Flush(this.mAppId);
 | |
|         }
 | |
|         if ((events & TDAutoTrackEventType.AppEnd) != 0 && mStarted == false)
 | |
|         {
 | |
|             ThinkingPCSDK.TimeEvent(ThinkingSDKConstant.END_EVENT, this.mAppId);
 | |
|         }
 | |
| 
 | |
|         mStarted = true;
 | |
|     }
 | |
| 
 | |
|     public void EnableAutoTrack(TDAutoTrackEventType events, TDAutoTrackEventHandler_PC eventCallback, string appId)
 | |
|     {
 | |
|         mAutoTrackEvents = events;
 | |
|         mEventCallback_PC = eventCallback;
 | |
|         if ((events & TDAutoTrackEventType.AppInstall) != 0)
 | |
|         {
 | |
|             object result = ThinkingSDKFile.GetData(appId, ThinkingSDKConstant.IS_INSTALL, typeof(int));
 | |
|             if (result == null)
 | |
|             {
 | |
|                 ThinkingSDKFile.SaveData(appId, ThinkingSDKConstant.IS_INSTALL, 1);
 | |
|                 Dictionary<string, object> properties = null;
 | |
|                 if (mAutoTrackProperties.ContainsKey(TDAutoTrackEventType_APP_INSTALL))
 | |
|                 {
 | |
|                     properties = mAutoTrackProperties[TDAutoTrackEventType_APP_INSTALL];
 | |
|                 }
 | |
|                 else
 | |
|                 {
 | |
|                     properties = new Dictionary<string, object>();
 | |
|                 }
 | |
|                 if (mEventCallback_PC != null)
 | |
|                 {
 | |
|                     ThinkingSDKUtil.AddDictionary(properties, mEventCallback_PC.AutoTrackEventCallback_PC((int)TDAutoTrackEventType.AppInstall, properties));
 | |
|                 }
 | |
|                 ThinkingPCSDK.Track(ThinkingSDKConstant.INSTALL_EVENT, properties, this.mAppId);
 | |
|                 ThinkingPCSDK.Flush(this.mAppId);
 | |
|             } 
 | |
|         }
 | |
|         if ((events & TDAutoTrackEventType.AppStart) != 0 && mStarted == false)
 | |
|         {
 | |
|             Dictionary<string, object> properties = null;
 | |
|             if (mAutoTrackProperties.ContainsKey(TDAutoTrackEventType_APP_START))
 | |
|             {
 | |
|                 properties = mAutoTrackProperties[TDAutoTrackEventType_APP_START];
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 properties = new Dictionary<string, object>();
 | |
|             }
 | |
|             if (mEventCallback_PC != null)
 | |
|             {
 | |
|                 ThinkingSDKUtil.AddDictionary(properties, mEventCallback_PC.AutoTrackEventCallback_PC((int) TDAutoTrackEventType.AppStart, properties));
 | |
|             }
 | |
|             ThinkingPCSDK.Track(ThinkingSDKConstant.START_EVENT, properties, this.mAppId);
 | |
|             ThinkingPCSDK.Flush(this.mAppId);
 | |
|         }
 | |
|         if ((events & TDAutoTrackEventType.AppEnd) != 0 && mStarted == false)
 | |
|         {
 | |
|             ThinkingPCSDK.TimeEvent(ThinkingSDKConstant.END_EVENT, this.mAppId);
 | |
|         }
 | |
| 
 | |
|         mStarted = true;
 | |
|     }
 | |
| 
 | |
|     public void SetAutoTrackProperties(TDAutoTrackEventType events, Dictionary<string, object> properties)
 | |
|     {
 | |
|         mAutoTrackEvents = events;
 | |
|         if ((events & TDAutoTrackEventType.AppInstall) != 0)
 | |
|         {
 | |
|             if (mAutoTrackProperties.ContainsKey(TDAutoTrackEventType_APP_INSTALL))
 | |
|             {
 | |
|                 ThinkingSDKUtil.AddDictionary(mAutoTrackProperties[TDAutoTrackEventType_APP_INSTALL], properties);
 | |
|             }
 | |
|             else
 | |
|                 mAutoTrackProperties[TDAutoTrackEventType_APP_INSTALL] = properties;
 | |
|         }
 | |
|         if ((events & TDAutoTrackEventType.AppStart) != 0)
 | |
|         {
 | |
|             if (mAutoTrackProperties.ContainsKey(TDAutoTrackEventType_APP_START))
 | |
|             {
 | |
|                 ThinkingSDKUtil.AddDictionary(mAutoTrackProperties[TDAutoTrackEventType_APP_START], properties);
 | |
|             }
 | |
|             else
 | |
|                 mAutoTrackProperties[TDAutoTrackEventType_APP_START] = properties;
 | |
|         }
 | |
|         if ((events & TDAutoTrackEventType.AppEnd) != 0)
 | |
|         {
 | |
|             if (mAutoTrackProperties.ContainsKey(TDAutoTrackEventType_APP_END))
 | |
|             {
 | |
|                 ThinkingSDKUtil.AddDictionary(mAutoTrackProperties[TDAutoTrackEventType_APP_END], properties);
 | |
|             }
 | |
|             else
 | |
|                 mAutoTrackProperties[TDAutoTrackEventType_APP_END] = properties;
 | |
|         }
 | |
|         if ((events & TDAutoTrackEventType.AppCrash) != 0)
 | |
|         {
 | |
|             if (mAutoTrackProperties.ContainsKey(TDAutoTrackEventType_APP_CRASH))
 | |
|             {
 | |
|                 ThinkingSDKUtil.AddDictionary(mAutoTrackProperties[TDAutoTrackEventType_APP_CRASH], properties);
 | |
|             }
 | |
|             else
 | |
|                 mAutoTrackProperties[TDAutoTrackEventType_APP_CRASH] = properties;
 | |
|         }
 | |
|     }
 | |
| 
 | |
| }
 |