diff --git a/Runtime/ABTest/ABTestManager.cs b/Runtime/ABTest/ABTestManager.cs index d402a99..074346a 100644 --- a/Runtime/ABTest/ABTestManager.cs +++ b/Runtime/ABTest/ABTestManager.cs @@ -88,7 +88,8 @@ namespace Guru { if (!string.IsNullOrEmpty(value) && value.Contains("guru_ab_")) { - _params.Add(ABParamData.Parse(value)); // 添加参数 + var p = ABParamData.Parse(value); + if(p != null) _params.Add(p); // 添加参数 } } @@ -128,32 +129,39 @@ namespace Guru public static ABParamData Parse(string value) { Debug.Log($"--- ABParamData.Parse: {value}"); - var p = new ABParamData(); - p.value = value; - - // 发现Guru AB测试标志位 - var dict = JsonMapper.ToObject>(value); - if (null != dict) + try { - foreach (var k in dict.Keys) + // 发现Guru AB测试标志位 + var dict = JsonMapper.ToObject>(value); + if (null != dict) { - if (k.StartsWith("guru_ab")) + foreach (var k in dict.Keys) { - p.id = GetItemKey(k); - p.group = dict[k].ToString(); - // Debug.Log($"[AB] add property {k}: {dict[k]}"); - break; + if (k.StartsWith("guru_ab")) + { + return new ABParamData() + { + id = GetItemKey(k), + group = dict[k].ToString(), + value = value + }; + } } } } - - return p; + catch (Exception e) + { + string msg = $"[AB] --- Parse AB Param Error -> Value: {value}\n{e.Message}"; + Analytics.LogCrashlytics(msg); + Debug.Log(msg); + } + return null; } private static string GetItemKey(string raw) { - var h = raw.Replace("guru_", ""); - var key = h.Substring(0, Mathf.Min(PARAM_NAME_LENGTH, h.Length)); // 最大长度23 + int ln = "guru_".Length; + var key = raw.Substring(ln, Mathf.Min(PARAM_NAME_LENGTH, raw.Length - ln)); // 最大长度23 return key; } diff --git a/Runtime/GuruCore/Runtime/Analytics/Analytics.cs b/Runtime/GuruCore/Runtime/Analytics/Analytics.cs index 5562ca4..0f43050 100644 --- a/Runtime/GuruCore/Runtime/Analytics/Analytics.cs +++ b/Runtime/GuruCore/Runtime/Analytics/Analytics.cs @@ -1,11 +1,14 @@ -using System; -using System.Collections.Generic; -using com.adjust.sdk; -using Facebook.Unity; -using Firebase.Analytics; + namespace Guru { + using System; + using System.Collections.Generic; + using com.adjust.sdk; + using Facebook.Unity; + using Firebase.Analytics; + using Firebase.Crashlytics; + //打点模块初始化和基础接口封装 public static partial class Analytics { @@ -47,10 +50,10 @@ namespace Guru public static void InitAnalytics() { - if (_isInited) - return; - + if (_isInited) return; _isInited = true; + Crashlytics.IsCrashlyticsCollectionEnabled = true; + if (_defaultEventSetting == null) { var analyticsSetting = GuruSettings.Instance.AnalyticsSetting; @@ -231,6 +234,32 @@ namespace Guru } } + + /// + /// Crashlytics 上报 + /// + /// + /// + public static void LogCrashlytics(string msg, bool isException = true) + { + if (!_isInited) return; + if (isException) + { + LogCrashlytics(new Exception(msg)); + } + else + { + Crashlytics.Log(msg); + } + } + + + public static void LogCrashlytics(Exception exp) + { + if (!_isInited) return; + Crashlytics.LogException(exp); + Crashlytics.SetUserId(IPMConfig.IPM_UID); + } #endregion