From 09cf293d2e8b4b57e52d303299fa9ee9176287f6 Mon Sep 17 00:00:00 2001 From: huyufei Date: Fri, 19 Jan 2024 20:45:56 +0800 Subject: [PATCH] =?UTF-8?q?Update:=20=E6=96=B0=E5=A2=9E=E4=BF=9D=E5=AD=98?= =?UTF-8?q?=E6=94=B6=E6=8D=AE=E7=9A=84=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Runtime/Code/Model/GuruSDKModel.cs | 74 ++++++++++++++++++++++++++++-- Runtime/Code/SDK/GuruSDK.IAP.cs | 12 +++++ 2 files changed, 83 insertions(+), 3 deletions(-) diff --git a/Runtime/Code/Model/GuruSDKModel.cs b/Runtime/Code/Model/GuruSDKModel.cs index c4a930b..c65f581 100644 --- a/Runtime/Code/Model/GuruSDKModel.cs +++ b/Runtime/Code/Model/GuruSDKModel.cs @@ -1,5 +1,6 @@ -using UnityEngine.Networking; +using System.Collections.Generic; +using System.Linq; namespace Guru { @@ -30,6 +31,8 @@ namespace Guru public int b_level = 0; public int b_play = 0; public int buy_count = 0; + + public List purchased; //-------------- data --------------- private float _lastSavedTime = 0; @@ -144,6 +147,8 @@ namespace Guru _totalPlayed = new BindableProperty(b_play, OnPlayedChanged); _purchasedCount = new BindableProperty(buy_count, OnPurchasedNumChanged); _uid = new BindableProperty(uid, OnUidChanged); + + purchased = new List(20); } /// @@ -210,10 +215,73 @@ namespace Guru #endregion + #region 订单记录 + + + public bool HasPurchasedProduct(string receipt) + { + if(purchased == null || purchased.Count == 0) return false; + return purchased.Exists(p => p.receipt == receipt); + } + + /// + /// 添加已支付订单 + /// + /// + /// + /// + public void AddReceipt(string receipt, string productName, string productId, bool appleProductIsRestored = false) + { + if (purchased == null) purchased = new List(20); + if (!HasPurchasedProduct(receipt)) + { + purchased.Add(new PurchasedProduct() + { + receipt = receipt, + productName = productName, + productId = productId, + appleProductIsRestored = appleProductIsRestored + }); + Save(); + } + } + + public string[] GetReceipts(string productName) + { + int count = purchased?.Count ?? 0; + if (count == 0) count = 20; + if (purchased == null) purchased = new List(count); + var receipts = new List(count); + receipts.AddRange(from purchasedProduct in purchased where purchasedProduct.productName == productName select purchasedProduct.receipt); + return receipts.ToArray(); + } + + + public string[] GetReceiptsById(string productId) + { + int count = purchased?.Count ?? 0; + if (count == 0) count = 20; + if (purchased == null) purchased = new List(count); + var receipts = new List(count); + receipts.AddRange(from purchasedProduct in purchased where purchasedProduct.productId == productId select purchasedProduct.receipt); + return receipts.ToArray(); + } + + + + #endregion + + } + + [Serializable] + internal class PurchasedProduct + { + public string productName; + public string productId; + public string receipt; + public bool appleProductIsRestored; } - - diff --git a/Runtime/Code/SDK/GuruSDK.IAP.cs b/Runtime/Code/SDK/GuruSDK.IAP.cs index 6422dfd..caf6709 100644 --- a/Runtime/Code/SDK/GuruSDK.IAP.cs +++ b/Runtime/Code/SDK/GuruSDK.IAP.cs @@ -30,6 +30,7 @@ namespace Guru GuruIAP.Instance.OnBuyStart += OnBuyStart; GuruIAP.Instance.OnBuyEnd += OnBuyEnd; GuruIAP.Instance.OnBuyFailed += OnBuyFailed; + GuruIAP.Instance.OnGetProductReceipt += OnGetReceipt; GuruIAP.Instance.InitWithKeys(googleKey, appleRootCerts, IsDebugMode); } @@ -181,5 +182,16 @@ namespace Guru #endregion + #region Receipt + + + private static void OnGetReceipt(string productId, string receipt, bool appleProductIsRestored = false) + { + var productName = GetProductSettingById(productId).ProductName; + Model.AddReceipt(receipt, productName, productId, appleProductIsRestored); + } + + #endregion + } } \ No newline at end of file