update: 打点逻辑优化:初始化流程, 属性和打点缓存
--story=1021114 --user=yufei.hu 【中台】打点逻辑优化:初始化流程, 属性缓存 (QA 无需测试) https://www.tapd.cn/33527076/s/1159381dev
							parent
							
								
									3de35b69e5
								
							
						
					
					
						commit
						9f0ba03957
					
				|  | @ -1,11 +1,14 @@ | |||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| namespace Guru | ||||
| { | ||||
|     using System; | ||||
|     using System.Collections.Generic; | ||||
|     using UnityEngine; | ||||
|     using System.Linq; | ||||
|      | ||||
|     /// <summary> | ||||
|     /// 打点管理 | ||||
|  | @ -29,6 +32,8 @@ namespace Guru | |||
|         public const string EventLevelEndExit = "exit"; | ||||
|         public const string EventLevelEndTimeout = "timeout"; | ||||
|          | ||||
|         private const string KeyCachedScreen = "k_cached_screen"; | ||||
| 
 | ||||
|         #region 通用接口 | ||||
| 
 | ||||
|         /// <summary> | ||||
|  | @ -54,7 +59,8 @@ namespace Guru | |||
|         { | ||||
|             if (!IsInitialSuccess) | ||||
|             { | ||||
|                 UnityEngine.Debug.LogError($"{Tag} :: SetScreen {screen} :: Please call <GuruSDK.Start()> first, before you call <SetScreen>."); | ||||
|                 UnityEngine.Debug.LogWarning($"{Tag} :: SetScreen {screen} has been cached before SDK init!"); | ||||
|                 CacheUserProperty(KeyCachedScreen, $"{screen},{extra}"); | ||||
|                 return; | ||||
|             } | ||||
|             Analytics.SetCurrentScreen(screen, extra); | ||||
|  | @ -334,6 +340,7 @@ namespace Guru | |||
|             if (Model.IsNoAds) SetBuyNoAds(true); // 设置用户已经购买了去广告 | ||||
|         } | ||||
| 
 | ||||
|         private static Dictionary<string, string> _userPropertyCacheData = new Dictionary<string, string>(10); | ||||
|         private static HashSet<string> _userPropertyExistKeys = new HashSet<string>(); | ||||
| 
 | ||||
|         private static void RecordUserPropertyKey(string key) | ||||
|  | @ -349,6 +356,41 @@ namespace Guru | |||
|             return _userPropertyExistKeys?.Contains(key) ?? false; | ||||
|         } | ||||
| 
 | ||||
|         private static void CacheUserProperty(string key, string value) | ||||
|         { | ||||
|             if (_userPropertyCacheData == null) _userPropertyCacheData = new Dictionary<string, string>(10); | ||||
|             _userPropertyCacheData[key] = value; | ||||
|         } | ||||
| 
 | ||||
| 
 | ||||
|         private static void ConsumeAllCachedUserProperty() | ||||
|         { | ||||
|             if (_userPropertyCacheData == null || _userPropertyCacheData.Count == 0) return; | ||||
|             var keys = _userPropertyCacheData.Keys.ToArray(); | ||||
|             int i = 0; | ||||
|             int count = keys.Length; | ||||
|             var key = ""; | ||||
|             while (i < count) | ||||
|             { | ||||
|                 key = keys[i]; | ||||
|                 if (key == KeyCachedScreen) | ||||
|                 { | ||||
|                     var arr = _userPropertyCacheData[key].Split(','); | ||||
|                     string screenName = "", className = ""; | ||||
|                     if(arr.Length > 0) screenName = arr[0]; | ||||
|                     if(arr.Length > 1) className = arr[1]; | ||||
|                     SetScreen(screenName, className); | ||||
|                 } | ||||
|                 else | ||||
|                 { | ||||
|                     InternalSetUserProperty(key, _userPropertyCacheData[key]); | ||||
|                 } | ||||
| 
 | ||||
|                 i++; | ||||
|             } | ||||
|             _userPropertyCacheData.Clear(); | ||||
|         } | ||||
| 
 | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// 设置用户属性 | ||||
|  | @ -359,10 +401,19 @@ namespace Guru | |||
|         { | ||||
|             if (!IsInitialSuccess) | ||||
|             { | ||||
|                 UnityEngine.Debug.LogError($"{Tag} :: SetUserProperty {key}:{value} ::Please call <GuruSDK.Start()> first, before you call <SetUserProperty>."); | ||||
|                 CacheUserProperty(key , value); | ||||
|                 UnityEngine.Debug.LogWarning($"{Tag} :: SetUserProperty {key}:{value} Has been cached before SDK init!"); | ||||
|                 return; | ||||
|             } | ||||
|             RecordUserPropertyKey(key); | ||||
|              | ||||
|             ConsumeAllCachedUserProperty(); // 消耗所有的缓存值 | ||||
|              | ||||
|             InternalSetUserProperty(key, value); | ||||
|         } | ||||
| 
 | ||||
|         private static void InternalSetUserProperty(string key, string value) | ||||
|         { | ||||
|             RecordUserPropertyKey(key); // 补全属性打点 | ||||
|             Analytics.SetUserProperty(key, value); | ||||
|         } | ||||
| 
 | ||||
|  |  | |||
|  | @ -38,19 +38,37 @@ namespace Guru | |||
|         public static bool GetRemoteBool(string key, bool defaultValue = false) => RemoteConfigManager.GetBool(key, defaultValue); | ||||
| 
 | ||||
|          | ||||
|         /// <summary> | ||||
|         /// 注册监听某个 Key 的变化 | ||||
|         /// </summary> | ||||
|         /// <param name="key"></param> | ||||
|         /// <param name="onValueChanged"></param> | ||||
|         public static void RegisterOnValueChanged(string key, Action<string,string> onValueChanged) | ||||
|         { | ||||
|             RemoteConfigManager.RegisterOnValueChanged(key, onValueChanged); | ||||
|         } | ||||
|          | ||||
|         /// <summary> | ||||
|         /// 注销监听某个 Key 的变化 | ||||
|         /// </summary> | ||||
|         /// <param name="key"></param> | ||||
|         /// <param name="onValueChanged"></param> | ||||
|         public static void UnRegisterOnValueChanged(string key, Action<string,string> onValueChanged) | ||||
|         { | ||||
|             RemoteConfigManager.UnRegisterOnValueChanged(key, onValueChanged); | ||||
|         } | ||||
|          | ||||
|         /// <summary> | ||||
|         /// 获取所有云控配置 | ||||
|         /// </summary> | ||||
|         /// <returns></returns> | ||||
|         public static Dictionary<string, ConfigValue> GetRemoteAllValues() => RemoteConfigManager.GetAllValues(); | ||||
|          | ||||
|          | ||||
|         /// <summary> | ||||
|         ///  | ||||
|         /// </summary> | ||||
|         /// <param name="key"></param> | ||||
|         /// <returns></returns> | ||||
|         public static string GetRemoteStaticValue(string key) => RemoteConfigManager.GetStaticValue(key); | ||||
|          | ||||
|     } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue