diff --git a/Runtime/GuruConsent/Runtime/Script/Consent/GuruConsent.cs b/Runtime/GuruConsent/Runtime/Script/Consent/GuruConsent.cs index 96727f1..4d876bf 100644 --- a/Runtime/GuruConsent/Runtime/Script/Consent/GuruConsent.cs +++ b/Runtime/GuruConsent/Runtime/Script/Consent/GuruConsent.cs @@ -4,6 +4,7 @@ namespace Guru using System; using System.Collections; using Newtonsoft.Json; + using Newtonsoft.Json.Linq; using UnityEngine; /// @@ -74,27 +75,51 @@ namespace Guru /// private static void OnSDKCallback(string msg) { + GuruSDKCallback.RemoveCallback(OnSDKCallback); // 移除回调 + //-------- Fetch DMA status and report ----------- var value = Agent?.GetPurposesValue() ?? ""; GoogleDMAHelper.SetDMAStatus(value, _dmaMapRule, _enableCountryCheck); + int status = StatusCode.UNKNOWN; //------- message send to unity ---------- Debug.Log($"{Tag} get callback msg:\n{msg}"); - - var result = JsonConvert.DeserializeObject(msg); - - if (result != null && result.action == "gdpr") + try { - if (result.data != null) + var data = JsonConvert.DeserializeObject(msg); + if (data != null && data.TryGetValue("action", out var jAtc)) { - Debug.Log($"{Tag} --- status: {result.data.status} msg: {result.data.msg}"); - onCompleteHandler?.Invoke(result.data.status); - return; + if (jAtc.ToString() == "gdpr" && data.TryGetValue("data", out var jData)) + { + if (jData is JObject jObj) + { + string message = ""; + if (jObj.TryGetValue("status", out var jStatus)) + { + int.TryParse(jStatus.ToString(), out status); + } + if (jObj.TryGetValue("msg", out var jMsg)) + { + message = jMsg.ToString(); + } + Debug.Log($"{Tag} --- status: {status} msg: {message}"); + onCompleteHandler?.Invoke(status); + return; + } + } } } - + catch (Exception ex) + { + Analytics.LogCrashlytics(ex); + } + Debug.LogError($"{Tag} Parse callback Error"); - onCompleteHandler?.Invoke(StatusCode.UNKNOWN); + if (onCompleteHandler != null) + { + onCompleteHandler.Invoke(status); + onCompleteHandler = null; + } } /// diff --git a/Runtime/GuruCore/Runtime/Common/GuruSDKCallback.cs b/Runtime/GuruCore/Runtime/Common/GuruSDKCallback.cs index dfc499c..7a981df 100644 --- a/Runtime/GuruCore/Runtime/Common/GuruSDKCallback.cs +++ b/Runtime/GuruCore/Runtime/Common/GuruSDKCallback.cs @@ -45,6 +45,11 @@ namespace Guru msgCallback += callback; } + private void SubCallback(Action callback) + { + msgCallback -= callback; + } + /// /// External 回调参数 /// @@ -62,6 +67,15 @@ namespace Guru { Instance.SetCallback(callback); } + + /// + /// 添加回调 + /// + /// + public static void RemoveCallback(Action callback) + { + Instance.SubCallback(callback); + } } } \ No newline at end of file