diff --git a/Runtime/GuruAnalytics/Plugins/Android/U3DAnalytics-1.10.1.aar b/Runtime/GuruAnalytics/Plugins/Android/U3DAnalytics-1.10.1.aar
deleted file mode 100644
index cc4638c..0000000
Binary files a/Runtime/GuruAnalytics/Plugins/Android/U3DAnalytics-1.10.1.aar and /dev/null differ
diff --git a/Runtime/GuruAnalytics/Plugins/Android/U3DAnalytics-1.10.4.aar b/Runtime/GuruAnalytics/Plugins/Android/U3DAnalytics-1.10.4.aar
new file mode 100644
index 0000000..6d2ff79
Binary files /dev/null and b/Runtime/GuruAnalytics/Plugins/Android/U3DAnalytics-1.10.4.aar differ
diff --git a/Runtime/GuruAnalytics/Plugins/Android/U3DAnalytics-1.10.1.aar.meta b/Runtime/GuruAnalytics/Plugins/Android/U3DAnalytics-1.10.4.aar.meta
similarity index 93%
rename from Runtime/GuruAnalytics/Plugins/Android/U3DAnalytics-1.10.1.aar.meta
rename to Runtime/GuruAnalytics/Plugins/Android/U3DAnalytics-1.10.4.aar.meta
index 224c196..9c2109e 100644
--- a/Runtime/GuruAnalytics/Plugins/Android/U3DAnalytics-1.10.1.aar.meta
+++ b/Runtime/GuruAnalytics/Plugins/Android/U3DAnalytics-1.10.4.aar.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: 4438c644309264b1babdb7f1fd0431b6
+guid: 07cf2335bd298401b8015718fca55265
PluginImporter:
externalObjects: {}
serializedVersion: 2
diff --git a/Runtime/GuruAnalytics/Plugins/Android/guru-analytics-1.0.1.aar b/Runtime/GuruAnalytics/Plugins/Android/guru-analytics-1.0.1.aar
new file mode 100644
index 0000000..e7494c5
Binary files /dev/null and b/Runtime/GuruAnalytics/Plugins/Android/guru-analytics-1.0.1.aar differ
diff --git a/Runtime/GuruAnalytics/Plugins/Android/guru_analytics-1.0.0.aar.meta b/Runtime/GuruAnalytics/Plugins/Android/guru-analytics-1.0.1.aar.meta
similarity index 93%
rename from Runtime/GuruAnalytics/Plugins/Android/guru_analytics-1.0.0.aar.meta
rename to Runtime/GuruAnalytics/Plugins/Android/guru-analytics-1.0.1.aar.meta
index 8734aa8..723f7d9 100644
--- a/Runtime/GuruAnalytics/Plugins/Android/guru_analytics-1.0.0.aar.meta
+++ b/Runtime/GuruAnalytics/Plugins/Android/guru-analytics-1.0.1.aar.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: 93255faba714a477da458107e107b535
+guid: b0e58ca75957d470cbc4951b34f31bf8
PluginImporter:
externalObjects: {}
serializedVersion: 2
diff --git a/Runtime/GuruAnalytics/Plugins/Android/guru_analytics-1.0.0.aar b/Runtime/GuruAnalytics/Plugins/Android/guru_analytics-1.0.0.aar
deleted file mode 100644
index dc8fc89..0000000
Binary files a/Runtime/GuruAnalytics/Plugins/Android/guru_analytics-1.0.0.aar and /dev/null differ
diff --git a/Runtime/GuruAnalytics/Runtime/Script/GuruAnalytics.cs b/Runtime/GuruAnalytics/Runtime/Script/GuruAnalytics.cs
index df2d28f..7a64338 100644
--- a/Runtime/GuruAnalytics/Runtime/Script/GuruAnalytics.cs
+++ b/Runtime/GuruAnalytics/Runtime/Script/GuruAnalytics.cs
@@ -7,13 +7,13 @@ namespace Guru
using System.Globalization;
using System.Linq;
using Newtonsoft.Json;
+ using Newtonsoft.Json.Linq;
using UnityEngine;
-
public class GuruAnalytics
{
// Plugin Version
- public const string Version = "1.10.1";
+ public const string Version = "1.10.4";
public static readonly string Tag = "[ANA]";
private static readonly string ActionName = "logger_error";
@@ -70,6 +70,11 @@ namespace Guru
if (Agent != null) Agent.EnableErrorLog = _enableErrorLog;
}
}
+
+ ///
+ /// 错误 code 表
+ ///
+ public static List ErrorCodeList = new List();
#region 公用接口
@@ -336,77 +341,11 @@ namespace Guru
/// 获取SDK回调
///
///
- private static void OnSDKCallback(string msg)
+ private static void OnSDKCallback(string raw)
{
- 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
- {
- patten = "action\":\"";
- if (msg.Contains(patten))
- {
- idx = msg.IndexOf(patten, StringComparison.Ordinal) + patten.Length;
- string act = msg.Substring(idx, ActionName.Length);
- if (act == ActionName)
- {
- patten = "code\":";
- patten2 = ",\"msg";
- idx = msg.IndexOf(patten);
- idx2 = msg.IndexOf(patten2);
-
- len = idx2 - (idx + patten.Length);
- if (len > 0)
- {
- string c = msg.Substring(idx + patten.Length, len);
- int.TryParse(c, out code);
- }
-
- // Catch target code to report errors
- switch ((AnalyticsCode)code)
- {
- case AnalyticsCode.Network_Lost:
- case AnalyticsCode.ERROR_API:
- case AnalyticsCode.ERROR_RESPONSE:
- case AnalyticsCode.ERROR_CACHE_CONTROL:
- case AnalyticsCode.ERROR_DELETE_EXPIRED:
- case AnalyticsCode.ERROR_LOAD_MARK:
- case AnalyticsCode.ERROR_DNS:
- case AnalyticsCode.ERROR_ZIP:
- OnLoggerErrorEvent(code, info);
- return;
- }
- }
- }
- }
- catch (Exception ex)
- {
- Debug.LogError($"{Tag} Catch ex: {ex}\tJson:{msg}");
- Analytics.LogCrashlytics($"{Tag} --- Json:{msg} Ex:{ex}");
- OnLoggerErrorEvent(code, info);
- }
+ if (string.IsNullOrEmpty(raw)) return;
+ if (!raw.Contains($"\"{ActionName}\"")) return; // 不对其他行为的日志进行过滤
+ ParseWithJson(raw);
}
///
@@ -416,12 +355,15 @@ namespace Guru
///
private static void OnLoggerErrorEvent(int code, string errorInfo = "")
{
- Debug.Log($"{Tag} --- OnLoggerErrorEvent: code:{code}\tinfo:{errorInfo}");
+ // Debug.Log($"{Tag} --- OnLoggerErrorEvent: code:{code}\tinfo:{errorInfo}");
+
+ var codeString = ((AnalyticsCode)code).ToString();
+ if (string.IsNullOrEmpty(codeString) || codeString == "Unknown") codeString = $"ErrorCode:{code}";
Dictionary parameters = new Dictionary()
{
{"item_category", "error_event"},
- {"item_name", ((AnalyticsCode)code).ToString()},
+ {"item_name", codeString},
{"country", IPMConfig.IPM_COUNTRY_CODE},
{"network", Application.internetReachability.ToString()},
};
@@ -438,14 +380,220 @@ namespace Guru
}
parameters["err"] = errorInfo;
- Debug.Log($"{Tag} ------------ ErrorLogInfo:: code:{code}\tinfo:{errorInfo}");
+
+ Debug.Log($"{Tag} ------ ErrorLogInfo:: code:{codeString}\tinfo:{errorInfo}");
+#if !UNITY_EDITOR
// Only for firebase GA
Analytics.LogEvent("dev_audit", parameters,
new Analytics.EventSetting() { EnableFirebaseAnalytics = true });
+#endif
+
}
-
+
+
+ private static bool ParseWithJson(string json)
+ {
+ Debug.Log($"{Tag} ------ ParseWithJson: json:\n{json}");
+
+ int code = (int)AnalyticsCode.Unknown;
+ string info = json;
+ try
+ {
+ var dict = JsonConvert.DeserializeObject(json);
+ if(dict != null && dict.TryGetValue("data", out var jData))
+ {
+ var j = jData.Value();
+ if (j != null && j.TryGetValue("code", out var jCode))
+ {
+ code = jCode.Value();
+
+ if (j.TryGetValue("msg", out var jMsg))
+ {
+ info = jMsg.Value();
+ }
+ else
+ {
+ info = $"wrong msg format: {json}";
+ }
+ }
+ }
+ else
+ {
+ info = "no data property";
+ }
+ ReportCodeInfo(code, info);
+ return true;
+ }
+ catch (Exception ex)
+ {
+ string p = "\"msg\":\"";
+ string m = json;
+ if (json.Contains(p)) m = json.Substring(json.IndexOf(p) + p.Length);
+ info = $"JsonEX:{m}";
+ // Debug.Log($"{Tag} --- {info}");
+ Analytics.LogCrashlytics(json, false);
+ Analytics.LogCrashlytics(info);
+ ReportCodeInfo(code, info);
+ }
+ return false;
+ }
+
+ private static void ParseWithRaw(string raw)
+ {
+ int code = (int)AnalyticsCode.Unknown;
+ string info = raw;
+
+ //------- message send to unity ----------
+ Debug.Log($"{Tag} get callback errorInfo:\n{raw}");
+
+ string patten = "";
+ string patten2 = "";
+ int idx = 0;
+ int idx2 = 0;
+ int len = 0;
+
+
+ patten = "msg\":\"";
+ if (raw.Contains(patten))
+ {
+
+ info = raw.Substring(raw.IndexOf(patten, StringComparison.Ordinal) + patten.Length);
+ if (!string.IsNullOrEmpty(info))
+ {
+ if (info.StartsWith("\"")) info = info.Substring(1, info.Length - 1);
+ if (info.EndsWith("\"}}")) info = info.Replace("\"}}", "");
+ }
+ else
+ {
+ info = "msg is null";
+ }
+ }
+ else
+ {
+ info = "no msg property";
+ }
+
+ try
+ {
+
+ idx = raw.IndexOf(patten, StringComparison.Ordinal) + patten.Length;
+ string act = raw.Substring(idx, ActionName.Length);
+ if (act == ActionName)
+ {
+ patten = "code\":";
+ patten2 = ",\"msg";
+ idx = raw.IndexOf(patten);
+ idx2 = raw.IndexOf(patten2);
+
+ len = idx2 - (idx + patten.Length);
+ if (len > 0)
+ {
+ string c = raw.Substring(idx + patten.Length, len);
+ int.TryParse(c, out code);
+ }
+
+ // Catch target code to report errors
+ switch ((AnalyticsCode)code)
+ {
+ case AnalyticsCode.Network_Lost:
+ case AnalyticsCode.ERROR_API:
+ case AnalyticsCode.ERROR_RESPONSE:
+ case AnalyticsCode.ERROR_CACHE_CONTROL:
+ case AnalyticsCode.ERROR_DELETE_EXPIRED:
+ case AnalyticsCode.ERROR_LOAD_MARK:
+ case AnalyticsCode.ERROR_DNS:
+ case AnalyticsCode.ERROR_ZIP:
+ OnLoggerErrorEvent(code, info);
+ return;
+ }
+
+ return;
+ }
+
+ }
+ catch (Exception ex)
+ {
+ Debug.LogError($"{Tag} Catch ex: {ex}\tJson:{raw}");
+ Analytics.LogCrashlytics(raw, false);
+ Analytics.LogCrashlytics($"{Tag} --- Json:{raw} Ex:{ex}");
+ OnLoggerErrorEvent(code, info);
+ return;
+ }
+
+ if (raw.Contains("msg"))
+ {
+ Analytics.LogCrashlytics(raw, false);
+ Analytics.LogCrashlytics($"{Tag} --- format error:{raw}");
+ OnLoggerErrorEvent(code, raw.Substring(raw.IndexOf("msg\":" ) + 5));
+ }
+ }
+
+ // Report error to api
+ private static void ReportCodeInfo(int code, string info)
+ {
+ var ac = (AnalyticsCode)code;
+
+ Debug.Log($"{Tag} ------ ReportCodeInfo: code:{code}[{ac}] \tinfo:{info}");
+ bool canCatch = false;
+ switch (ac)
+ {
+ case AnalyticsCode.Unknown:
+ case AnalyticsCode.DELETE_EXPIRED:
+ case AnalyticsCode.UPLOAD_FAIL:
+ case AnalyticsCode.Network_Lost:
+ case AnalyticsCode.CRONET_INIT_FAIL:
+ case AnalyticsCode.CRONET_INIT_EXCEPTION:
+ case AnalyticsCode.ERROR_API:
+ case AnalyticsCode.ERROR_RESPONSE:
+ case AnalyticsCode.ERROR_CACHE_CONTROL:
+ case AnalyticsCode.ERROR_DELETE_EXPIRED:
+ case AnalyticsCode.ERROR_LOAD_MARK:
+ case AnalyticsCode.ERROR_DNS:
+ case AnalyticsCode.ERROR_ZIP:
+ case AnalyticsCode.ERROR_DNS_CACHE:
+ case AnalyticsCode.CRONET_INTERCEPTOR:
+ canCatch = true;
+ break;
+ }
+
+ if (code > 100 && code <= 200)
+ {
+ // 100 < code <= 200
+ canCatch = true;
+ }
+
+ if (ErrorCodeList != null && ErrorCodeList.Count > 0)
+ {
+ if (ErrorCodeList[0] == -1)
+ {
+ canCatch = true;
+ }
+ else
+ {
+ canCatch = ErrorCodeList.Contains(code);
+ }
+ }
+
+ if(canCatch) OnLoggerErrorEvent(code, info);
+ }
+
#endregion
+
+ #region UNIT_TEST
+
+
+#if UNITY_EDITOR
+
+ public static void TestOnCallback(string msg)
+ {
+ OnSDKCallback(msg);
+ }
+
+#endif
+
+ #endregion
+
}
///
@@ -455,7 +603,11 @@ namespace Guru
{
Unknown = -1,
+ DELETE_EXPIRED = 12,
+ UPLOAD_FAIL = 14,
Network_Lost = 22,
+ CRONET_INIT_FAIL = 26,
+ CRONET_INIT_EXCEPTION = 27,
ERROR_API = 101,
ERROR_RESPONSE = 102,
@@ -464,6 +616,8 @@ namespace Guru
ERROR_LOAD_MARK = 105,
ERROR_DNS = 106,
ERROR_ZIP = 107,
+ ERROR_DNS_CACHE = 108,
+ CRONET_INTERCEPTOR = 109,
}
}