using System; using UnityEngine; using UnityEngine.Purchasing; using UnityEngine.Purchasing.Extension; public class IAPManager : MonoBehaviour, IDetailedStoreListener { public static IAPManager Instance { get; private set; } // 单例 private IStoreController controller; private IExtensionProvider extensions; private string subscriptionId = "quewenYueKa"; void Awake() { // 单例初始化 if (Instance == null) { Instance = this; DontDestroyOnLoad(gameObject); // 可选:防止切换场景被销毁 } else { Destroy(gameObject); // 避免重复创建 } } void Start() { var builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance()); builder.AddProduct(subscriptionId, ProductType.Subscription); UnityPurchasing.Initialize(this, builder); // 使用新版接口 } public void OnInitialized(IStoreController controller, IExtensionProvider extensions) { this.controller = controller; this.extensions = extensions; Debug.Log("IAP 初始化成功"); } public void OnInitializeFailed(InitializationFailureReason error) { Debug.LogError("IAP 初始化失败: " + error); } public void OnInitializeFailed(InitializationFailureReason error, string message) { Debug.LogError($"详细失败信息: {error} - {message}"); } public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs args) { if (args.purchasedProduct.definition.id == subscriptionId) { Debug.Log("订阅成功!"); // 解锁功能 } return PurchaseProcessingResult.Complete; } public void OnPurchaseFailed(Product product, PurchaseFailureDescription failureDescription) { Debug.LogError($"购买失败: {failureDescription.message}"); } public void OnPurchaseFailed(Product product, PurchaseFailureReason failureReason) { Debug.LogError($"购买失败: {failureReason}"); } public bool IsSubscribed() { if (controller == null) return false; Product product = controller.products.WithID(subscriptionId); if (product != null && product.hasReceipt) { // 对于订阅商品,hasReceipt 通常意味着用户已经订阅 Debug.Log("用户已订阅!"); return true; } Debug.Log("用户未订阅。"); return false; } public void BuySubscription() { if (controller == null) return; Product product = controller.products.WithID(subscriptionId); if (product != null && product.availableToPurchase) { controller.InitiatePurchase(product); } else { Debug.LogWarning("订阅商品未准备好"); } } }