using PhxhSDK; using System; using System.Collections.Generic; public class BIManager : Singlenton, IInitable { public BILevelInfo LevelInfo; private IBIService _biService; private StorageEvent _storageEvent; private Dictionary _tempEventDictionary = new(4); private bool _isInit; public void Init() { //TODO 替换为需要使用的BI系统 Firebase or 自己的系统 InitBiService(); LevelInfo = new BILevelInfo(); _storageEvent = StorageMgr.Instance.GetStorage("StorageEvent"); _storageEvent ??= new StorageEvent(); _isInit = true; } 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; } } /// /// 上报普通事件 /// 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); } } public void TrackEvent(string eventName, Dictionary param) { if (!_isInit) return; try { _biService?.ReportEvent(eventName, param); } catch (Exception e) { DebugUtil.LogError(e.Message); } } /// /// 上报一次性事件 /// 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); } } /// /// 上报关卡内普通事件 /// public void TrackEventLevel(string eventName, string param1 = null, string param2 = null, string param3 = null) { if (!_isInit) return; try { var levelParam = new Dictionary(); //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(); //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); } } /// /// 上报关卡内一次性事件 /// 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(); //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(); //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; } }