説明なし
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

BuyingSubscription.cs 4.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. using System;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEngine.Purchasing;
  5. using UnityEngine.Purchasing.Extension;
  6. using UnityEngine.UI;
  7. namespace Samples.Purchasing.Core.BuyingSubscription
  8. {
  9. public class BuyingSubscription : MonoBehaviour, IDetailedStoreListener
  10. {
  11. IStoreController m_StoreController;
  12. // Your subscription ID. It should match the id of your subscription in your store.
  13. public string subscriptionProductId = "com.mycompany.mygame.my_vip_pass_subscription";
  14. public Text isSubscribedText;
  15. void Start()
  16. {
  17. InitializePurchasing();
  18. }
  19. void InitializePurchasing()
  20. {
  21. var builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());
  22. // Add our purchasable product and indicate its type.
  23. builder.AddProduct(subscriptionProductId, ProductType.Subscription);
  24. UnityPurchasing.Initialize(this, builder);
  25. }
  26. public void BuySubscription()
  27. {
  28. m_StoreController.InitiatePurchase(subscriptionProductId);
  29. }
  30. public void OnInitialized(IStoreController controller, IExtensionProvider extensions)
  31. {
  32. Debug.Log("In-App Purchasing successfully initialized");
  33. m_StoreController = controller;
  34. UpdateUI();
  35. }
  36. public void OnInitializeFailed(InitializationFailureReason error)
  37. {
  38. OnInitializeFailed(error, null);
  39. }
  40. public void OnInitializeFailed(InitializationFailureReason error, string message)
  41. {
  42. var errorMessage = $"Purchasing failed to initialize. Reason: {error}.";
  43. if (message != null)
  44. {
  45. errorMessage += $" More details: {message}";
  46. }
  47. Debug.Log(errorMessage);
  48. }
  49. public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs args)
  50. {
  51. // Retrieve the purchased product
  52. var product = args.purchasedProduct;
  53. Debug.Log($"Purchase Complete - Product: {product.definition.id}");
  54. UpdateUI();
  55. // We return Complete, informing IAP that the processing on our side is done and the transaction can be closed.
  56. return PurchaseProcessingResult.Complete;
  57. }
  58. public void OnPurchaseFailed(Product product, PurchaseFailureReason failureReason)
  59. {
  60. Debug.Log($"Purchase failed - Product: '{product.definition.id}', PurchaseFailureReason: {failureReason}");
  61. }
  62. public void OnPurchaseFailed(Product product, PurchaseFailureDescription failureDescription)
  63. {
  64. Debug.Log($"Purchase failed - Product: '{product.definition.id}'," +
  65. $" Purchase failure reason: {failureDescription.reason}," +
  66. $" Purchase failure details: {failureDescription.message}");
  67. }
  68. bool IsSubscribedTo(Product subscription)
  69. {
  70. // If the product doesn't have a receipt, then it wasn't purchased and the user is therefore not subscribed.
  71. if (subscription.receipt == null)
  72. {
  73. return false;
  74. }
  75. //The intro_json parameter is optional and is only used for the App Store to get introductory information.
  76. var subscriptionManager = new SubscriptionManager(subscription, null);
  77. // The SubscriptionInfo contains all of the information about the subscription.
  78. // Find out more: https://docs.unity3d.com/Packages/com.unity.purchasing@3.1/manual/UnityIAPSubscriptionProducts.html
  79. var info = subscriptionManager.getSubscriptionInfo();
  80. return info.isSubscribed() == Result.True;
  81. }
  82. void UpdateUI()
  83. {
  84. var subscriptionProduct = m_StoreController.products.WithID(subscriptionProductId);
  85. try
  86. {
  87. var isSubscribed = IsSubscribedTo(subscriptionProduct);
  88. isSubscribedText.text = isSubscribed ? "You are subscribed" : "You are not subscribed";
  89. }
  90. catch (StoreSubscriptionInfoNotSupportedException)
  91. {
  92. var receipt = (Dictionary<string, object>)MiniJson.JsonDecode(subscriptionProduct.receipt);
  93. var store = receipt["Store"];
  94. isSubscribedText.text =
  95. "Couldn't retrieve subscription information because your current store is not supported.\n" +
  96. $"Your store: \"{store}\"\n\n" +
  97. "You must use the App Store, Google Play Store or Amazon Store to be able to retrieve subscription information.\n\n" +
  98. "For more information, see README.md";
  99. }
  100. }
  101. }
  102. }