diff --git a/Runtime/GuruAnalytics/Editor/Dependencies.xml b/Runtime/GuruAnalytics/Editor/Dependencies.xml index fce49e3..f4fce54 100644 --- a/Runtime/GuruAnalytics/Editor/Dependencies.xml +++ b/Runtime/GuruAnalytics/Editor/Dependencies.xml @@ -25,7 +25,7 @@ Sample Dependencies.xml: - + git@github.com:castbox/GuruSpecs.git diff --git a/Runtime/GuruAnalytics/Plugins/Android/U3DAnalytics-release.aar b/Runtime/GuruAnalytics/Plugins/Android/U3DAnalytics-release.aar deleted file mode 100644 index 1ba7c22..0000000 Binary files a/Runtime/GuruAnalytics/Plugins/Android/U3DAnalytics-release.aar and /dev/null differ diff --git a/Runtime/GuruAnalytics/Plugins/Android/U3DAnalytics-release.aar.meta b/Runtime/GuruAnalytics/Plugins/Android/U3DAnalytics-release.aar.meta deleted file mode 100644 index 8c5d070..0000000 --- a/Runtime/GuruAnalytics/Plugins/Android/U3DAnalytics-release.aar.meta +++ /dev/null @@ -1,32 +0,0 @@ -fileFormatVersion: 2 -guid: a336b814594434b4092d38e5ce76577a -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - Android: Android - second: - enabled: 1 - settings: {} - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/GuruAnalytics/Plugins/Android/U3DAnalytics_1.9.0.aar b/Runtime/GuruAnalytics/Plugins/Android/U3DAnalytics_1.9.0.aar new file mode 100644 index 0000000..9e20434 Binary files /dev/null and b/Runtime/GuruAnalytics/Plugins/Android/U3DAnalytics_1.9.0.aar differ diff --git a/Runtime/GuruAnalytics/Plugins/Android/U3DAnalytics_1.9.0.aar.meta b/Runtime/GuruAnalytics/Plugins/Android/U3DAnalytics_1.9.0.aar.meta new file mode 100644 index 0000000..5c40e68 --- /dev/null +++ b/Runtime/GuruAnalytics/Plugins/Android/U3DAnalytics_1.9.0.aar.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 979b8da6b92542e990e6038f43f1835d +timeCreated: 1710317078 \ No newline at end of file diff --git a/Runtime/GuruAnalytics/Plugins/Android/guru_analytics-release.aar b/Runtime/GuruAnalytics/Plugins/Android/guru_analytics-release.aar deleted file mode 100644 index b8826ec..0000000 Binary files a/Runtime/GuruAnalytics/Plugins/Android/guru_analytics-release.aar and /dev/null differ diff --git a/Runtime/GuruAnalytics/Plugins/Android/guru_analytics-release.aar.meta b/Runtime/GuruAnalytics/Plugins/Android/guru_analytics-release.aar.meta deleted file mode 100644 index 54f128a..0000000 --- a/Runtime/GuruAnalytics/Plugins/Android/guru_analytics-release.aar.meta +++ /dev/null @@ -1,32 +0,0 @@ -fileFormatVersion: 2 -guid: c5a9f9e11213b4bb78856debe4c967ca -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - Android: Android - second: - enabled: 1 - settings: {} - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/GuruAnalytics/Plugins/Android/guru_analytics_0.3.2.aar b/Runtime/GuruAnalytics/Plugins/Android/guru_analytics_0.3.2.aar new file mode 100644 index 0000000..63e9496 Binary files /dev/null and b/Runtime/GuruAnalytics/Plugins/Android/guru_analytics_0.3.2.aar differ diff --git a/Runtime/GuruAnalytics/Plugins/Android/guru_analytics_0.3.2.aar.meta b/Runtime/GuruAnalytics/Plugins/Android/guru_analytics_0.3.2.aar.meta new file mode 100644 index 0000000..b412a2e --- /dev/null +++ b/Runtime/GuruAnalytics/Plugins/Android/guru_analytics_0.3.2.aar.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 7d0a7721c57840829fad465c4c33e846 +timeCreated: 1710317052 \ No newline at end of file diff --git a/Runtime/GuruAnalytics/Plugins/iOS/Podfile b/Runtime/GuruAnalytics/Plugins/iOS/Podfile deleted file mode 100644 index 2e9bf51..0000000 --- a/Runtime/GuruAnalytics/Plugins/iOS/Podfile +++ /dev/null @@ -1,14 +0,0 @@ -source 'https://github.com/CocoaPods/Specs.git' -source 'git@github.com:castbox/GuruSpecs.git' - -platform :ios, '11.0' - -target 'UnityFramework' do - - pod 'GuruAnalyticsLib', '~>0.2.2' -# pod 'GuruAnalyticsLib', :git => 'git@github.com:castbox/GuruAnalytics_iOS.git', :branch => 'dev' -end -target 'Unity-iPhone' do -end -use_frameworks! - diff --git a/Runtime/GuruAnalytics/Plugins/iOS/Podfile.meta b/Runtime/GuruAnalytics/Plugins/iOS/Podfile.meta deleted file mode 100644 index 769c9b7..0000000 --- a/Runtime/GuruAnalytics/Plugins/iOS/Podfile.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 10035163694574b63b74cd99c7ee5c68 -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/GuruAnalytics/Plugins/iOS/U3DAnalytics.mm b/Runtime/GuruAnalytics/Plugins/iOS/U3DAnalytics_1.9.0.mm similarity index 82% rename from Runtime/GuruAnalytics/Plugins/iOS/U3DAnalytics.mm rename to Runtime/GuruAnalytics/Plugins/iOS/U3DAnalytics_1.9.0.mm index a485a9a..aea0805 100644 --- a/Runtime/GuruAnalytics/Plugins/iOS/U3DAnalytics.mm +++ b/Runtime/GuruAnalytics/Plugins/iOS/U3DAnalytics_1.9.0.mm @@ -17,8 +17,8 @@ @end -static NSString *gameobjectName; -static NSString *callbackName; +static NSString *gameobjectName = @"GuruCallback"; +static NSString *callbackName =@"OnCallback"; static GuruAnalytics *_analytics; @@ -26,7 +26,7 @@ static GuruAnalytics *_analytics; @implementation U3DAnalytics // Const value define -NSString * const Version = @"1.8.1"; +NSString * const Version = @"1.9.0"; static const double kUploadPeriodInSecond = 60.0; static const int kBatchLimit = 15; @@ -35,6 +35,8 @@ static const double kInitializeTimeout = 5.0; static double tch001MaxValue = 0.01; static double tch02MaxValue = 0.2; +static bool enableErrorLog = false; + NSString * const TchAdRevRoas001 = @"tch_ad_rev_roas_001"; NSString * const TchAdRevRoas02 = @"tch_ad_rev_roas_02"; NSString * const TchError = @"tch_error"; @@ -78,12 +80,29 @@ NSString * const TchError = @"tch_error"; tch02MaxValue = value; } +// 设置是否启用日志错误上报 ++(void) setEnableErrorLog: (bool) value{ + if(enableErrorLog == false && value){ + + enableErrorLog = value; + + [GuruAnalytics registerInternalEventObserverWithReportCallback:^(NSInteger code, NSString * info){ + [U3DAnalytics onEventCallback:code andInfo:info]; + }]; + } +} + +// 事件上报回调 ++(void) onEventCallback: (NSInteger)code andInfo:(NSString *) info{ + [U3DAnalytics sendMessage: [U3DAnalytics buildLogEventString: code andMessage:info]]; +} + + // 构建数据 -//+(NSString *) buildDataString: (int)status andMessage: (NSString *)msg{ -// -// NSString *jsonString = [NSString stringWithFormat: @"{\"action\":\"gdpr\",\"data\":{\"status\":%d,\"msg\":\"%@\"}}", status, msg]; -// return jsonString; -//} ++(NSString *) buildLogEventString: (NSInteger)status andMessage: (NSString *)msg{ + NSString *jsonString = [NSString stringWithFormat: @"{\"action\":\"logger_error\",\"data\":{\"code\":%d,\"msg\":\"%@\"}}", (int)status, msg]; + return jsonString; +} // 构建数据字典 +(NSDictionary *) buildDataDict: (NSString *) str{ @@ -179,6 +198,19 @@ NSString * const TchError = @"tch_error"; } } +// 向Unity发送数据 ++(void) sendMessage: (NSString *)msg +{ + // NSLog(@"--- unityInitSDK222: %@:%@", gameobjectName, callbackName); + if(gameobjectName != nil && callbackName != nil){ + char *t1 = [U3DAnalytics finalChar: gameobjectName]; + char *t2 = [U3DAnalytics finalChar: callbackName]; + char *t3 = [U3DAnalytics finalChar: msg]; + + UnitySendMessage(t1, t2, t3); + } +} + // 上报 tch_error 事件 @@ -206,6 +238,10 @@ NSString * const TchError = @"tch_error"; return NO; } +//--------------------------- + + + @end //============================ UNITY PUBLIC API ============================ @@ -225,6 +261,12 @@ extern "C" { loggerDebug:isDebug]; } + void unityInitCallback(const char *gameobject, const char *method){ + // NSLog(@"--- unityInitSDK111: %s:%s", gameobject, method); + gameobjectName = [NSString stringWithUTF8String:gameobject]; + callbackName = [NSString stringWithUTF8String:method]; + } + // 设置用户ID void unitySetUserID(const char *uid){ [GuruAnalytics setUserID:[U3DAnalytics charToString:uid]]; @@ -288,6 +330,11 @@ extern "C" { }]; } + // 注册内部日志 Error 监听 + void unitySetEnableErrorLog(bool value){ + [U3DAnalytics setEnableErrorLog:value]; + } + } diff --git a/Runtime/GuruAnalytics/Plugins/iOS/U3DAnalytics.mm.meta b/Runtime/GuruAnalytics/Plugins/iOS/U3DAnalytics_1.9.0.mm.meta similarity index 100% rename from Runtime/GuruAnalytics/Plugins/iOS/U3DAnalytics.mm.meta rename to Runtime/GuruAnalytics/Plugins/iOS/U3DAnalytics_1.9.0.mm.meta diff --git a/Runtime/GuruAnalytics/README.md b/Runtime/GuruAnalytics/README.md index acf90c0..486da4b 100644 --- a/Runtime/GuruAnalytics/README.md +++ b/Runtime/GuruAnalytics/README.md @@ -6,6 +6,15 @@ GuruAnalyticsLib 的 Unity 插件库 ## Change Logs +### 1.9.0 +- Android 端对齐 0.3.1+. + > Hash: 0457eba963a9049fb6a16708b921573ef36c99b1 +- iOS 端对齐 0.3.3 + > Hash: c86d19fb38c8260f468e38d756aca84e89d58c8b +- 新增自打点的错误上报功能, 但需要项目内接入 GuruSDKCallbacks 对象才能完成日志回发的功能 +- 错误上报开在 Plugin 外部应关依赖云控开启, 默认关闭. + + ### 1.8.4 - 优化Android 端 Worker 调用逻辑, 重启 Worker 有助于让打点数据更准确 diff --git a/Runtime/GuruAnalytics/Runtime/Script/GuruAnalytics.cs b/Runtime/GuruAnalytics/Runtime/Script/GuruAnalytics.cs index 403fece..ec37481 100644 --- a/Runtime/GuruAnalytics/Runtime/Script/GuruAnalytics.cs +++ b/Runtime/GuruAnalytics/Runtime/Script/GuruAnalytics.cs @@ -5,6 +5,7 @@ using System.Globalization; using System.Linq; using System.Text; using Newtonsoft.Json; +using Newtonsoft.Json.Linq; using UnityEngine; @@ -14,11 +15,13 @@ namespace Guru public class GuruAnalytics { // Plugin Version - public const string Version = "1.8.4"; + public const string Version = "1.9.0"; + + public static readonly string Tag = "[ANA]"; + private static readonly string ActionName = "logger_error"; - public static readonly string Tag = "[ANA]"; private static IAnalyticsAgent _agent; - + public static IAnalyticsAgent Agent { get @@ -54,16 +57,34 @@ namespace Guru } private static bool _autoSyncProperties = false; + private static bool _enableErrorLog = false; + + /// + /// 启动日志错误上报 + /// + public static bool EnableErrorLog + { + get => _enableErrorLog; + set + { + _enableErrorLog = value; + if (_enableErrorLog) InitCallbacks(); // 激活错误日志回调 + if (Agent != null) Agent.EnableErrorLog = _enableErrorLog; + } + } #region 公用接口 /// /// 初始化接口 /// - public static void Init(string appId, string deviceInfo, bool isDebug = false, bool syncProperties = false) + public static void Init(string appId, string deviceInfo, bool isDebug = false, + bool enableErrorLog = false, bool syncProperties = false) { _autoSyncProperties = syncProperties; + _enableErrorLog = enableErrorLog; Agent?.Init(appId, deviceInfo, isDebug); + if(_enableErrorLog) InitCallbacks(); // 激活错误日志回调 } /// @@ -260,7 +281,6 @@ namespace Guru { bool needUpdate = !UserProperties.ContainsKey(key) || UserProperties[key] != value; UserProperties[key] = value; - // if (needUpdate) UpdateAllUserProperties(); } @@ -284,6 +304,126 @@ namespace Guru #endregion + + #region 日志回调 + + private static void InitCallbacks() + { + try + { + GuruSDKCallback.RemoveCallback(OnSDKCallback); + GuruSDKCallback.AddCallback(OnSDKCallback); + if (Agent != null) + Agent.InitCallback(GuruSDKCallback.ObjectName, GuruSDKCallback.MethodName); + } + catch (Exception ex) + { + Analytics.LogCrashlytics(ex); + } + + } + + + /// + /// 获取SDK回调 + /// + /// + private static void OnSDKCallback(string msg) + { + //------- message send to unity ---------- + Debug.Log($"{Tag} get callback errorInfo:\n{msg}"); + try + { + var response = JsonConvert.DeserializeObject(msg); + if (response.TryGetValue("action", out var jAct)) + { + if (jAct.ToString() == ActionName + && response.TryGetValue("data", out var jData) && jData is JObject data) + { + int code = -1; + string message = msg; + + if (data.TryGetValue("code", out var jCode)) + { + int.TryParse(jCode.ToString(), out code); + } + if (data.TryGetValue("msg", out var jMsg)) + { + message = jMsg.ToString(); + } + + var errorCode = (AnalyticsCode)code; + switch (errorCode) + { + case AnalyticsCode.Network_Lost: + case AnalyticsCode.ERROR_API: + case AnalyticsCode.ERROR_DNS: + case AnalyticsCode.ERROR_ZIP: + case AnalyticsCode.ERROR_LOAD_MARK: + case AnalyticsCode.ERROR_RESPONSE: + case AnalyticsCode.ERROR_CACHE_CONTROL: + case AnalyticsCode.ERROR_DELETE_EXPIRED: + OnLoggerErrorEvent(code, message); + break; + } + return; + } + } + Debug.LogError($"{Tag} Parse callback Error"); + } + catch (Exception ex) + { + Analytics.LogCrashlytics(ex); + } + } + + /// + /// 上报错误信息 + /// + /// + /// + private static void OnLoggerErrorEvent(int code, string errorInfo = "") + { + Dictionary parameters = new Dictionary() + { + {"item_category", "error_event"}, + {"item_name", ((AnalyticsCode)code).ToString()}, + {"country", IPMConfig.IPM_COUNTRY_CODE}, + {"network", Application.internetReachability.ToString()}, + }; + if (!string.IsNullOrEmpty(errorInfo)) + { + int len = 32; + if (errorInfo.Length > len) errorInfo = errorInfo.TrimStart().Substring(0, len); + parameters["err"] = errorInfo; + } + + Debug.Log($"{Tag} --- ErrorLogInfo:: code:{code}\tinfo:{errorInfo}"); + + // Only for firebase GA + Analytics.LogEvent("dev_audit", parameters, + new Analytics.EventSetting() { EnableFirebaseAnalytics = true }); + } + + #endregion + } + + /// + /// 网络状态枚举 + /// + public enum AnalyticsCode + { + Unknown = -1, + + Network_Lost = 22, + + ERROR_API = 101, + ERROR_RESPONSE = 102, + ERROR_CACHE_CONTROL = 103, + ERROR_DELETE_EXPIRED = 104, + ERROR_LOAD_MARK = 105, + ERROR_DNS = 106, + ERROR_ZIP = 107, } } diff --git a/Runtime/GuruAnalytics/Runtime/Script/IAnalyticsAgent.cs b/Runtime/GuruAnalytics/Runtime/Script/IAnalyticsAgent.cs index 70d1fa0..ac45d1c 100644 --- a/Runtime/GuruAnalytics/Runtime/Script/IAnalyticsAgent.cs +++ b/Runtime/GuruAnalytics/Runtime/Script/IAnalyticsAgent.cs @@ -14,8 +14,10 @@ namespace Guru void SetDeviceId(string deviceId); void SetUid(string uid); bool IsDebug { get; } + bool EnableErrorLog { get; set; } void LogEvent(string eventName, string parameters); void ReportEventSuccessRate(); // 上报任务成功率 void SetTch02Value(double value); // 设置太极02数值 + void InitCallback(string objName, string method); // 设置回调对象参数 } } \ No newline at end of file diff --git a/Runtime/GuruAnalytics/Runtime/Script/Impl/AnalyticsAgentAndroid.cs b/Runtime/GuruAnalytics/Runtime/Script/Impl/AnalyticsAgentAndroid.cs index 3caef17..d050737 100644 --- a/Runtime/GuruAnalytics/Runtime/Script/Impl/AnalyticsAgentAndroid.cs +++ b/Runtime/GuruAnalytics/Runtime/Script/Impl/AnalyticsAgentAndroid.cs @@ -123,6 +123,18 @@ namespace Guru public void LogEvent(string eventName, string parameters) => CallStatic("logEvent", eventName, parameters); public void ReportEventSuccessRate() => CallStatic("reportEventRate"); public void SetTch02Value(double value) => CallStatic("setTch02Value", value); + public void InitCallback(string objName, string method) => CallStatic("initCallback", objName, method); + + private bool _enableErrorLog; + public bool EnableErrorLog + { + get => _enableErrorLog; + set + { + _enableErrorLog = value; + CallStatic("setEnableErrorLog", _enableErrorLog); + } + } #endregion } diff --git a/Runtime/GuruAnalytics/Runtime/Script/Impl/AnalyticsAgentIOS.cs b/Runtime/GuruAnalytics/Runtime/Script/Impl/AnalyticsAgentIOS.cs index 5710a82..7f410f3 100644 --- a/Runtime/GuruAnalytics/Runtime/Script/Impl/AnalyticsAgentIOS.cs +++ b/Runtime/GuruAnalytics/Runtime/Script/Impl/AnalyticsAgentIOS.cs @@ -24,6 +24,8 @@ namespace Guru [DllImport(K_INTERNAL)] private static extern void unityInitException(); [DllImport(K_INTERNAL)] private static extern void unityTestUnrecognizedSelectorCrash(); [DllImport(K_INTERNAL)] private static extern void unitySetTch02Value(double value); + [DllImport(K_INTERNAL)] private static extern void unitySetEnableErrorLog(bool value); + [DllImport(K_INTERNAL)] private static extern void unityInitCallback(string objName, string method); #endif private static bool _isDebug = false; @@ -32,6 +34,27 @@ namespace Guru #region 接口实现 + private bool _enableErrorLog; + public bool EnableErrorLog + { + get => _enableErrorLog; + set + { + _enableErrorLog = value; +#if UNITY_IOS + unitySetEnableErrorLog(_enableErrorLog); +#endif + } + } + + public void InitCallback(string objName, string method) + { +#if UNITY_IOS + unityInitCallback(objName, method); +#endif + } + + public void Init(string appId, string deviceInfo, bool isDebug = false) { _isDebug = isDebug; diff --git a/Runtime/GuruAnalytics/Runtime/Script/Impl/AnalyticsAgentStub.cs b/Runtime/GuruAnalytics/Runtime/Script/Impl/AnalyticsAgentStub.cs index 00deab0..222d857 100644 --- a/Runtime/GuruAnalytics/Runtime/Script/Impl/AnalyticsAgentStub.cs +++ b/Runtime/GuruAnalytics/Runtime/Script/Impl/AnalyticsAgentStub.cs @@ -11,6 +11,18 @@ namespace Guru private bool _isShowLog = false; private bool _isDebug = false; + private bool _enableErrorLog; + + public bool EnableErrorLog + { + get => _enableErrorLog; + set + { + Debug.Log($"{TAG} EnableErrorLog:{value}"); + _enableErrorLog = value; + } + + } public void Init(string appId, string deviceInfo, bool isDebug = false) { @@ -22,6 +34,14 @@ namespace Guru Debug.Log($"{TAG} init with Debug: {isDebug} appId:{appId} deviceInfo:{deviceInfo}"); } + + public void InitCallback(string objName, string method) + { + if(_isShowLog) + Debug.Log($"{TAG} InitCallback: object:{objName} method:{method}"); + } + + public void SetScreen(string screenName) { if(_isShowLog) @@ -118,5 +138,14 @@ namespace Guru { Debug.Log($"{TAG} Tch02MaxValue: {value}"); } + + + #region Editor Test API + + + + + #endregion + } } \ No newline at end of file diff --git a/Runtime/GuruConsent/Runtime/Script/Consent/GuruConsent.cs b/Runtime/GuruConsent/Runtime/Script/Consent/GuruConsent.cs index 4d876bf..a5e5a19 100644 --- a/Runtime/GuruConsent/Runtime/Script/Consent/GuruConsent.cs +++ b/Runtime/GuruConsent/Runtime/Script/Consent/GuruConsent.cs @@ -1,4 +1,5 @@ + namespace Guru { using System; @@ -13,7 +14,7 @@ namespace Guru public class GuruConsent { // Guru Consent Version - public static string Version = "1.0.7"; + public static string Version = "1.0.8"; public static string Tag = "[GuruConsent]"; #region 公用接口 @@ -135,26 +136,6 @@ namespace Guru #region 常量定义 - /// - /// GDPR 状态对象 - /// - [Serializable] - internal class ConsentResult - { - public string action = ""; - public ConsentStatus data = null; - } - - /// - /// GDPR 状态对象 - /// - [Serializable] - internal class ConsentStatus - { - public int status; - public string msg; - } - /// /// Consent 状态 /// diff --git a/Runtime/GuruCore/Runtime/Ads/ADServiceBase.cs b/Runtime/GuruCore/Runtime/Ads/ADServiceBase.cs index df620a0..49b4b21 100644 --- a/Runtime/GuruCore/Runtime/Ads/ADServiceBase.cs +++ b/Runtime/GuruCore/Runtime/Ads/ADServiceBase.cs @@ -109,6 +109,8 @@ namespace Guru protected virtual void OnMaxSdkReady() { + Debug.Log($"[ADService] --- Start Max with spec: bads:{_initSpec.loadBanner} iads:{_initSpec.loadInterstitial} rads:{_initSpec.loadRewarded}"); + //应用启动策略 if(_initSpec.loadBanner) RequestBannerAD(); if(_initSpec.loadInterstitial) RequestInterstitialAD(); diff --git a/Runtime/GuruCore/Runtime/Analytics/Analytics.Const.cs b/Runtime/GuruCore/Runtime/Analytics/Analytics.Const.cs index 8cc6b2a..de0fc94 100644 --- a/Runtime/GuruCore/Runtime/Analytics/Analytics.Const.cs +++ b/Runtime/GuruCore/Runtime/Analytics/Analytics.Const.cs @@ -116,5 +116,8 @@ namespace Guru public static readonly string ParameterBalance = "balance"; // 用于余额 public static readonly string ParameterSku = "sku"; // sku public static readonly string ParameterVirtualCurrencyName = "virtual_currency_name"; // 虚拟货币名称 + + // 中台 + public static readonly string EventDevAudit = "dev_audit"; // 中台事件异常 } } \ No newline at end of file diff --git a/Runtime/GuruCore/Runtime/Analytics/Analytics.Custom.cs b/Runtime/GuruCore/Runtime/Analytics/Analytics.Custom.cs index c556f48..121c764 100644 --- a/Runtime/GuruCore/Runtime/Analytics/Analytics.Custom.cs +++ b/Runtime/GuruCore/Runtime/Analytics/Analytics.Custom.cs @@ -33,8 +33,9 @@ namespace Guru /// /// 初始化Guru自打点系统 (请优先于 Firebase 初始化调用) /// - public static void InstallGuruAnalytics(bool isDebug = false) + public static void InstallGuruAnalytics(bool isDebug = false, bool enableErrorLog = false) { + if (_hasInited) return; try @@ -46,7 +47,7 @@ namespace Guru #endif string appId = IPMConfig.IPM_X_APP_ID; string deviceInfo = new DeviceInfoData().ToString(); - GuruAnalytics.Init(appId, deviceInfo, IsDebug); // 初始化(带Header) + GuruAnalytics.Init(appId, deviceInfo, IsDebug, enableErrorLog); // 初始化(带Header) _hasGotFirebaseId = false; _hasGotAdId = false; diff --git a/Runtime/GuruCore/Runtime/Analytics/Analytics.TemplateDefine.cs b/Runtime/GuruCore/Runtime/Analytics/Analytics.TemplateDefine.cs index 805464a..b41d67d 100644 --- a/Runtime/GuruCore/Runtime/Analytics/Analytics.TemplateDefine.cs +++ b/Runtime/GuruCore/Runtime/Analytics/Analytics.TemplateDefine.cs @@ -596,6 +596,21 @@ namespace Guru #endregion + #region 中台异常打点 + + /// + /// 中台异常打点 + /// + /// + public static void LogDevAudit(Dictionary data) + { + if (data == null) return; + data["country"] = IPMConfig.IPM_COUNTRY_CODE; + data["network"] = Application.internetReachability.ToString(); + LogEvent(EventDevAudit, data, new EventSetting() { EnableFirebaseAnalytics = true }); + } + + #endregion } } diff --git a/Runtime/GuruCore/Runtime/Common/GuruSDKCallback.cs b/Runtime/GuruCore/Runtime/Common/GuruSDKCallback.cs index 7a981df..ecc2fe3 100644 --- a/Runtime/GuruCore/Runtime/Common/GuruSDKCallback.cs +++ b/Runtime/GuruCore/Runtime/Common/GuruSDKCallback.cs @@ -39,10 +39,10 @@ namespace Guru var ins = go.AddComponent(); return ins; } - - private void SetCallback(Action callback) + + private void SubCallback(Action callback) { - msgCallback += callback; + msgCallback -= callback; } private void SubCallback(Action callback) @@ -65,7 +65,16 @@ namespace Guru /// public static void AddCallback(Action callback) { - Instance.SetCallback(callback); + Instance.msgCallback += callback; + } + + /// + /// 添加回调 + /// + /// + public static void RemoveCallback(Action callback) + { + Instance.msgCallback -= callback; } /// diff --git a/Runtime/GuruCore/Runtime/Reporter/CrashlyticsAgent.cs b/Runtime/GuruCore/Runtime/Reporter/CrashlyticsAgent.cs index 5023fce..c8d5579 100644 --- a/Runtime/GuruCore/Runtime/Reporter/CrashlyticsAgent.cs +++ b/Runtime/GuruCore/Runtime/Reporter/CrashlyticsAgent.cs @@ -87,7 +87,6 @@ namespace Guru private static void OnReceivedMessage(string condition, string stackTrace, LogType type) { - string msg = $"{DateTime.Now:yy-MM-dd HH:mm:ss} [{ToLogTypeString(type)}] {condition}\n{stackTrace}"; if (_catchFilter.Contains(type)) @@ -114,7 +113,7 @@ namespace Guru public static void LogException(string msg) { - Crashlytics.LogException(new Exception(msg)); + LogException(new Exception(msg)); } public static void Log(string msg)