diff --git a/Runtime/GuruCore/Runtime/Analytics/Analytics.TemplateDefine.cs b/Runtime/GuruCore/Runtime/Analytics/Analytics.TemplateDefine.cs
index 739bad3..b2d7204 100644
--- a/Runtime/GuruCore/Runtime/Analytics/Analytics.TemplateDefine.cs
+++ b/Runtime/GuruCore/Runtime/Analytics/Analytics.TemplateDefine.cs
@@ -659,12 +659,12 @@ namespace Guru
 			if (orderData.orderType == 1)
 			{
 				// sub_pruchase : Firebase + Guru + Adjust
-				SubPurchase(usdPrice, productId, orderId, orderDate, productToken, receipt);
+				SubPurchase(usdPrice, productId, orderId, orderDate, productToken, receipt, isTest);
 			}
 			else
 			{
 				// iap_purchase : Firebase + Guru + Adjust
-				IAPPurchase(usdPrice, productId, orderId, orderDate, productToken, receipt);
+				IAPPurchase(usdPrice, productId, orderId, orderDate, productToken, receipt, isTest);
 			}
 			
 			// IAP Ret true : Firebase + Guru + Adjust
@@ -685,12 +685,13 @@ namespace Guru
 		/// 
 		/// 
 		/// 
+		/// 
 		public static void IAPPurchase(double value, string productId, string orderId, string orderDate, 
-			string purchaseToken = "", string receipt = "")
+			string purchaseToken = "", string receipt = "", bool isSandbox = false)
 		{
-			IAPPurchaseReport(EventIAPPurchase, value, productId, orderId, "IAP", orderDate, purchaseToken, receipt);
+			IAPPurchaseReport(EventIAPPurchase, value, productId, orderId, "IAP", orderDate, purchaseToken, receipt, isSandbox);
 		}
-		
+
 		/// 
 		/// SUB 订阅上报
 		/// 
@@ -700,14 +701,15 @@ namespace Guru
 		/// 
 		/// 
 		/// 
+		/// 
 		public static void SubPurchase(double value, string productId, string orderId, string orderDate, 
-			string purchaseToken = "", string receipt = "")
+			string purchaseToken = "", string receipt = "", bool isSandbox = false)
 		{
-			IAPPurchaseReport(EventSubPurchase, value, productId, orderId, "SUB", orderDate, purchaseToken, receipt);
+			IAPPurchaseReport(EventSubPurchase, value, productId, orderId, "SUB", orderDate, purchaseToken, receipt, isSandbox);
 		}
 		
 		private static void IAPPurchaseReport(string eventName, double value, string productId, 
-			string orderId, string orderType, string orderDate, string purchaseToken = "", string receipt = "")	
+			string orderId, string orderType, string orderDate, string purchaseToken = "", string receipt = "", bool isSandbox = false)	
 		{
 			
 			var dict = new Dictionary()
@@ -718,9 +720,12 @@ namespace Guru
 				[ParameterProductId] = productId,
 				["order_id"] = orderId,
 				["order_type"] = orderType,
-				["trans_ts"] = orderDate
+				["trans_ts"] = orderDate,
+				["sandbox"] = isSandbox? "true": "false"
 			};
 			
+			
+			
 			// 上报Firebase + 自打点
 			LogEvent(eventName, dict, new EventSetting() { EnableFirebaseAnalytics = true });
 			
diff --git a/Runtime/GuruCore/Runtime/Analytics/Analytics.cs b/Runtime/GuruCore/Runtime/Analytics/Analytics.cs
index 42f1631..6a26539 100644
--- a/Runtime/GuruCore/Runtime/Analytics/Analytics.cs
+++ b/Runtime/GuruCore/Runtime/Analytics/Analytics.cs
@@ -1,5 +1,4 @@
 
-using UnityEngine;
 
 namespace Guru
 {
@@ -8,6 +7,7 @@ namespace Guru
 	using System.Collections.Generic;
 	using com.adjust.sdk;
 	using Facebook.Unity;
+	using UnityEngine;
 	using Firebase.Analytics;
 	using Firebase.Crashlytics;
 	
@@ -197,7 +197,7 @@ namespace Guru
 			string paramStr = string.Join(",", extras);
 			Log.I(TAG, $"eventName:{eventName}, params:{paramStr}");
 
-			eventSetting ??= _defaultEventSetting;
+			if (eventSetting == null) eventSetting = _defaultEventSetting;
 			if (eventSetting.EnableFirebaseAnalytics)
 			{
 				List parameters = new List();
@@ -219,7 +219,6 @@ namespace Guru
 						parameters.Add(new Parameter(kv.Key, decimal.ToDouble(decimalValue)));
 					else
 						parameters.Add(new Parameter(kv.Key, kv.Value.ToString()));
-					
 				}
 				
 				FirebaseAnalytics.LogEvent(eventName, parameters.ToArray());