AdSystem.ts 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. import JsbSystem from "./JsbSystem";
  2. /**
  3. * 广告管理类脚本
  4. * @description 显示/播放广告
  5. * @author 冯聪
  6. */
  7. export default class AdSystem {
  8. /** 构造函数
  9. * @param adSdk 传入当前使用广告sdk
  10. */
  11. constructor(adSdk: any) {
  12. this.adSdk = adSdk;
  13. this.init();
  14. }
  15. /** 广告sdk */
  16. public adSdk: any = null;
  17. /** 是否显示广告 */
  18. public ifShowAd: boolean = true;
  19. /** 视频广告回调 */
  20. public videoAdcallBack: Function = null;
  21. /** 初始化广告 */
  22. public init() {
  23. //初始化Topon广告SDK
  24. this.adSdk.initSDK();
  25. }
  26. /**
  27. * 观看广告
  28. * @param callBack 广告相关的回调
  29. */
  30. public watchAd(callBack: Function) {
  31. this.videoAdcallBack = callBack;
  32. if (!this.ifShowAd) {
  33. this.wacthAdSuccess()
  34. }
  35. else {
  36. if (cc.sys.platform != cc.sys.WECHAT_GAME) {
  37. if (cc.sys.os == cc.sys.OS_ANDROID) {
  38. // jsb.reflection.callStaticMethod("org/cocos2dx/javascript/config/TTAdManagerHolder", "showVideo", "(I)V", pop);
  39. this.adSdk.showVideoAd();
  40. }
  41. else if (cc.sys.os == cc.sys.OS_IOS) {
  42. jsb.reflection.callStaticMethod("AppController", "showVideo", "");
  43. }
  44. }
  45. else {
  46. // WxMgr.getInstance().showRewardAd(pop)
  47. }
  48. }
  49. }
  50. /** 观看广告失败 */
  51. public watchAdFail() {
  52. mk.console.log("watchAdFail");
  53. this.videoAdcallBack(false);
  54. }
  55. /** 观看广告取消 */
  56. public watchAdCancel() {
  57. mk.console.log("watchAdCancel");
  58. this.videoAdcallBack(false);
  59. }
  60. /**
  61. * 观看广告成功
  62. * @param placementId 广告位id
  63. */
  64. public wacthAdSuccess(placementId = '') {
  65. mk.console.log("wacthAdSuccess");
  66. if (this.isAdCooling()) return;
  67. this.videoAdcallBack(true);
  68. }
  69. /** 显示原生广告 */
  70. public showNativeAd(type = 0, show = true) {
  71. if (cc.sys.platform != cc.sys.WECHAT_GAME) {
  72. if (cc.sys.os == cc.sys.OS_ANDROID) {
  73. // jsb.reflection.callStaticMethod("org/cocos2dx/javascript/config/TTAdManagerHolder", "showVideo", "(I)V", pop);
  74. this.adSdk.loadNativeAd(type, show);
  75. }
  76. else if (cc.sys.os == cc.sys.OS_IOS) {
  77. }
  78. }
  79. else {
  80. // WxMgr.getInstance().showRewardAd(pop)
  81. }
  82. }
  83. /** 销毁原生广告 */
  84. public destroyNativeAd() {
  85. if (cc.sys.platform != cc.sys.WECHAT_GAME) {
  86. if (cc.sys.os == cc.sys.OS_ANDROID) {
  87. // jsb.reflection.callStaticMethod("org/cocos2dx/javascript/config/TTAdManagerHolder", "showVideo", "(I)V", pop);
  88. this.adSdk.destroyNativeAd();
  89. }
  90. else if (cc.sys.os == cc.sys.OS_IOS) {
  91. }
  92. }
  93. else {
  94. // WxMgr.getInstance().showRewardAd(pop)
  95. }
  96. }
  97. /** 时评冷却倒计时 */
  98. private _ad_cooling_time: number = 0;
  99. /**
  100. * 视频是否冷却
  101. * @returns 视频冷却中
  102. */
  103. private isAdCooling(): boolean {
  104. if (this._ad_cooling_time > 0) {
  105. mk.tip.pop('当前看视频太频繁了,请' + this._ad_cooling_time + '秒后再试');
  106. return true;
  107. }
  108. this._ad_cooling_time = 5;
  109. this.runCooling();
  110. return false;
  111. }
  112. private runCooling() {
  113. this._ad_cooling_time--;
  114. if (this._ad_cooling_time > 0) {
  115. setTimeout(this.runCooling.bind(this), 1000);
  116. }
  117. }
  118. }