NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Framework/BI/BIManager.cs

443 lines
12 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using PhxhSDK;
using System;
using System.Collections.Generic;
public partial class BIManager : Singlenton<BIManager>, IInitable
{
public BILevelInfo LevelInfo;
private IBIService _biService;
private StorageEvent _storageEvent;
private Dictionary<string, object> _tempEventDictionary = new(4);
private bool _isInit;
public void Init()
{
//TODO 替换为需要使用的BI系统 Firebase or 自己的系统
InitBiService();
LevelInfo = new BILevelInfo();
_storageEvent = StorageMgr.Instance.GetStorage<StorageEvent>("StorageEvent");
_storageEvent ??= new StorageEvent();
_isInit = true;
//初次启动游戏打点
DebugUtil.Log("打点:GameStart");
TrackEventOnce(BI_GameStart, param: new Dictionary<string, object>() { { "event", "first_open" } });
}
private void InitBiService()
{
//Firebase
var helperName = SDKManager.SdkName.TapTap;
#if SDK_FIREBASE
helperName = SDKManager.SdkName.FireBase;
_biService = SDKManager.Instance.GetSdkHelper(helperName) as IBIService;
#endif
#if SDK_TAPTAP
helperName = SDKManager.SdkName.TapTap;
_biService =SDKManager.Instance.GetSdkHelper(helperName) as IBIService;
#endif
#if SDK_TALKINGDATA
//helperName = SDKManager.SdkName.TalkingData;
//_biService = SDKManager.Instance.GetSdkHelper(helperName) as IBIService;
//TD在登录后初始化
#endif
if (_biService == null)
{
DebugUtil.Log("Get BI Service error, SDK helper name is {0}", helperName);
return;
}
//记录一个账号,当账号登录时调用
_biService?.SetUser(SDKManager.Instance.ApplicationUserID);
//设置通用属性 例如 服务器
_biService?.SetUserProperty("platform", DeviceHelper.GetPlatformString());
}
public void BiAfterLoginInit(SDKManager.SdkName name)
{
_biService = SDKManager.Instance.GetSdkHelper(name) as IBIService;
if(_biService == null)
{
DebugUtil.Log("Get BI Service error, SDK helper name is {0}", name);
return;
}
}
/// <summary>
/// 上报普通事件
/// </summary>
public void TrackEvent(string eventName, string param1 = null, string param2 = null, string param3 = null)
{
if (!_isInit)
return;
try
{
_tempEventDictionary.Clear();
var userParam = _tempEventDictionary;
if (!string.IsNullOrEmpty(param1))
{
userParam.Add("param1", param1);
}
if (!string.IsNullOrEmpty(param2))
{
userParam.Add("param2", param2);
}
if (!string.IsNullOrEmpty(param3))
{
userParam.Add("param3", param3);
}
_biService?.ReportEvent(eventName, userParam);
_tempEventDictionary.Clear();
}
catch (Exception e)
{
DebugUtil.LogError("BI Event: {0}, TrackEvent Error: {1}", eventName, e);
}
}
public void TrackEvent(string eventName, object param1 = null, object param2 = null, object param3 = null)
{
if (!_isInit)
return;
try
{
_tempEventDictionary.Clear();
var userParam = _tempEventDictionary;
if (param1 != null)
{
userParam.Add("param1", param1);
}
if (param2 != null)
{
userParam.Add("param2", param2);
}
if (param3 != null)
{
userParam.Add("param3", param3);
}
_biService?.ReportEvent(eventName, userParam);
_tempEventDictionary.Clear();
}
catch (Exception e)
{
DebugUtil.LogError("BI Event: {0}, TrackEvent Error: {1}", eventName, e);
}
}
/// <summary>
/// 用于传输参数自定义命名事件
/// </summary>
/// <param name="eventName"></param>
/// <param name="param"></param>
public void TrackEvent(string eventName, Dictionary<string, object> param)
{
if (!_isInit)
return;
try
{
_biService?.ReportEvent(eventName, param);
}
catch (Exception e)
{
DebugUtil.LogError(e.Message);
}
}
/// <summary>
/// 上报一次性事件
/// </summary>
public void TrackEventOnce(string firstEventName, string param1 = null, string param2 = null, string param3 = null)
{
if (!_isInit)
return;
try
{
if (IsRecorded(firstEventName))
{
DebugUtil.Log("已经上报过 {0} 事件, 不会再次上报", firstEventName);
return;
}
_tempEventDictionary.Clear();
var userParam = _tempEventDictionary;
if (!string.IsNullOrEmpty(param1))
{
userParam.Add("param1", param1);
}
if (!string.IsNullOrEmpty(param2))
{
userParam.Add("param2", param2);
}
if (!string.IsNullOrEmpty(param3))
{
userParam.Add("param3", param3);
}
_storageEvent.EventList.Add(firstEventName);
_biService?.ReportEvent(firstEventName, userParam);
StorageManager.Instance.SyncForce = true;
_tempEventDictionary.Clear();
}
catch (Exception e)
{
DebugUtil.LogError("BI Event: {0}, TrackEventOnce Error: {1}", firstEventName, e);
}
}
public void TrackEventOnce(string firstEventName, object param1 = null, object param2 = null, object param3 = null)
{
if (!_isInit)
return;
try
{
if (IsRecorded(firstEventName))
{
DebugUtil.Log("已经上报过 {0} 事件, 不会再次上报", firstEventName);
return;
}
_tempEventDictionary.Clear();
var userParam = _tempEventDictionary;
if (param1 != null)
{
userParam.Add("param1", param1);
}
if (param2 != null)
{
userParam.Add("param2", param2);
}
if (param3 != null)
{
userParam.Add("param3", param3);
}
_storageEvent.EventList.Add(firstEventName);
_biService?.ReportEvent(firstEventName, userParam);
StorageManager.Instance.SyncForce = true;
_tempEventDictionary.Clear();
}
catch (Exception e)
{
DebugUtil.LogError("BI Event: {0}, TrackEventOnce Error: {1}", firstEventName, e);
}
}
/// <summary>
/// 用于传输参数自定义命名事件
/// </summary>
/// <param name="firstEventName"></param>
/// <param name="param"></param>
public void TrackEventOnce(string firstEventName,Dictionary<string,object> param)
{
if (!_isInit)
return;
try
{
if (IsRecorded(firstEventName))
{
DebugUtil.Log("已经上报过 {0} 事件, 不会再次上报", firstEventName);
return;
}
_storageEvent.EventList.Add(firstEventName);
_biService?.ReportEvent(firstEventName, param);
StorageManager.Instance.SyncForce = true;
}
catch (Exception e)
{
DebugUtil.LogError("BI Event: {0}, TrackEventOnce Error: {1}", firstEventName, e);
}
}
/// <summary>
/// 上报关卡内普通事件
/// </summary>
public void TrackEventLevel(string eventName, string param1 = null, string param2 = null, string param3 = null)
{
if (!_isInit)
return;
try
{
var levelParam = new Dictionary<string, object>();
//TODO 初始化需要上传的LevelInfo
//LevelInfo.LevelID = ...
levelParam = Utils.PropertiesNameValue2ObjectDictionary(LevelInfo);
if (!string.IsNullOrEmpty(param1))
{
levelParam.Add("param1", param1);
}
if (!string.IsNullOrEmpty(param2))
{
levelParam.Add("param2", param2);
}
if (!string.IsNullOrEmpty(param3))
{
levelParam.Add("param3", param3);
}
_biService?.ReportEvent(eventName, levelParam);
}
catch (Exception e)
{
DebugUtil.LogError("BI Event: {0}, TrackEventLevel Error: {1}", eventName, e);
}
}
public void TrackEventLevel(string eventName, object param1 = null, object param2 = null, object param3 = null)
{
if (!_isInit)
return;
try
{
var levelParam = new Dictionary<string, object>();
//TODO 初始化需要上传的LevelInfo
//LevelInfo.LevelID = ...
levelParam = Utils.PropertiesNameValue2ObjectDictionary(LevelInfo);
if (param1 != null)
{
levelParam.Add("param1", param1);
}
if (param2 != null)
{
levelParam.Add("param2", param2);
}
if (param3 != null)
{
levelParam.Add("param3", param3);
}
_biService?.ReportEvent(eventName, levelParam);
}
catch (Exception e)
{
DebugUtil.LogError("BI Event: {0}, TrackEventLevel Error: {1}", eventName, e);
}
}
/// <summary>
/// 上报关卡内一次性事件
/// </summary>
public void TrackEventLevelOnce(string firstEventName, string param1 = null, string param2 = null,
string param3 = null)
{
if (!_isInit)
return;
try
{
if (IsRecorded(firstEventName))
{
DebugUtil.Log("已经上报过 {0} 关卡事件,不会再次上报", firstEventName);
return;
}
var levelParam = new Dictionary<string, object>();
//TODO 初始化需要上传的LevelInfo
//LevelInfo.LevelID = ...
levelParam = Utils.PropertiesNameValue2ObjectDictionary(LevelInfo);
if (!string.IsNullOrEmpty(param1))
{
levelParam.Add("param1", param1);
}
if (!string.IsNullOrEmpty(param2))
{
levelParam.Add("param2", param2);
}
if (!string.IsNullOrEmpty(param3))
{
levelParam.Add("param3", param3);
}
_biService?.ReportEvent(firstEventName, levelParam);
_storageEvent.EventList.Add(firstEventName);
StorageManager.Instance.SyncForce = true;
}
catch (Exception e)
{
DebugUtil.LogError("BI Event: {0}, TrackEventLevelOnce Error: {1}", firstEventName, e);
}
}
public void TrackEventLevelOnce(string firstEventName, object param1 = null, object param2 = null,
object param3 = null)
{
if (!_isInit)
return;
try
{
if (IsRecorded(firstEventName))
{
DebugUtil.Log("已经上报过 {0} 关卡事件,不会再次上报", firstEventName);
return;
}
var levelParam = new Dictionary<string, object>();
//TODO 初始化需要上传的LevelInfo
//LevelInfo.LevelID = ...
levelParam = Utils.PropertiesNameValue2ObjectDictionary(LevelInfo);
if (param1 != null)
{
levelParam.Add("param1", param1);
}
if (param2 != null)
{
levelParam.Add("param2", param2);
}
if (param3 != null)
{
levelParam.Add("param3", param3);
}
_biService?.ReportEvent(firstEventName, levelParam);
_storageEvent.EventList.Add(firstEventName);
StorageManager.Instance.SyncForce = true;
}
catch (Exception e)
{
DebugUtil.LogError("BI Event: {0}, TrackEventLevelOnce Error: {1}", firstEventName, e);
}
}
private bool IsRecorded(string eventName)
{
return _storageEvent.EventList.Contains(eventName);
}
public void Release()
{
_tempEventDictionary = null;
}
}