ManagerIAP.cs 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. using UnityEngine;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using UnityEngine.Advertisements;
  5. using UnityEngine.Events;
  6. using UnityEngine.Purchasing;
  7. public class ManagerIAP : IStoreListener
  8. {
  9. #region 变量
  10. public static bool LoadComplete;
  11. public static UnityAction AdAction;
  12. public static ManagerIAP Instance;
  13. public static IStoreController IStoreController;
  14. public static IExtensionProvider IExtensionProvider;
  15. public static Dictionary<string, UnityAction> ProductDic = new Dictionary<string, UnityAction>();
  16. #endregion
  17. public ManagerIAP()
  18. {
  19. InitializeAd();
  20. ConfigurationBuilder cb = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());
  21. cb.AddProduct("Test", ProductType.Consumable);
  22. UnityPurchasing.Initialize(this, cb);
  23. Instance = this;
  24. }
  25. public static void InitializeAd()
  26. {
  27. if (Application.platform == RuntimePlatform.IPhonePlayer)
  28. {
  29. Advertisement.Initialize("1408492");
  30. }
  31. else if (Application.isMobilePlatform)
  32. {
  33. Advertisement.Initialize("1408493");
  34. }
  35. else if (Application.isEditor)
  36. {
  37. Advertisement.Initialize("1408493");
  38. }
  39. }
  40. public static void PlayAd(UnityAction action)
  41. {
  42. if (Advertisement.IsReady())
  43. {
  44. AdAction = action;
  45. ShowOptions showOptions = new ShowOptions();
  46. showOptions.resultCallback = AdCallback;
  47. Advertisement.Show(showOptions);
  48. }
  49. else
  50. {
  51. Bubble.Show(null, Language.GetStr("IAP", "LoadAd"));
  52. if (!Advertisement.isInitialized)
  53. {
  54. InitializeAd();
  55. }
  56. }
  57. }
  58. public static void Purchase(string id)
  59. {
  60. if (!LoadComplete)
  61. {
  62. Bubble.Show(null, Language.GetStr("IAP", "PurchaseFail"));
  63. }
  64. IStoreController.InitiatePurchase(id);
  65. }
  66. public static void AdCallback(ShowResult showResult)
  67. {
  68. if (showResult == ShowResult.Finished)
  69. {
  70. AdAction.Invoke();
  71. ManaData.AdAmt++;
  72. }
  73. else if (showResult == ShowResult.Skipped)
  74. {
  75. Bubble.Show(null, Language.GetStr("IAP", "IncompleteAd"));
  76. }
  77. else if (showResult == ShowResult.Failed)
  78. {
  79. Bubble.Show(null, Language.GetStr("IAP", "FailAd"));
  80. }
  81. }
  82. public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs e)
  83. {
  84. Bubble.Show(null, Language.GetStr("IAP", "PurchaseSuccess"));
  85. ProductDic[e.purchasedProduct.definition.id].Invoke();
  86. return PurchaseProcessingResult.Complete;
  87. }
  88. public void OnInitialized(IStoreController controller, IExtensionProvider extensions)
  89. {
  90. LoadComplete = true;
  91. IStoreController = controller;
  92. IExtensionProvider = extensions;
  93. }
  94. public void OnInitializeFailed(InitializationFailureReason error)
  95. {
  96. LoadComplete = false;
  97. }
  98. public void OnPurchaseFailed(Product i, PurchaseFailureReason p)
  99. {
  100. Bubble.Show(null, Language.GetStr("IAP", "PurchaseFail"));
  101. }
  102. }