update: 打点逻辑优化:初始化流程, 属性和打点缓存

--story=1021114 --user=yufei.hu 【中台】打点逻辑优化:初始化流程, 属性缓存 (QA 无需测试) https://www.tapd.cn/33527076/s/1159381
dev
胡宇飞 2024-07-25 11:17:16 +08:00
parent 3de35b69e5
commit 9f0ba03957
2 changed files with 73 additions and 4 deletions

View File

@ -1,11 +1,14 @@
namespace Guru
{
using System;
using System.Collections.Generic;
using UnityEngine;
using System.Linq;
/// <summary>
/// 打点管理
@ -28,6 +31,8 @@ namespace Guru
public const string EventLevelEndFail = "fail";
public const string EventLevelEndExit = "exit";
public const string EventLevelEndTimeout = "timeout";
private const string KeyCachedScreen = "k_cached_screen";
#region 通用接口
@ -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);
}

View File

@ -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);
}