diff --git a/Runtime/GuruConsent/Runtime/Script/Consent/GuruConsent.cs b/Runtime/GuruConsent/Runtime/Script/Consent/GuruConsent.cs
index 1c42e9c..a5e5a19 100644
--- a/Runtime/GuruConsent/Runtime/Script/Consent/GuruConsent.cs
+++ b/Runtime/GuruConsent/Runtime/Script/Consent/GuruConsent.cs
@@ -76,10 +76,13 @@ 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}");
             try
@@ -87,37 +90,24 @@ namespace Guru
                 var data = JsonConvert.DeserializeObject(msg);
                 if (data != null && data.TryGetValue("action", out var jAtc))
                 {
-                    if (jAtc.ToString() == "gdpr")
+                    if (jAtc.ToString() == "gdpr" && data.TryGetValue("data", out var jData)) 
                     {
-                        if(data.TryGetValue("data", out var jData))
+                        if (jData is JObject jObj)
                         {
-                            if (jData is JObject jObj)
+                            string message = "";
+                            if (jObj.TryGetValue("status", out var jStatus))
                             {
-                                int status = StatusCode.UNKNOWN;
-                                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}");
-                                GuruSDKCallback.RemoveCallback(OnSDKCallback);
-                                if (onCompleteHandler != null)
-                                {
-                                    onCompleteHandler.Invoke(status);
-                                    onCompleteHandler = null;
-                                }
-                                return;
+                                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;
                         }
                     }
-                    else
-                    {
-                        return;
-                    }
                 }
             }
             catch (Exception ex)
@@ -126,7 +116,11 @@ namespace Guru
             }
             
             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 871f137..6386967 100644
--- a/Runtime/GuruCore/Runtime/Common/GuruSDKCallback.cs
+++ b/Runtime/GuruCore/Runtime/Common/GuruSDKCallback.cs
@@ -40,6 +40,11 @@ namespace Guru
             return ins;
         }
         
+        private void SubCallback(Action callback)
+        {
+            msgCallback -= callback;
+        }
+        
         /// 
         /// External 回调参数
         /// 
@@ -66,6 +71,15 @@ namespace Guru
         {
             Instance.msgCallback -= callback;
         }
+        
+        /// 
+        /// 添加回调
+        /// 
+        /// 
+        public static void RemoveCallback(Action callback)
+        {
+            Instance.SubCallback(callback);
+        }
 
     }
 }
\ No newline at end of file