UpgradeDowngradeSubscription.cs 4.4 KB

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