|
- 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("订阅商品未准备好");
- }
- }
-
- }
|