namespace Guru { using UnityEngine; using System; using System.Linq; public partial class GuruSDK { public static bool IsIAPReady = false; /// /// 初始化IAP 功能 /// public static void InitIAP(byte[] googleKey, byte[] appleRootCerts) { GuruIAP.Instance.OnInitResult += OnIAPInitResult; GuruIAP.Instance.OnRestored += OnRestored; GuruIAP.Instance.OnBuyStart += OnBuyStart; GuruIAP.Instance.OnBuyEnd += OnBuyEnd; GuruIAP.Instance.InitWithKeys(googleKey, appleRootCerts, IsDebugMode); } /// /// 初始化结果 /// /// private static void OnIAPInitResult(bool success) { LogI($"IAP init result: {success}"); IsIAPReady = success; Callbacks.IAP._onIAPInitComplete?.Invoke(success); } private static bool CheckIAPReady() { if (!IsIAPReady) { LogE("IAP is not ready, call first."); return false; } return true; } #region Purchase public static ProductSetting GetProductSettingById(string productId) { var products = GuruSettings.Instance.Products; if (products != null && products.Length > 0) { return products.FirstOrDefault(p => p.ProductId == productId); } return null; } private static Action _onPurchaseCallback; /// /// 购买商品, 通过商品Name /// /// /// public static void Purchase(string productName, Action purchaseCallback = null) { if (CheckIAPReady()) { _onPurchaseCallback = purchaseCallback; GuruIAP.Instance.Buy(productName); } } /// /// 购买商品, 通过商品ID /// /// /// public static bool PurchaseById(string productId, Action purchaseCallback = null) { var productName = GetProductSettingById(productId)?.ProductName ?? ""; if (CheckIAPReady() && !string.IsNullOrEmpty(productName)) { Purchase(productName, purchaseCallback); return true; } return false; } /// /// 支付回调 /// /// /// private static void OnBuyEnd(string productId, bool success) { _onPurchaseCallback?.Invoke(productId, success); } private static void OnBuyStart(string productId) { Callbacks.IAP._onPurchaseStart?.Invoke(productId); } #endregion #region Restore Purchase private static Action _onRestored; /// /// 恢复购买 /// /// public static void Restore(Action restoreCallback) { if (CheckIAPReady()) { _onRestored = restoreCallback; GuruIAP.Instance.Restore(); } } private static void OnRestored(bool success) { _onRestored?.Invoke(success); } #endregion } }