diff --git a/Runtime/GuruAnalytics/Plugins/Android/U3DAnalytics-1.10.1.aar b/Runtime/GuruAnalytics/Plugins/Android/U3DAnalytics-1.10.1.aar index e6c1694..cc4638c 100644 Binary files a/Runtime/GuruAnalytics/Plugins/Android/U3DAnalytics-1.10.1.aar and b/Runtime/GuruAnalytics/Plugins/Android/U3DAnalytics-1.10.1.aar differ diff --git a/Runtime/GuruAnalytics/Runtime/Script/GuruAnalytics.cs b/Runtime/GuruAnalytics/Runtime/Script/GuruAnalytics.cs index 0b392ce..a7c1ff2 100644 --- a/Runtime/GuruAnalytics/Runtime/Script/GuruAnalytics.cs +++ b/Runtime/GuruAnalytics/Runtime/Script/GuruAnalytics.cs @@ -6,9 +6,7 @@ namespace Guru using System.Collections.Generic; using System.Globalization; using System.Linq; - using System.Text; using Newtonsoft.Json; - using Newtonsoft.Json.Linq; using UnityEngine; @@ -334,56 +332,76 @@ namespace Guru /// private static void OnSDKCallback(string msg) { + if (string.IsNullOrEmpty(msg)) return; + //------- message send to unity ---------- Debug.Log($"{Tag} get callback errorInfo:\n{msg}"); + + string patten = ""; + string patten2 = ""; + int idx = 0; + int idx2 = 0; + int len = 0; + + int code = (int)AnalyticsCode.Unknown; + string info = msg; + + if (msg.Contains("msg\":")) + { + var arr = msg.Split(new string[] {"msg\":"}, StringSplitOptions.RemoveEmptyEntries); + if (arr.Length > 1) + { + info = arr[1]; + if (info.StartsWith("\"")) info = info.Substring(1); + if (info.EndsWith("\"}}")) info = info.Replace("\"}}", ""); + } + } + try { - var response = JsonConvert.DeserializeObject(msg); - if (response.TryGetValue("action", out var jAct)) + patten = "action\":\""; + if (msg.Contains(patten)) { - if (jAct.ToString() == ActionName - && response.TryGetValue("data", out var jData) && jData is JObject data) + idx = msg.IndexOf(patten, StringComparison.Ordinal) + patten.Length; + string act = msg.Substring(idx, ActionName.Length); + if (act == ActionName) { - int code = -1; - string message = msg; - - if (data.TryGetValue("code", out var jCode)) + patten = "code\":"; + patten2 = ",\"msg"; + idx = msg.IndexOf(patten); + idx2 = msg.IndexOf(patten2); + + len = idx2 - (idx + patten.Length); + if (len > 0) { - int.TryParse(jCode.ToString(), out code); - } - if (data.TryGetValue("msg", out var jMsg)) - { - message = jMsg.ToString(); + string c = msg.Substring(idx + patten.Length, len); + int.TryParse(c, out code); } - var errorCode = (AnalyticsCode)code; - switch (errorCode) + // Catch target code to report errors + switch ((AnalyticsCode)code) { 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; + case AnalyticsCode.ERROR_LOAD_MARK: + case AnalyticsCode.ERROR_DNS: + case AnalyticsCode.ERROR_ZIP: + OnLoggerErrorEvent(code, info); + return; } - return; } } - Debug.LogError($"{Tag} Parse callback Error"); } catch (Exception ex) { + Debug.LogError($"{Tag} Catch ex: {ex}\tJson:{msg}"); Analytics.LogCrashlytics($"{Tag} --- Json:{msg} Ex:{ex}"); + OnLoggerErrorEvent(code, info); } - - string sap = "msg\":"; - OnLoggerErrorEvent((int)AnalyticsCode.Unknown, - msg.Substring(msg.IndexOf(sap, StringComparison.Ordinal) + sap.Length)); - } + } /// /// 上报错误信息 @@ -392,6 +410,8 @@ namespace Guru /// private static void OnLoggerErrorEvent(int code, string errorInfo = "") { + Debug.Log($"{Tag} --- OnLoggerErrorEvent: code:{code}\tinfo:{errorInfo}"); + Dictionary parameters = new Dictionary() { {"item_category", "error_event"}, @@ -401,13 +421,19 @@ namespace Guru }; if (!string.IsNullOrEmpty(errorInfo)) { - int len = 32; + // if (errorInfo.Contains("\"")) errorInfo = errorInfo.Replace("\"", "\\\""); + + int len = 96; if (errorInfo.Length > len) errorInfo = errorInfo.TrimStart().Substring(0, len); - parameters["err"] = errorInfo; } - - Debug.Log($"{Tag} --- ErrorLogInfo:: code:{code}\tinfo:{errorInfo}"); + else + { + errorInfo = "empty error info"; + } + 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 });