import { sys, Vec2, Node } from "cc"; import { authorizeParams, getUserInfoParams, loadParams, loginParams, MiniGameApiBase, ModalParams, recordedGameScreenParams, toastParams } from "./MiniGameApiBase"; import { GameCfg } from "../Config/GameCfg"; export interface mgtvVideoAd { // 通过 load 方法主动预加载广告内容。 // 此外,在显示广告出现问题时也可以尝试主动 load 一次。 // 该方法返回一个 Promise,如果广告已经自动拉取成功,调用该方法返回一个 resolved Promise; load: () => Promise; // 广告创建后默认是隐藏的,可以通过该方法显示广告。 该方法返回一个 Promise 对象。当广告组件正常获取素材时,该 Promise 对象会是一个 resolved Promise。当广告组件发生错误时,会是一个 rejected Promise,参数与error事件监听器获得的参数相同。 show: () => Promise; //绑定 load 事件的监听器,用户在手动调用 load 方法后,广告组件会预先加载。 广告组件成功拉取广告素材时会触发load事件的监听器。 //确保监听此事件时,开发者主动调用过 load 方法。 onLoad: (listener: Function) => void; // 解除绑定 load 事件的监听器。 offLoad: (listener: Function) => void; //绑定 error 事件的监听器。 广告组件拉取广告素材和其他情况下如果发生错误,会触发error事件的监听器。监听器会获得一个包含errCode和errMsg属性的对象参数。 // errCode 详情 onError: (listener: (error: any) => void) => void; // 解除绑定 error 事件的监听器。 offError: (listener: Function) => void; // 绑定 close 事件的监听器。 当用户点击了 Video 广告上的关闭按钮时,会触发close事件的监听器。监听器会获得一个包含isEnded属性的对象参数,表征用户是否完整观看了视频。 onClose: (listener: (res: { isEnded: boolean }) => void) => void; //解除绑定 close 事件的监听器。 offClose: (listener: Function) => void; // destroy(); } const mgtv: any = window['mgtv']; export default class mgtvApi extends MiniGameApiBase { checkScene(successCB?: Function, errorCB?: Function) { throw new Error("Method not implemented."); } navigateToScene(successCB?: Function, errorCB?: Function) { throw new Error("Method not implemented."); } getStorageSync(key?: string) { let data = null; data = sys.localStorage.getItem(key) return data } removeStorage(key?: string) { sys.localStorage.removeItem(key); console.log("removeStorage") } getDeviceInfo() { try { let info = mgtv.getDeviceInfo() console.log("设备信息:", info) console.error("xxxxxxxx") if (info == undefined) return "unknown" let str: string = info.platform let res: RegExpMatchArray = str.match(/ipad/i) console.log("userAgent: ", str) if (res) return "ipad" if (sys.isBrowser && sys.os == sys.OS.IOS) { res = str.match(/iphone/i) if (res) return "iphone" if (window.screen.height > window.screen.width) return "ipad" return "mac" } return "unknown" } catch (error) { return "unknown" } } setUnlockAllTime(time: number) { console.log("setUnlockAllTime") } getUnlockAllTime(call: Function) { console.log("getUnlockAllTime") } setUnitState(state?: string) { console.log("setUnitState") } reportAnalytics(eventName: string, data?: { [key: string]: string | number | boolean; }) { console.log("reportAnalytics") } setSoundInfo(sound?: boolean, music?: boolean) { console.log("setSoundInfo") } protected m_AppId: string = "mg93xxbzti90iuqgp"; protected m_Secret: string = ""; protected m_VideoAdIdIndex: number = 0; protected m_VideoAdIdList: string[] = ["bqixzt3s9wpdfhkj", "uphfj3d5ojv4rsfz", "jt7xyddjrdtuir7m"]; protected m_BannerAdIdIndex: number = 0; protected m_BannerAdId: string[] = []; protected m_InsertAdIdIndex: number = 0; protected m_InsertAdId: string[] = []; protected m_videoAd: mgtvVideoAd = undefined; protected m_BannerAd: any = undefined; validAppId(): void { if (GameCfg.SYSTEM_LOG) console.log("mgtv-api-validAppId"); } ready(): void { if (GameCfg.SYSTEM_LOG) console.log("mgtv-api-ready"); } getUserInfo(params: getUserInfoParams): void { mgtv.getUserInfo(params); } showToast(params: toastParams): void { mgtv.showToast(params); } showLoading(params: loadParams): void { mgtv.showLoading(params); } hideLoading(): void { mgtv.hideLoading(); } showModal(params: ModalParams): void { } authorize(params: authorizeParams): void { params.success && params.success(); } login(params: loginParams): void { mgtv.login(params); } getVideoAdId(): string { const id: string = this.m_VideoAdIdList[this.m_VideoAdIdIndex]; this.m_VideoAdIdIndex++; if (this.m_VideoAdIdIndex >= this.m_VideoAdIdList.length) { this.m_VideoAdIdIndex = 0; } return id; } loadAndShowVideoAd(successCB: () => void, errorCB: (error: any) => void, completeCB?: () => void, reportAnalyticsExplain?: string): void { if (this.m_videoAd == null) { this.m_videoAd = mgtv.createRewardedVideoAd({ adUnitId: this.getVideoAdId() }); } let onClose = (res) => { if (res && res.isEnded) { // 给予奖励 successCB(); // O1HD.getManagers().soundMgr.setSoundEnabled(true); } else { // errorCB('视频中途退出'); // O1HD.getManagers().soundMgr.setSoundEnabled(true); } this.m_videoAd.offClose(onClose); completeCB && completeCB(); }; // this.m_videoAd.load().then(() => { //加载视频广告完成 this.m_videoAd.show().then(() => { //播放视频广告完成 this.m_videoAd.onClose(onClose); // O1HD.getManagers().soundMgr.setSoundEnabled(true); // O1HD.getManagers().soundMgr.playMusic("BGM1"); }).catch((err) => { //播放视频广告错误 errorCB('视频显示错误 :' + JSON.stringify(err)); this.m_videoAd.offClose(onClose); completeCB && completeCB(); }) }).catch((err) => { //加载视频广告错误 errorCB('视频加载错误 :' + JSON.stringify(err)); this.m_videoAd.offClose(onClose); completeCB && completeCB(); }); } getInsertAdId(): string { const id: string = this.m_InsertAdId[this.m_InsertAdIdIndex]; this.m_InsertAdIdIndex++; if (this.m_InsertAdIdIndex >= this.m_InsertAdId.length) { this.m_InsertAdIdIndex = 0; } return id; } showInsertAd(onAdClose: () => void, onFailed: () => void): void { console.log("加抖音 插屏 广告"); const adId = this.getInsertAdId(); let insertAd = mgtv.createInterstitialAd({ adUnitId: adId, }); insertAd.load(); insertAd.onLoad(() => { console.warn('插屏广告 加载完成'); insertAd.show().catch((err) => { console.warn('插屏广告 显示失败 :' + JSON.stringify(err)); insertAd.destroy(); insertAd = null; if (onFailed) { onFailed(); } }); }); insertAd.onError((err) => { console.warn('插屏广告 加载失败' + JSON.stringify(err)); insertAd.destroy(); insertAd = null; if (onFailed) { onFailed(); } }); insertAd.onClose(() => { console.warn('插屏广告 关闭'); if (insertAd != null) { insertAd.destroy(); insertAd = null; } if (onAdClose) { onAdClose(); } }); } protected bannerSuccese: boolean = false; getBannerAdId(): string { const id: string = this.m_BannerAdId[this.m_BannerAdIdIndex]; this.m_BannerAdIdIndex++; if (this.m_BannerAdIdIndex >= this.m_BannerAdId.length) { this.m_BannerAdIdIndex = 0; } return id; } showBannerAD(node: Node, successCB?: () => void, errorCB?: (error: any) => void, onCloseCB?: () => void, setBannerPos?: ({ screenWidth, screenHeight }: { screenWidth: any; screenHeight: any; }) => Vec2): void { const { screenWidth, screenHeight } = mgtv.getSystemInfoSync(); let pos: Vec2 = setBannerPos && setBannerPos({ screenWidth, screenHeight }) || new Vec2(0, 0); var targetBannerAdWidth = 200; if (this.m_BannerAd && !this.bannerSuccese) { this.m_BannerAd.destroy() this.m_BannerAd = null } if (this.m_BannerAd) { this.m_BannerAd.show() .then(() => { successCB && successCB(); console.log("---------------------Banner广告直接显示成功"); }) .catch((err) => { errorCB && errorCB(err); console.log("---------------------Banner广告直接显示组件出现问题", JSON.stringify(err)); }); return } this.bannerSuccese = true if (this.m_BannerAd == null) { this.m_BannerAd = mgtv.createBannerAd({ adUnitId: this.getBannerAdId(), adIntervals: 30, style: { // width: targetBannerAdWidth, // top: screenHeight - (targetBannerAdWidth / 16) * 9, // 根据系统约定尺寸计算出广告高度 left: pos.x, top: pos.y, } });//创建 } this.m_BannerAd.onResize(size => { console.log(size.width, size.height, "banner长宽"); // this.m_BannerAd.style.top = size.height;//screenHeight - size.height; // this.m_BannerAd.style.left = size.width;//(screenWidth - size.width) / 2; // setBannerPosition && setBannerPosition({ x: this.m_BannerAd.style.left, y: this.m_BannerAd.style.top }, // { width: size.width, height: size.height }); }); this.m_BannerAd.onLoad(() => { if (node == null || !node.active || !node.isValid) { console.log("---------------------------------------------------------"); return } this.bannerSuccese = false; this.m_BannerAd .show() .then(() => { console.log("---------------------Banner广告显示成功"); this.m_BannerAd.onHide(() => { console.log('mgtv-banner 广告隐藏'); onCloseCB && onCloseCB(); }); }) .catch((err) => { console.log("---------------------Banner广告组件显示出现问题", JSON.stringify(err)); }); }); this.m_BannerAd.onError((e) => { this.bannerSuccese = false console.log("---------------------Banner广告加载错误,错误原因:", JSON.stringify(e)) }); } hideBanner() { // if (this.m_BannerAd != null) { // this.m_BannerAd.hide(); // } } recordedGameScreenStart(params: recordedGameScreenParams, onStart?: (res: any) => void): void { console.log("mgtv-api-recordedGameScreenStart"); onStart && onStart(null); } recordedGameScreenStop() { console.log("mgtv-api-recordedGameScreenStop"); return true; } shareRecordedGameScreen(successCb?: () => void, failCb?: (e?: any) => void): void { console.log("mgtv-api-shareRecordedGameScreen"); successCb && successCb(); } isHaveRecordedGameScreen(): boolean { return true; } }