ADHandler.ts 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. /*
  2. * @Author: mojunshou 1637302775@qq.com
  3. * @Date: 2025-04-11 10:14:44
  4. * @LastEditors: mojunshou 1637302775@qq.com
  5. * @LastEditTime: 2025-05-06 15:20:55
  6. * @Description:
  7. */
  8. // ADHandler.ts
  9. import { CocosHandlerType, CocosHandler } from './CocosHandler';
  10. import { AD_TYPE } from '../config/GameDefine';
  11. import { oops } from 'db://oops-framework/core/Oops';
  12. import { UIID } from '../config/GameUIConfig';
  13. import { smc } from '../SingletonModuleComp';
  14. import { ServerHandler } from './ServerHandler';
  15. import { LoginHandler } from './LoginHandler';
  16. import { GameEvent } from '../config/GameEvent';
  17. export class ADHandler {
  18. private static _inst: ADHandler;
  19. public static get inst(): ADHandler {
  20. if (!this._inst) {
  21. this._inst = new ADHandler();
  22. }
  23. return this._inst;
  24. }
  25. showAd = async (id: string) => {
  26. const { method, param } = this.buildAdParam(id);
  27. const data: CocosHandlerType = {
  28. method,
  29. param: JSON.stringify(param)
  30. };
  31. return await CocosHandler.inst.sendMessageToAndroid(data, `广告 ${id}`);
  32. };
  33. private buildAdParam(id: string): { method: string, param: any } {
  34. console.log("播放的广告ID>>>>>>>>>>>>>", id)
  35. const param: any = {
  36. funcId: id,
  37. callback: {
  38. onLoaded: '',
  39. onShow: '',
  40. onLoadFailed: '',
  41. onShowFailed: '',
  42. onClose: ''
  43. }
  44. };
  45. let method = '';
  46. switch (id) {
  47. case AD_TYPE.Start:
  48. method = 'ad.splash';
  49. param.callback.onLoadFailed = 'ADHandler.inst.adSplashLoadFailed';
  50. param.callback.onClose = 'ADHandler.inst.adSplashClose';
  51. break;
  52. case AD_TYPE.Jion_Main:
  53. case AD_TYPE.Double_Close:
  54. case AD_TYPE.Rebates:
  55. case AD_TYPE.Double_Speed_Close:
  56. method = 'ad.interstitial';
  57. param.callback.onShow = 'ADHandler.inst.adInterstitialonShow'
  58. param.callback.onLoadFailed = 'ADHandler.inst.adInterstitialLoadFailed';
  59. param.callback.onClose = 'ADHandler.inst.adInterstitialClose';
  60. break;
  61. default: //激励视频
  62. oops.gui.waitOpen();
  63. // oops.message.dispatchEvent(GameEvent.updateGameState, "paused");
  64. method = 'ad.reward';
  65. param.callback.onShow = 'ADHandler.inst.adRewardShow';
  66. param.callback.onClose = 'ADHandler.inst.adRewardClose';
  67. param.callback.onLoadFailed = 'ADHandler.inst.adRewardLoadFailed';
  68. break;
  69. }
  70. return { method, param };
  71. }
  72. //启屏广告关闭P
  73. adSplashClose = async () => {
  74. console.log("启屏广告关闭")
  75. if (oops.gui.has(UIID.KindTips)) oops.gui.remove(UIID.KindTips);
  76. if (oops.gui.has(UIID.Retention)) oops.gui.remove(UIID.Retention);
  77. ServerHandler.inst.getAccountInfo();
  78. LoginHandler.inst.openChildProtection();
  79. };
  80. adSplashLoadFailed = () => {
  81. oops.gui.waitClose();
  82. console.log('[广告] 启屏广告加载失败');
  83. ServerHandler.inst.getAccountInfo();
  84. //加载实名认证
  85. LoginHandler.inst.openChildProtection();
  86. };
  87. //插屏广告展示的时候也要暂停
  88. adInterstitialonShow = () => {
  89. oops.message.dispatchEvent(GameEvent.pauseGame);
  90. }
  91. adInterstitialLoadFailed = () => {
  92. console.log('[广告] 插屏广告加载失败');
  93. oops.message.dispatchEvent(GameEvent.updateGameState, "playing");
  94. oops.message.dispatchEvent(GameEvent.resumeGame);
  95. };
  96. adInterstitialClose = (type: boolean) => {
  97. console.log('[广告] 插屏广告关闭', type);
  98. oops.message.dispatchEvent(GameEvent.updateGameState, "playing");
  99. oops.message.dispatchEvent(GameEvent.resumeGame);
  100. };
  101. adRewardShow = (str: string) => {
  102. const data = JSON.parse(str);
  103. ServerHandler.inst.getSign(data.price);
  104. oops.message.dispatchEvent(GameEvent.pauseGame);
  105. };
  106. adRewardLoadFailed = (str: string) => {
  107. oops.gui.waitClose();
  108. const viewType = smc.game.GameModel.viewType;
  109. // 重置视图类型
  110. const resetViewType = () => {
  111. smc.game.GameModel.viewType = "";
  112. };
  113. oops.message.dispatchEvent(GameEvent.updateGameState, "playing");
  114. oops.message.dispatchEvent(GameEvent.resumeGame);
  115. // 广告未完成观看
  116. switch (viewType) {
  117. case "pass_reward":
  118. resetViewType();
  119. ServerHandler.inst.getNextLevel();
  120. break;
  121. case "revive_reward":
  122. resetViewType();
  123. ServerHandler.inst.RestartGame();
  124. break;
  125. case "double_reward":
  126. ServerHandler.inst.getLittleRewards();
  127. resetViewType();
  128. break;
  129. case "speed_reward": //加速奖励
  130. oops.gui.toast("跳过广告,翻倍失败~")
  131. break;
  132. }
  133. };
  134. adRewardClose = (state: boolean) => {
  135. oops.gui.waitClose();
  136. oops.message.dispatchEvent(GameEvent.updateGameState, "playing");
  137. oops.message.dispatchEvent(GameEvent.resumeGame);
  138. const viewType = smc.game.GameModel.viewType;
  139. oops.log.logView(viewType, "<<<<<<<<<广告类型viewType");
  140. // 重置视图类型
  141. const resetViewType = () => {
  142. smc.game.GameModel.viewType = "";
  143. };
  144. if (state) {
  145. // 广告观看完成,发放奖励
  146. switch (viewType) {
  147. case "double_reward": //翻倍奖励
  148. ServerHandler.inst.getVideorReward();
  149. resetViewType();
  150. break;
  151. case "pass_reward": //通关奖励
  152. ServerHandler.inst.getVideorReward();
  153. resetViewType();
  154. ServerHandler.inst.getNextLevel();
  155. break;
  156. case "speed_reward": //加速奖励
  157. oops.message.dispatchEvent(GameEvent.DoubleSpeedOpenSuccess);
  158. ServerHandler.inst.getVideorReward();
  159. resetViewType();
  160. break;
  161. case "revive_reward": //复活奖励
  162. ServerHandler.inst.getVideorReward();
  163. resetViewType();
  164. oops.message.dispatchEvent(GameEvent.RestartGame);
  165. break;
  166. }
  167. } else {
  168. // 广告未完成观看
  169. switch (viewType) {
  170. case "pass_reward":
  171. resetViewType();
  172. ServerHandler.inst.getNextLevel();
  173. break;
  174. case "revive_reward":
  175. resetViewType();
  176. ServerHandler.inst.RestartGame();
  177. break;
  178. case "double_reward":
  179. ServerHandler.inst.getLittleRewards();
  180. resetViewType();
  181. break;
  182. case "speed_reward": //加速奖励
  183. oops.gui.toast("跳过广告,翻倍失败~")
  184. break;
  185. }
  186. }
  187. };
  188. }
  189. // @ts-ignore
  190. window["ADHandler"] = ADHandler;