diff --git a/Runtime/GuruIAP/Runtime/Code/IAPServiceBase.cs b/Runtime/GuruIAP/Runtime/Code/IAPServiceBase.cs
index f99852b..c23475d 100644
--- a/Runtime/GuruIAP/Runtime/Code/IAPServiceBase.cs
+++ b/Runtime/GuruIAP/Runtime/Code/IAPServiceBase.cs
@@ -37,6 +37,7 @@ namespace Guru
public bool IsInitialized => _storeController != null && _storeExtensionProvider != null;
private Product _curPurchasingProduct = null;
+ private string _curProductCategory = "";
private IAPModel _model;
///
@@ -498,7 +499,7 @@ namespace Guru
/// 购买商品
///
///
- public virtual T Buy(string productName)
+ public virtual T Buy(string productName, string category = "")
{
if (!IsInitialized)
{
@@ -522,12 +523,14 @@ namespace Guru
.Configure()
.SetObfuscatedAccountId(IPMConfig.IPM_UID);
#endif
+ if (string.IsNullOrEmpty(category)) category = info.Category;
_storeController.InitiatePurchase(product);
-
- Analytics.IAPClick(info?.Category??"none", product.definition.id);
- Analytics.IAPImp(DefaultCategory, product.definition.id);
-
_curPurchasingProduct = product;
+ _curProductCategory = category;
+
+ Analytics.IAPClick(_curProductCategory, product.definition.id);
+ Analytics.IAPImp(_curProductCategory, product.definition.id);
+
OnBuyStart?.Invoke(productName);
return (T)this;
@@ -557,17 +560,17 @@ namespace Guru
{
if (IsFirstIAP) Analytics.FirstIAP(info.Id, info.Price, info.CurrencyCode); // 上报首次支付打点
Analytics.ProductIAP(info.Id,info.Id, info.Price, info.CurrencyCode);
- Analytics.IAPRetTrue(info.Category, info.Id, info.Price, info.CurrencyCode, info.Type, info.IsFree);
+ Analytics.IAPRetTrue(_curProductCategory, info.Id, info.Price, info.CurrencyCode, info.Type, info.IsFree);
success = true;
SetIsIAPUser(success); // 设置用户属性标记
}
PurchaseCount++; // 记录支付次数
- Debug.Log($"############ ProcessPurchase: PurchaseCount:{PurchaseCount}");
+ // Debug.Log($"############ ProcessPurchase: PurchaseCount:{PurchaseCount}");
if (_curPurchasingProduct != null)
{
- _curPurchasingProduct = null; // 只有实际发生购买后才会有订单上报. 启动时的 Restore 操作自动调用支付成功. 这里做一个判定, 过滤掉订单的物品
+ // 只有实际发生购买后才会有订单上报. 启动时的 Restore 操作自动调用支付成功. 这里做一个判定, 过滤掉订单的物品
ReportPurchaseResult(purchaseEvent); // 支付结果上报
}
@@ -589,6 +592,8 @@ namespace Guru
OnPurchaseOver(success, productName); // 支付成功处理逻辑
OnBuyEnd?.Invoke(productName, success);
+ ClearCurPurchasingProduct(); // 清除购买缓存
+
return PurchaseProcessingResult.Complete; // 直接Consume 掉当前的商品
}
@@ -606,11 +611,11 @@ namespace Guru
//上报点位,用户购买失败的原因
if (failureReason == PurchaseFailureReason.UserCancelled)
{
- Analytics.IAPClose(info.Category, product.definition.id);
+ Analytics.IAPClose(_curProductCategory, product.definition.id);
}
else
{
- Analytics.IAPRetFalse(info.Category, product.definition.id, failureReason.ToString());
+ Analytics.IAPRetFalse(_curProductCategory, product.definition.id, failureReason.ToString());
}
LogI($"{Tag} --- OnPurchaseFailed :: failureReason = {failureReason}");
@@ -619,6 +624,13 @@ namespace Guru
OnBuyEnd?.Invoke(info.Name, false);
// 失败原因
OnBuyFailed?.Invoke(info.Name, failureReason.ToString());
+ ClearCurPurchasingProduct(); // 清除购买缓存
+ }
+
+ private void ClearCurPurchasingProduct()
+ {
+ _curPurchasingProduct = null;
+ _curProductCategory = "";
}