ManaIAP.cs 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  1. using cn.sharesdk.unity3d;
  2. using UnityEngine;
  3. using UnityEngine.UI;
  4. using UnityEngine.Events;
  5. using UnityEngine.Purchasing;
  6. using UnityEngine.Advertisements;
  7. using System;
  8. using System.IO;
  9. using System.Collections;
  10. using System.Collections.Generic;
  11. public class ManaIAP : MonoBehaviour, IStoreListener
  12. {
  13. #region 变量
  14. public static bool Complete;
  15. public static ManaIAP Instance;
  16. public static UnityAction AdAction;
  17. public static IStoreController IStoreController;
  18. public static IExtensionProvider IExtensionProvider;
  19. public static List<string> ProductList = new List<string>();
  20. public static Dictionary<string, UnityAction> ProductDic = new Dictionary<string, UnityAction>();
  21. #region Share配置
  22. public static string ImageUrl
  23. {
  24. get
  25. {
  26. string iconPath = Application.persistentDataPath + "/ICON2.png";
  27. if (!File.Exists(iconPath))
  28. {
  29. Texture2D texture2D = ManaReso.Load<Texture2D>("ICON2", Folder.UI);
  30. File.WriteAllBytes(iconPath, texture2D.EncodeToPNG());
  31. }
  32. return Application.persistentDataPath + "/ICON2.png";
  33. }
  34. }
  35. public static string ShareUrl = "http://www.dashgame.com";
  36. public static ShareSDK ShareSdk;
  37. #endregion
  38. #endregion
  39. public void Awake()
  40. {
  41. Instance = this;
  42. }
  43. public static void Initialize()
  44. {
  45. InitializeAD();
  46. InitializeIAP();
  47. InitializeShare();
  48. }
  49. public static void InitializeAD()
  50. {
  51. if (Application.platform == RuntimePlatform.IPhonePlayer)
  52. {
  53. Advertisement.Initialize("1408492");
  54. }
  55. else if (Application.isMobilePlatform)
  56. {
  57. Advertisement.Initialize("1408493");
  58. }
  59. else if (Application.isEditor)
  60. {
  61. Advertisement.Initialize("1408493");
  62. }
  63. }
  64. public static void InitializeIAP()
  65. {
  66. ConfigurationBuilder cb = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());
  67. cb.AddProduct("Test", ProductType.Consumable);
  68. ProductList.Add("Test");
  69. UnityPurchasing.Initialize(Instance, cb);
  70. }
  71. public static void InitializeShare()
  72. {
  73. if (Application.isMobilePlatform || Application.platform == RuntimePlatform.IPhonePlayer)
  74. {
  75. ShareSdk = Instance.gameObject.AddComponent<ShareSDK>();
  76. ShareSdk.Initialize();
  77. ShareSdk.shareHandler = ShareCallback;
  78. }
  79. }
  80. public static void PlayAD(UnityAction action)
  81. {
  82. if (Advertisement.IsReady())
  83. {
  84. AdAction = action;
  85. ShowOptions showOptions = new ShowOptions();
  86. showOptions.resultCallback = CallbackAD;
  87. Advertisement.Show(showOptions);
  88. }
  89. else
  90. {
  91. Bubble.Show(null, Language.GetStr("IAP", "LoadAd"));
  92. if (!Advertisement.isInitialized)
  93. {
  94. InitializeAD();
  95. }
  96. }
  97. }
  98. public static void CallbackAD(ShowResult showResult)
  99. {
  100. if (showResult == ShowResult.Finished)
  101. {
  102. AdAction.Invoke();
  103. ManaCenter.AdAmt++;
  104. }
  105. else if (showResult == ShowResult.Skipped)
  106. {
  107. Bubble.Show(null, Language.GetStr("IAP", "IncompleteAd"));
  108. }
  109. else if (showResult == ShowResult.Failed)
  110. {
  111. Bubble.Show(null, Language.GetStr("IAP", "FailAd"));
  112. }
  113. }
  114. public static void Purchase(string id)
  115. {
  116. if (!Complete)
  117. {
  118. Bubble.Show(null, Language.GetStr("IAP", "PurchaseFail"));
  119. return;
  120. }
  121. if (!ProductList.Contains(id))
  122. {
  123. Bubble.Show(null, Language.GetStr("IAP", "PurchaseUnvalid"));
  124. return;
  125. }
  126. IStoreController.InitiatePurchase(id);
  127. }
  128. public void OnInitialized(IStoreController controller, IExtensionProvider extensions)
  129. {
  130. Complete = true;
  131. IStoreController = controller;
  132. IExtensionProvider = extensions;
  133. ManaDebug.Log("初始化IAP成功");
  134. }
  135. public void OnInitializeFailed(InitializationFailureReason error)
  136. {
  137. Complete = false;
  138. Debug.Log("初始化IAP失败");
  139. ManaDebug.Log("初始化IAP失败");
  140. }
  141. public void OnPurchaseFailed(Product i, PurchaseFailureReason p)
  142. {
  143. Bubble.Show(null, Language.GetStr("IAP", "PurchaseFail"));
  144. }
  145. public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs e)
  146. {
  147. Bubble.Show(null, Language.GetStr("IAP", "PurchaseSuccess"));
  148. ProductDic[e.purchasedProduct.definition.id].Invoke();
  149. return PurchaseProcessingResult.Complete;
  150. }
  151. public static void Share()
  152. {
  153. ShareContent shareContent = new ShareContent();
  154. shareContent.SetText(Language.GetStr("Common", "ShareContent"));
  155. shareContent.SetTitle(Language.GetStr("Common", "ShareTit"));
  156. shareContent.SetUrl(ShareUrl);
  157. shareContent.SetImagePath(ImageUrl);
  158. shareContent.SetShareType(ContentType.App);
  159. ShareSdk.ShowPlatformList(null, shareContent, 100, 100);
  160. }
  161. public static void Authorize()
  162. {
  163. ShareSdk.Authorize(PlatformType.QQ);
  164. }
  165. public static void ShareCallback(int reqID, ResponseState state, PlatformType type, Hashtable result)
  166. {
  167. if (state == ResponseState.Success)
  168. {
  169. ManaCenter.ShareAmt++;
  170. Bubble.Show(null, Language.GetStr("Common", "ShareSuccess"));
  171. }
  172. else if (state == ResponseState.Fail)
  173. {
  174. Bubble.Show(null, Language.GetStr("Common", "ShareFail"));
  175. }
  176. else if (state == ResponseState.Cancel)
  177. {
  178. Bubble.Show(null, Language.GetStr("Common", "ShareFail"));
  179. }
  180. }
  181. public static void AuthorizeCallback(int reqID, ResponseState state, PlatformType type, Hashtable result)
  182. {
  183. if (state == ResponseState.Success)
  184. {
  185. print("Success");
  186. }
  187. else if (state == ResponseState.Fail)
  188. {
  189. print("Fail");
  190. }
  191. else if (state == ResponseState.Cancel)
  192. {
  193. print("Cancel");
  194. }
  195. }
  196. }