upm-guru-sdk-analytics/Runtime/Script/GuruAnalytics.cs

248 lines
6.7 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Text;
using Newtonsoft.Json;
using UnityEngine;
namespace Guru
{
public class GuruAnalytics
{
// Plugin Version
public const string Version = "1.8.4";
public static readonly string Tag = "[ANA]";
private static IAnalyticsAgent _agent;
public static IAnalyticsAgent Agent
{
get
{
if (_agent == null)
{
#if UNITY_EDITOR
_agent = new AnalyticsAgentStub();
#elif UNITY_ANDROID
_agent = new AnalyticsAgentAndroid();
#elif UNITY_IOS
_agent = new AnalyticsAgentIOS();
#endif
}
return _agent;
}
}
private static Dictionary<string, string> _userProperties;
/// <summary>
/// 用户属性缓存字典
/// </summary>
public static Dictionary<string, string> UserProperties
{
get
{
if (_userProperties == null)
{
_userProperties = new Dictionary<string, string>(10);
}
return _userProperties;
}
}
#region 公用接口
/// <summary>
/// 初始化接口
/// </summary>
public static void Init(string appId, string deviceInfo, bool isDebug = false)
{
Agent?.Init(appId, deviceInfo, isDebug);
#if UNITY_IOS
// AnalyticsAgentIOS.TestCrashEvent(); // 测试触发一下崩溃事件
#endif
}
/// <summary>
/// 设置视图名称
/// </summary>
/// <param name="screenName"></param>
public static void SetScreen(string screenName)
{
CacheUserProperty($"screen_name", screenName);
Agent?.SetScreen(screenName);
}
/// <summary>
/// 设置广告ID
/// </summary>
/// <param name="id"></param>
public static void SetAdId(string id)
{
CacheUserProperty($"ad_id", id);
Agent?.SetAdId(id);
}
/// <summary>
/// 设置用户属性
/// </summary>
/// <param name="key"></param>
/// <param name="value"></param>
public static void SetUserProperty(string key, string value)
{
CacheUserProperty(key, value); // 添加用户属性
Agent?.SetUserProperty(key, value);
}
/// <summary>
/// 设置Firebase ID
/// </summary>
/// <param name="id"></param>
public static void SetFirebaseId(string id)
{
CacheUserProperty($"firebase_id", id);
Agent?.SetFirebaseId(id);
}
/// <summary>
/// 设置Adjust ID
/// </summary>
/// <param name="id"></param>
public static void SetAdjustId(string id)
{
CacheUserProperty($"adjust_id", id);
Agent?.SetAdjustId(id);
}
/// <summary>
/// 设置设备ID
/// </summary>
/// <param name="deviceId"></param>
public static void SetDeviceId(string deviceId)
{
CacheUserProperty($"device_id", deviceId);
Agent?.SetDeviceId(deviceId);
}
/// <summary>
/// 设置用户ID
/// </summary>
/// <param name="uid"></param>
public static void SetUid(string uid)
{
CacheUserProperty($"uid", uid);
Agent?.SetUid(uid);
}
/// <summary>
/// 上报事件成功率
/// </summary>
public static void ReportEventSuccessRate() => Agent?.ReportEventSuccessRate();
/// <summary>
/// 上报打点事件
/// </summary>
/// <param name="eventName">事件名称</param>
/// <param name="data">INT类型的值</param>
public static void LogEvent(string eventName, Dictionary<string, dynamic> data = null)
{
string raw = "";
if (data != null && data.Count > 0)
{
raw = BuildParamsJson(data);
}
Debug.Log($"{Tag} event:{eventName} | raw: {raw}");
Agent?.LogEvent(eventName, raw);
}
private static string BuildParamsString(Dictionary<string, dynamic> data)
{
string raw = "";
List<string> strList = new List<string>(data.Count);
foreach (var kvp in data)
{
strList.Add(BuildStringValue(kvp));
raw = string.Join(",", strList);
}
return raw;
}
private static string BuildParamsJson(Dictionary<string, dynamic> data)
{
try
{
// 强制转换加入国家设置
return JsonConvert.SerializeObject(data, new JsonSerializerSettings()
{
Culture = new CultureInfo("en-US"),
});
}
catch (Exception e)
{
Debug.LogError(e);
}
return "";
}
/// <summary>
/// 构建带有类型格式的Str值
/// </summary>
/// <param name="kvp"></param>
/// <returns></returns>
private static string BuildStringValue(KeyValuePair<string, dynamic> kvp)
{
if (kvp.Value is int || kvp.Value is long)
{
return $"{kvp.Key}:i{kvp.Value}";
}
if (kvp.Value is double || kvp.Value is float)
{
double dValue = (double)((object)kvp.Value);
return $"{kvp.Key}:d{dValue.ToString("F11", new CultureInfo("en-US"))}"; // 保留精度进行转换
}
return $"{kvp.Key}:s{kvp.Value}";
}
/// <summary>
/// 设置太极02值
/// </summary>
/// <param name="value"></param>
public static void SetTch02Value(double value)
{
Debug.Log($"{Tag} set tch_02_value:{value}");
Agent?.SetTch02Value(value);
}
#endregion
#region iOS独有接口
#if UNITY_IOS
// 触发测试崩溃埋点
public static void TestCrash() => AnalyticsAgentIOS.TestCrashEvent();
#endif
#endregion
#region 用户属性
/// <summary>
/// 记录用户属性
/// </summary>
/// <param name="key"></param>
/// <param name="value"></param>
private static void CacheUserProperty(string key, string value)
{
UserProperties[key] = value;
}
#endregion
}
}