驱蚊app
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

107 lines
2.9 KiB

  1. using System;
  2. using UnityEngine;
  3. using UnityEngine.Purchasing;
  4. using UnityEngine.Purchasing.Extension;
  5. public class IAPManager : MonoBehaviour, IDetailedStoreListener
  6. {
  7. public static IAPManager Instance { get; private set; } // 单例
  8. private IStoreController controller;
  9. private IExtensionProvider extensions;
  10. private string subscriptionId = "quewenYueKa";
  11. void Awake()
  12. {
  13. // 单例初始化
  14. if (Instance == null)
  15. {
  16. Instance = this;
  17. DontDestroyOnLoad(gameObject); // 可选:防止切换场景被销毁
  18. }
  19. else
  20. {
  21. Destroy(gameObject); // 避免重复创建
  22. }
  23. }
  24. void Start()
  25. {
  26. var builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());
  27. builder.AddProduct(subscriptionId, ProductType.Subscription);
  28. UnityPurchasing.Initialize(this, builder); // 使用新版接口
  29. }
  30. public void OnInitialized(IStoreController controller, IExtensionProvider extensions)
  31. {
  32. this.controller = controller;
  33. this.extensions = extensions;
  34. Debug.Log("IAP 初始化成功");
  35. }
  36. public void OnInitializeFailed(InitializationFailureReason error)
  37. {
  38. Debug.LogError("IAP 初始化失败: " + error);
  39. }
  40. public void OnInitializeFailed(InitializationFailureReason error, string message)
  41. {
  42. Debug.LogError($"详细失败信息: {error} - {message}");
  43. }
  44. public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs args)
  45. {
  46. if (args.purchasedProduct.definition.id == subscriptionId)
  47. {
  48. Debug.Log("订阅成功!");
  49. // 解锁功能
  50. }
  51. return PurchaseProcessingResult.Complete;
  52. }
  53. public void OnPurchaseFailed(Product product, PurchaseFailureDescription failureDescription)
  54. {
  55. Debug.LogError($"购买失败: {failureDescription.message}");
  56. }
  57. public void OnPurchaseFailed(Product product, PurchaseFailureReason failureReason)
  58. {
  59. Debug.LogError($"购买失败: {failureReason}");
  60. }
  61. public bool IsSubscribed()
  62. {
  63. if (controller == null) return false;
  64. Product product = controller.products.WithID(subscriptionId);
  65. if (product != null && product.hasReceipt)
  66. {
  67. // 对于订阅商品,hasReceipt 通常意味着用户已经订阅
  68. Debug.Log("用户已订阅!");
  69. return true;
  70. }
  71. Debug.Log("用户未订阅。");
  72. return false;
  73. }
  74. public void BuySubscription()
  75. {
  76. if (controller == null) return;
  77. Product product = controller.products.WithID(subscriptionId);
  78. if (product != null && product.availableToPurchase)
  79. {
  80. controller.InitiatePurchase(product);
  81. }
  82. else
  83. {
  84. Debug.LogWarning("订阅商品未准备好");
  85. }
  86. }
  87. }