| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297 |
- import Util from "../../before/util/Util";
- import { VideoAdType } from "../../game/data/GameData";
- import { IADSDKMgr } from "../sdk/ad/IADSDKMgr";
- import JsbSystem from "./JsbSystem";
- /**
- * 广告管理类脚本
- * @description 显示/播放广告
- * @author 冯聪
- */
- export default class AdSystem {
- /** 构造函数
- * @param adSdk 传入当前使用广告sdk
- */
- constructor(adSdk: IADSDKMgr) {
- this.adSdk = adSdk;
- // this.init();
- }
- /** 广告sdk */
- private adSdk: IADSDKMgr = null;
- /** 是否显示广告 */
- public ifShowAd: boolean = true;
- /** 视频广告类型 */
- public videoAdType: VideoAdType = VideoAdType.Null;
- /** 视频广告回调 */
- public videoAdcallBack: Function = null;
- /** 初始化广告 */
- public init() {
- //判定下平台
- if (cc.sys.os == cc.sys.OS_ANDROID) {
- this.ifShowAd = gData.gameData.configs.ServerConfig.ifShowAd == '1';
- }
- else {
- this.ifShowAd = false;
- //test
- // this.ifShowAd = gData.gameData.configs.ServerConfig.ifShowAd == '1';
- }
- //初始化Topon广告SDK
- this.adSdk.initSDK();
- let value = mk.storage.getStorage('last_time_stamp');
- if (value) {
- this.last_time_stamp = parseInt(value);
- }
- value = mk.storage.getStorage('solution');
- if (value) {
- gData.warnTipData.curSolution = parseInt(value);
- }
- }
- /**
- * 观看广告
- * @param callBack 广告相关的回调
- */
- public watchAd(callBack: Function) {
- if (this.isAdCooling()) {
- return;
- }
- this.videoAdcallBack = callBack;
- if (!this.ifShowAd) {
- this.wacthAdSuccess()
- }
- else {
- if (cc.sys.platform != cc.sys.WECHAT_GAME) {
- if (cc.sys.os == cc.sys.OS_ANDROID) {
- this.adSdk.showVideo();
- }
- else if (cc.sys.os == cc.sys.OS_IOS) {
- jsb.reflection.callStaticMethod("AppController", "showVideo", "");
- }
- }
- else {
- // WxMgr.getInstance().showRewardAd(pop)
- }
- }
- }
- /** 观看广告失败 */
- public watchAdFail() {
- mk.console.log("=== watchAdFail");
- this.videoAdcallBack(false);
- }
- /** 观看广告取消 */
- public watchAdCancel() {
- mk.console.log("=== watchAdCancel");
- this.videoAdcallBack(false);
- }
- /**
- * 观看广告成功
- * @param placementId 广告位id
- */
- public wacthAdSuccess(request_id: string = "") {
- mk.console.log("=== wacthAdSuccess");
- //累计视频次数
- mk.data.setTAEventUser(1, 'video_time', 1);
- //广告过后,渲染会有问题,统一下一帧再处理逻辑
- mk.ui.scheduleOnce(() => {
- if (!gData.adData.checkAdMax()) {
- this.videoAdcallBack(true, request_id);
- }
- this.initLastTimeStamp();
- }, 0)
- }
- /** 显示原生广告 */
- public showNative(type = 4) {
- if (!this.ifShowAd) {
- return;
- }
- if (gData.warnTipData.curSolution >= 2) {
- return;
- }
- if (cc.sys.platform != cc.sys.WECHAT_GAME) {
- if (cc.sys.os == cc.sys.OS_ANDROID) {
- this.adSdk.showNative(type);
- }
- else if (cc.sys.os == cc.sys.OS_IOS) {
- }
- }
- else {
- // WxMgr.getInstance().showRewardAd(pop)
- }
- }
- /** 销毁原生广告 */
- public destroyNativeAd() {
- if (!this.ifShowAd) {
- return;
- }
- if (cc.sys.platform != cc.sys.WECHAT_GAME) {
- if (cc.sys.os == cc.sys.OS_ANDROID) {
- this.adSdk.destroyNative();
- }
- else if (cc.sys.os == cc.sys.OS_IOS) {
- }
- }
- else {
- // WxMgr.getInstance().showRewardAd(pop)
- }
- }
- /** 上次播放视频时间戳,单位:毫秒 */
- private last_time_stamp: number = 0;
- private initLastTimeStamp() {
- let new_date = new Date();
- this.last_time_stamp = new_date.getTime();
- mk.storage.setStorage('last_time_stamp', this.last_time_stamp);
- }
- /**
- * 视频是否冷却
- * @returns 视频冷却中
- */
- private isAdCooling(): boolean {
- let new_date = new Date();
- let new_time_stamp = new_date.getTime();
- let gap_time_stamp = new_time_stamp - this.last_time_stamp;
- let needTime = 0;
- switch (gData.warnTipData.curSolution) {
- case 0:
- case 1:
- needTime = 5 * 1000;
- break;
- case 2:
- needTime = 30 * 60 * 1000;
- break;
- case 3:
- needTime = 12 * 60 * 60 * 1000;
- break;
- case 4:
- mk.ui.openPanel('module/warnTip/WarnTipPanel');
- return true;
- }
- if (gap_time_stamp < needTime) {
- const time = Math.ceil((needTime - gap_time_stamp) / 1000);
- const leftTime = mk.time.formatWithUnit(time);
- mk.tip.pop('当前看视频太频繁了,请' + leftTime + '后再试');
- return true;
- }
- gData.warnTipData.setSolution(0);
- return false;
- }
- public showBanner() {
- if (CC_DEBUG) {
- return;
- }
- if (gData.warnTipData.curSolution >= 2) {
- return;
- }
- if (!this.ifShowAd) {
- return;
- }
- // console.log("===[AdSystem gameData.adShowConfig", gData.gameData.adShowConfig.is_show_banner);
- // if (gData.gameData.adShowConfig && gData.gameData.adShowConfig.is_show_banner == 1) {
- this.adSdk.showBanner();
- //}
- }
- public destoryBanner() {
- if (CC_DEBUG) {
- return;
- }
- if (!this.ifShowAd) {
- return;
- }
- this.adSdk.destoryBanner();
- }
- /**
- * showInterAd
- * @param type 0 插屏 1 全屏
- */
- public showInterAd(type: number) {
- if (CC_DEBUG) {
- return;
- }
- if (gData.warnTipData.curSolution >= 2) {
- return;
- }
- if (!this.ifShowAd) {
- return;
- }
- this.adSdk.showInter(type);
- }
- /**
- * 根据几率检测弹出插屏
- */
- public checkShowInterByChance() {
- if (!this.ifShowAd) {
- return;
- }
- if (!gData.gameData.adShowConfig) {
- return;
- }
- let chance = gData.gameData.configs.ServerConfig.interOpenChance;
- if (Math.random() <= chance) {
- let delay = Number(gData.gameData.configs.ServerConfig.interOpenDelayMin)
- + Math.random() * (Number(gData.gameData.configs.ServerConfig.interOpenDelayMax) - Number(gData.gameData.configs.ServerConfig.interOpenDelayMin));
- setTimeout(() => {
- this.showInterAd(0);
- }, delay * 1000);
- }
- else {
- gData.moreGame.popMoreGamePopNode();
- }
- }
- /** banner操作(只是全面屏才操作)
- * @param operType 0 显示banner 1 销毁banner
- */
- public bannerOperOnlyFullScreen(operType: number) {
- if (cc.winSize.height > 1500) {
- if (operType == 0) {
- mk.ad.showBanner();
- }
- else if (operType == 1) {
- mk.ad.destoryBanner();
- }
- }
- }
- }
|