Nessuna descrizione
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.

UpgradeDowngradeSubscription.cs 5.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. using System;
  2. using UnityEngine;
  3. using UnityEngine.Purchasing;
  4. using UnityEngine.Purchasing.Extension;
  5. using UnityEngine.UI;
  6. namespace Samples.Purchasing.GooglePlay.UpgradeDowngradeSubscription
  7. {
  8. [RequireComponent(typeof(UserWarningGooglePlayStore))]
  9. public class UpgradeDowngradeSubscription : MonoBehaviour, IDetailedStoreListener
  10. {
  11. //Your products IDs. They should match the ids of your products in your store.
  12. public string normalSubscriptionId = "com.mycompany.mygame.my_normal_pass_subscription";
  13. public string vipSubscriptionId = "com.mycompany.mygame.my_vip_pass_subscription";
  14. //These proration modes are the ones recommended by the Google Play Store, but you may want to use different modes for your specific situation.
  15. //https://developer.android.com/google/play/billing/subscriptions#proration-recommendations
  16. public GooglePlayProrationMode upgradeSubscriptionProrationMode = GooglePlayProrationMode.ImmediateAndChargeProratedPrice;
  17. public GooglePlayProrationMode downgradeSubscriptionProrationMode = GooglePlayProrationMode.Deferred;
  18. public Text currentSubscriptionText;
  19. public Text deferredSubscriptionChangeText;
  20. SubscriptionGroup m_SubscriptionGroup;
  21. void Start()
  22. {
  23. InitializePurchasing();
  24. UpdateWarningText();
  25. }
  26. void InitializePurchasing()
  27. {
  28. var builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());
  29. //When a subscription change has the DEFERRED proration mode, the subscription is upgraded or downgraded only when the subscription renews.
  30. //This sets a listener for when the subscription change is requested but hasn't occured yet.
  31. //We notify the user that the subscription change will take effect at the next renewal cycle.
  32. builder.Configure<IGooglePlayConfiguration>()
  33. .SetDeferredProrationUpgradeDowngradeSubscriptionListener(NotifyUserOfOnDeferredSubscriptionChange);
  34. builder.AddProduct(normalSubscriptionId, ProductType.Subscription);
  35. builder.AddProduct(vipSubscriptionId, ProductType.Subscription);
  36. UnityPurchasing.Initialize(this, builder);
  37. }
  38. void NotifyUserOfOnDeferredSubscriptionChange(Product product)
  39. {
  40. var msg = $"Subscription change to {product.definition.id} is deferred until the next renewal cycle.";
  41. deferredSubscriptionChangeText.text = msg;
  42. Debug.Log(msg);
  43. }
  44. public void OnInitialized(IStoreController controller, IExtensionProvider extensions)
  45. {
  46. Debug.Log("In-App Purchasing successfully initialized");
  47. m_SubscriptionGroup = new SubscriptionGroup(controller, extensions, upgradeSubscriptionProrationMode, downgradeSubscriptionProrationMode,
  48. normalSubscriptionId, vipSubscriptionId);
  49. UpdateUI(m_SubscriptionGroup.CurrentSubscriptionId());
  50. }
  51. public void BuyNormalSubscription()
  52. {
  53. m_SubscriptionGroup.BuySubscription(normalSubscriptionId);
  54. }
  55. public void BuyVipSubscription()
  56. {
  57. m_SubscriptionGroup.BuySubscription(vipSubscriptionId);
  58. }
  59. public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs args)
  60. {
  61. var product = args.purchasedProduct;
  62. Debug.Log($"Processing Purchase: {product.definition.id}");
  63. UnlockContent(product);
  64. return PurchaseProcessingResult.Complete;
  65. }
  66. void UnlockContent(Product product)
  67. {
  68. //Unlock content here
  69. UpdateUI(product.definition.id);
  70. }
  71. void UpdateUI(string subscriptionId)
  72. {
  73. currentSubscriptionText.text = $"Current Subscription: {subscriptionId ?? "None"}";
  74. deferredSubscriptionChangeText.text = "";
  75. }
  76. public void OnInitializeFailed(InitializationFailureReason error)
  77. {
  78. OnInitializeFailed(error, null);
  79. }
  80. public void OnInitializeFailed(InitializationFailureReason error, string message)
  81. {
  82. var errorMessage = $"Purchasing failed to initialize. Reason: {error}.";
  83. if (message != null)
  84. {
  85. errorMessage += $" More details: {message}";
  86. }
  87. Debug.Log(errorMessage);
  88. }
  89. public void OnPurchaseFailed(Product product, PurchaseFailureReason failureReason)
  90. {
  91. Debug.Log($"Purchase failed - Product: '{product.definition.id}', PurchaseFailureReason: {failureReason}");
  92. }
  93. public void OnPurchaseFailed(Product product, PurchaseFailureDescription failureDescription)
  94. {
  95. Debug.Log($"Purchase failed - Product: '{product.definition.id}'," +
  96. $" Purchase failure reason: {failureDescription.reason}," +
  97. $" Purchase failure details: {failureDescription.message}");
  98. }
  99. void UpdateWarningText()
  100. {
  101. GetComponent<UserWarningGooglePlayStore>().UpdateWarningText();
  102. }
  103. }
  104. }