import { Adapter } from "../adapter/Adapter"; import { Constants } from "../data/Constants"; const WX_CONFIG = { AD_ID: { /** banner广告 */ banner: 'adunit-fa7b08ac6d8cf200', /** 视频广告 */ video: 'adunit-29b5f0955ee77f59', /** 插屏广告 */ interstitial: 'adunit-a3615ebe31eba64a', /** 原生模板多个格子广告 */ multiGridCustom: 'adunit-xxx', /** 原生模版单格格子广告 */ sigleGridCustom: 'adunit-d4f43001efd879de', } } const delayTime: number = 1900; class PlatformWX { private _onHideTime: number = Infinity; private _rewardVideo: wx.RewardedVideoAd; private _bannerAd: wx.BannerAd; private _interstitialAd: any; private _customAd: any; private _sigleCustomAd: any; private _shareSuccessHandler: Function = null; private _videoSuccessHandler: Function = null; private _customAdCloseHandler: Function = null; private _showInterstitialAdTime: number = null; private _shareModalIsActive: boolean = false; private _shareStr: string = "东北F4来到美国西部拓荒时代,保卫城镇,完成自我救赎。"; public initialize(): void { console.log("初始化微信框架"); wx.showShareMenu({ withShareTicket: true, menus: ['shareAppMessage', 'shareTimeline'], success: () => { }, fail: () => { }, complete: () => { } }); //发送给朋友 wx.onShareAppMessage(function(){ wx.shareAppMessage({ imageUrl: "share.jpg", title: this._shareStr, query: 'shareMsg='+'a=1', }); }.bind(this)); wx.onShow((res: { scene: string; query: any; shareTicket: string; referrerInfo: wx.ReferrerInfo; }) => { if (this._shareSuccessHandler == null) return; if (this._shareModalIsActive) return; if (Date.now() - this._onHideTime >= delayTime) { if (this._shareSuccessHandler) this._shareSuccessHandler(true); } else { wx.showModal({ title: '分享提示', content: '成功分享到群即可获得奖励', success: (res) => { if (res.confirm) { this.shareShowReward(this._shareSuccessHandler(false)); } else if (res.cancel) { this._shareSuccessHandler = null; } this._shareModalIsActive = false; } }); this._shareModalIsActive = true; } this._onHideTime = Infinity; }); //this.__createBannerAd(); this.__createVideoAd(); //this.__createCustomAd(); //this.__createSigleCustomAd(); //this.__createInterstitialAd(); //this.__customAdExist(); //this.__customSigleAdExist(); } public showToast(param: { title: string, icon?: 'success' | 'loading' | 'none', image?: string, duration?: number, mask?: boolean, success?: (res?: any) => void, fail?: (res?: any) => void, complete?: (res?: any) => void }): void { let finalParam = { title: '', icon: 'none', duration: 2000, } as any; Object.assign(finalParam, param); wx.showToast(finalParam); } public shareAppMessage(param: { title?: string, imageUrl?: string, query?: string, imageUrlId?: string } = {}): void { wx.shareAppMessage(param); } public vibrateShort(param: any = {}): void { wx.vibrateShort(param); } public vibrateLong(param: any = {}): void { wx.vibrateLong(param); } /** * 是否支持添加桌面 * @returns */ public isSupportDesk(){ //@ts-ignore if (wx.canAddToFavorites) { return true; }else{ return false; } } //添加到桌面 public addDesk(){ //@ts-ignore if (wx.canAddToFavorites) { //@ts-ignore wx.canAddToFavorites({ success(res) { if (res.canAdd) { //可以添加到桌面 //@ts-ignore wx.addToFavorites({ // 小程序的相关信息 title: Constants.gameName, query: '', // 可以携带参数 success() { this.showToast({title: '添加到桌面成功'}); }, fail(err) { this.showToast({title: '添加到桌面失败', err}); } }); } else { // 不支持添加到桌面 this.showToast({title: '当前环境不支持添加到桌面'}); } }, fail(err) { this.showToast({title: '检查添加到桌面权限失败', err}); } }); } else { this.showToast({title: "当前环境不支持添加到桌面"}); } } //分享 public shareShowReward(handler: Function = null): void { if(handler){ this._shareSuccessHandler = handler; } this._onHideTime = Date.now(); this.shareAppMessage({ imageUrl: "share.jpg", title: this._shareStr, query: 'shareMsg='+'a=1', }); } public showRewardVideo(handler: Function = null): void { //console.log('当日视频次数: ', ArchiveSystem.localData.videoRewardTimesToday); /*if (ArchiveSystem.localData.videoRewardTimesToday % 2 === 1) { cc.log(ArchiveSystem.localData.videoRewardTimesToday, '转为分享'); this.__turnVideoToShare(handler); return; }*/ if (!this._rewardVideo) { this.__turnVideoToShare(handler); return; } this._videoSuccessHandler = handler; this._rewardVideo .show() .then(() => { console.log("视频播放成功"); }) .catch(err => { this._rewardVideo.load() .then(() => { this._rewardVideo .show() .then(() => { console.log("视频重新加载,播放成功"); }); }) .catch(err2 => { this._videoSuccessHandler?.(false); this.shareShowReward(handler); this._videoSuccessHandler = null; }); }); } public showBannerAd(): void { if (!this._bannerAd) return; const { screenWidth, screenHeight } = wx.getSystemInfoSync(); this._bannerAd.show() .then(() => { this._bannerAd.style.left = (screenWidth - this._bannerAd.style.realWidth) / 2; this._bannerAd.style.top = screenHeight - this._bannerAd.style.realHeight; }).catch((e: any) => { console.log('banner广告显示出错', e); }); } public hideBannerAd(recreate: boolean = false): void { if (!this._bannerAd) return; this._bannerAd.hide(); if (recreate) { this.refreshBannerAd(); } } public refreshBannerAd(): void { if (!this._bannerAd) return; this._bannerAd.destroy(); this.__createBannerAd(); } public showInterstitialAd(force: boolean = false): void { if(force){ if (!this._interstitialAd) return; this._interstitialAd.show(); }else{ if (!this._interstitialAd) return; let timeNow = Date.now(); if (this._showInterstitialAdTime == null) { this._showInterstitialAdTime = timeNow; return; } if (timeNow - this._showInterstitialAdTime > 120 * 1000) { this._interstitialAd.show(); this._showInterstitialAdTime = timeNow; } } } public showCustomAd(close: Function): void { if (!this._customAd) return; this._customAdCloseHandler = close; this._customAd .show() .catch((e: any) => { console.log('原生广告显示出错', e); }); } public hideCustomAd(): void { if (!this._customAd) return; this._customAd .hide() .catch((e: any) => { console.log('原生广告隐藏出错', e); }); } public showSigleCustomAd(): void { if (!this._sigleCustomAd || false) return; this._sigleCustomAd .show() .catch((e: any) => { console.log('原生当个格子广告显示出错', e); }); } public hideSigleCustomAd(): void { if (!this._sigleCustomAd || false) return; this._sigleCustomAd .hide() .catch((e: any) => { console.log('隐藏单个格子广告出错', e); }); } /**单个格子广告*/ public __customSigleAdExist(): void { if(!this._sigleCustomAd){ this.__createSigleCustomAd(); } this._sigleCustomAd.show() .then(() => { if(this._sigleCustomAd.isShow()){ this.hideSigleCustomAd(); } }) .catch((res) => { if(this._sigleCustomAd.isShow()){ this.hideSigleCustomAd(); } }); } /**多个格子广告*/ public __customAdExist(): void { if(!this._customAd){ this.__createCustomAd(); } this._customAd.show() .then(() => { if(this._customAd.isShow()){ this.hideCustomAd(); } }) .catch((res) => { if(this._customAd.isShow()){ this.hideCustomAd(); } }); } public exitGame(): void { wx.exitMiniProgram({}); } private __createVideoAd(): void { if (!WX_CONFIG.AD_ID.video) return; this._rewardVideo = wx.createRewardedVideoAd({ adUnitId: WX_CONFIG.AD_ID.video }); // 注册视频的onClose事件 this._rewardVideo.onClose(res => { if (res && res.isEnded || res === undefined) { this._videoSuccessHandler?.(true); } else { this.showToast({ title: "完整观看视频才有奖励哦" }); this._videoSuccessHandler?.(false); } this._videoSuccessHandler = null; }); // 注册视频的onError事件 this._rewardVideo.onError(res => { this._videoSuccessHandler?.(false); this.showToast({ title: "暂时没有可观看的视频" }); this.shareShowReward(this._videoSuccessHandler); this._videoSuccessHandler = null; }); } private __createBannerAd(): void { if (!WX_CONFIG.AD_ID.banner) return; let info = wx.getSystemInfoSync(); let f = Adapter.isNormalScreen(); let w = f ? info.screenWidth * 0.85 : info.screenWidth * 0.85; this._bannerAd = wx.createBannerAd({ adUnitId: WX_CONFIG.AD_ID.banner, adIntervals: 48, style: { left: 0, top: info.screenHeight, width: w, height: 70 //w * (f ? 0.48 : 0.5) //原始0 } }); this._bannerAd.onError(err => { switch (err.errCode) { case 1001: { break; } case 1004: { break; } } }); this._bannerAd.onResize(() => {}); } private __createInterstitialAd(): void { if (!WX_CONFIG.AD_ID.interstitial) return; this._interstitialAd = wx.createInterstitialAd({ adUnitId: WX_CONFIG.AD_ID.interstitial }); } private __createCustomAd(): void { if (!WX_CONFIG.AD_ID.multiGridCustom) return; let info = wx.getSystemInfoSync(); this._customAd = wx.createCustomAd({ adUnitId: WX_CONFIG.AD_ID.multiGridCustom, adIntervals: 60, style: { left: 0, top: info.screenHeight * 0.16, with: info.screenWidth * 0.9 } }); if(this._customAd){ this._customAd.onHide(res => { if(this._customAdCloseHandler){this._customAdCloseHandler()}; }); this._customAd.onError(err => { switch (err.errCode) { case 1001: { break; } case 1004: { break; } } }); } } private __createSigleCustomAd(): void { if (!WX_CONFIG.AD_ID.sigleGridCustom) return; let info = wx.getSystemInfoSync(); let f = Adapter.isNormalScreen(); this._sigleCustomAd = wx.createCustomAd({ adUnitId: WX_CONFIG.AD_ID.sigleGridCustom, adIntervals: 60, style: { left: info.screenWidth * 0.49, top: info.screenHeight * 0.038 + (f ? 20 : 35) } }); this._sigleCustomAd.onError(err => { console.log('展示格子广告失败1'); }); } private __turnVideoToShare(handler: Function): void { this.shareShowReward(handler); this._videoSuccessHandler = null; } } export default new PlatformWX();