1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354 |
- //import AD from "../../../AD/AD";
- import { view } from "cc";
- const global = {
- /**临时处理加的 2020-12-29 */
- latticeAdunit: null,
- /**临时处理加的 2020-12-29 */
- iconCount: null,
- }
- class wechat {
- ////////////////////////////
- // 类成员
- ///////////////////////////
- public static readonly _instance: wechat = new wechat();
- /** 系统信息 */
- private systemInfo: wx.types.SystemInfo = null;
- /** 登录按钮对象 */
- private userInfoButton: UserInfoButton = null;
- /** banner广告对象 */
- private bannerAd: BannerAd = null;
- /** 奖励视频广告对象 */
- private rewardedVideoAd: RewardedVideoAd = null;
- /** 插屏广告对象 */
- private interstitialAd = null;
- /**推荐位广告对象 */
- private RiconAD: iconAd = null;
- private LiconAD: iconAd = null;
- /**格子广告对象 */
- private gridAd: gridAd = null;
- /**格子广告数量 */
- private gridAdCunt: number = null;
- /** 游戏画面录制对象 */
- private GameRecorder: GameRecorder = null;
- /** 录屏开始事件 */
- private startListener: Function = null;
- /** 监听录屏继续事件 */
- private resumeListener: Function = null;
- /** 录屏暂停事件 */
- private pauseListener: Function = null;
- /** 录屏结束事件 */
- private stopListener: Function = null;
- /** 录屏错误事件 */
- private errorListener: Function = null;
- /** 录屏取消事件 */
- private abortListener: Function = null;
- /** 录制时间更新事件。在录制过程中触发该事件 */
- private timeUpdateListener: Function = null;
- /** 游戏圈对象 */
- private gameClub: GameClubButton = null;
- /** 意见反馈按钮 */
- private feedbackButton: FeedbackButton = null;
- /** 切换到前台事件 */
- private showListener: Function = null;
- /** 切换到后台事件 */
- private hideListener: Function = null;
- /** banner广告id */
- private _bannerAdUnitId = ['adunit-941c3f0eb62ccad2', 'adunit-ce3ffa210e8f5f05', 'adunit-fddeec0c74c7429e', 'adunit-68af5dcafd3c0fe1', 'adunit-528b9e05536b7f4f'];
- private _bannerAdObjList: BannerAd[] = [];
- private _bannerShowIndex = 0;
- private _bannerTimer = -1;
- private _bannerAdRefreshTimeOutId: number = 0;
- /** 奖励视频广告id */
- private _rewardedVideoAdUnitId = ['adunit-9eac140dd1f2f777', 'adunit-db982a9d278eb210', 'adunit-d479ce4dfccdf7eb'];
- /** 插屏广告id */
- private _interstitialAdUnitId = ['adunit-eb023b20448e38d9'];
- /**格子广告ID */
- private _latticeAdUnitId = ''
- /**推荐位广告,左右 */
- private _RIconAdunit = ''
- private _LIconAdunit = ''
- /** 登录按钮信息 */
- private mainBannerAD = null;
- private _userInfoButtonData = {
- width: null,
- height: null,
- x: null,
- y: null,
- url: null
- };
- /** 反馈页面的按钮信息 */
- private _feedbackButtonData = {
- width: null,
- height: null,
- x: null,
- y: null,
- url: null
- };
- /** banner广告的像素大小 */
- private _bannerSize = {
- width: 600,
- height: 172
- };
- private _gameClubSize = {
- icon: '',
- x: 0,
- y: 0,
- width: 0,
- height: 0
- };
- private _closeRewardVideoListener: Function = null;
- ////////////////////////////
- // get、set访问器
- ///////////////////////////
- public set RIconAduni(adUnitId: string) {
- this._RIconAdunit = adUnitId;
- }
- public set LIconAduni(adUnitId: string) {
- this._LIconAdunit = adUnitId;
- }
- public set bannerAdUnitId(adUnitId: string) {
- // this._bannerAdUnitId = adUnitId;
- }
- public set rewardedVideoAdUnitId(adUnitId: string) {
- // this._rewardedVideoAdUnitId = adUnitId;
- }
- public set interstitialAdUnitId(adUnitId: string) {
- // this._interstitialAdUnitId = adUnitId;
- }
- public set bannerSize(size: any) {
- this._bannerSize.width = size.width;
- this._bannerSize.height = size.height;
- }
- public set latticeAdUnitId(adUnitId: string) {
- this._latticeAdUnitId = adUnitId;
- }
- public set gameClubSize(size: any) {
- this._gameClubSize.x = size.x;
- this._gameClubSize.y = size.y;
- this._gameClubSize.width = size.width;
- this._gameClubSize.height = size.height;
- this._gameClubSize.icon = size.icon;
- }
- public set userInfoButtonData(data: any) {
- this._userInfoButtonData.width = data.width;
- this._userInfoButtonData.height = data.height;
- this._userInfoButtonData.x = data.x;
- this._userInfoButtonData.y = data.y;
- this._userInfoButtonData.url = data.url;
- }
- public set closeRewardVideoListener(cb: Function) {
- this._closeRewardVideoListener = cb;
- }
- ////////////////////////////
- // get、set访问器
- ///////////////////////////
- public constructor() {
- if (window.wx) {
- // this.registerRecordScreenEvent();
- this.getSystemInfoSync();
- }
- }
- //预加载所有广告
- public preLoadAd() {
- this.createRewardedVideoAd();
- this.preLoadBanner();
- this.createInterstitialAd();
- }
- //预加载所有banner广告
- public preLoadBanner() {
- for (let i = 0; i < this._bannerAdUnitId.length; i++) {
- let id = this._bannerAdUnitId[i];
- let bannerAd = this.createBanner(id);
- this._bannerAdObjList.push(bannerAd);
- }
- }
- private createBanner(id) {
- let bannerSize = {
- // width: this._bannerSize.width / this.systemInfo.pixelRatio,
- // height: this._bannerSize.height / this.systemInfo.pixelRatio
- width: this._bannerSize.width * 0.65,
- height: this._bannerSize.height * 0.35
- };
- // let id = this._bannerAdUnitId[Math.floor(Math.random() * this._bannerAdUnitId.length)];
- let bannerObj = wx.createBannerAd({
- // 广告单元 id
- adUnitId: id,
- // 广告自动刷新的间隔时间,单位为秒,参数值必须大于等于30(该参数不传入时 Banner 广告不会自动刷新)
- adIntervals: 30,
- style: {
- left: this.systemInfo.windowWidth / 2 - bannerSize.width / 2,
- top: this.systemInfo.windowHeight - bannerSize.height + this.systemInfo.windowHeight * 0.1,
- height: bannerSize.height,
- width: bannerSize.width
- }
- });
- // console.log('bannerSize: ', bannerSize, ', systemInfo: ', this.systemInfo, ',this.bannerAd.style: ', this.bannerAd.style);
- bannerObj.onLoad(() => {
- console.log('=====> @framework, banner广告加载成功' + id);
- // 移除setTimeout
- // if (this._bannerAdRefreshTimeOutId != 0) {
- // clearTimeout(this._bannerAdRefreshTimeOutId);
- // this._bannerAdRefreshTimeOutId = 0;
- // }
- // if (isShow) this.bannerAd.show();
- // 延时刷新banner
- // if (refreshTime > 0) {
- // this._bannerAdRefreshTimeOutId = setTimeout(() => {
- // if (this.bannerAd)
- // this.showBannerAd(refreshTime);
- // }, refreshTime * 1000);
- // }
- // next && next(true);
- });
- bannerObj.onError((res) => {
- console.log('=====> @framework, banner广告加载失败:', id);
- // next && next(false);
- });
- bannerObj.onResize((res: { width: number; height: number }) => {
- bannerObj.style.left = this.systemInfo.windowWidth / 2 - res.width / 2 - 0.1;
- bannerObj.style.top = this.systemInfo.windowHeight - res.height + 0.1;
- //AD.setErrNodeY(-((this.bannerAd.style.top * winSize.height / this.systemInfo.windowHeight) - winSize.height / 2));
- });
- return bannerObj;
- }
- ////////////////////////////
- // 登录模块
- ///////////////////////////
- /**
- * 登陆接口
- * @param cbOK
- * @param cbFail
- */
- public wetchatLogin(cbOK, cbFail): void {
- let data = {
- wccode: null,
- wcencrypted: null,
- wciv: null,
- // userInfo: null
- };
- // 获取玩家数据
- let getLoginData = () => {
- this.login((code: any) => {
- data.wccode = code;
- if (cbOK)
- cbOK(code);
- }, (res: any) => {
- data.wcencrypted = res.encryptedData;
- data.wciv = res.iv;
- if (cbFail)
- cbFail(data);
- });
- };
- getLoginData();
- }
- /**
- * @description 获取用户的当前设置。返回值中只会出现小程序已经向用户请求过的权限
- *
- * @param cbDone 登陆成功后回调
- * @param cbFail 登陆失败后回调
- */
- public getSetting(cbDone, cbFail): void {
- if (wechat.isSupportedAPI(wx.getSetting)) {
- wx.getSetting({
- success: (res: { authSetting: wx.types.AuthSetting }) => {
- // if (res.authSetting['scope.userInfo']) {
- // if (cbDone)
- // cbDone(res.authSetting['scope.userInfo']);
- // } else
- // if (cbFail) cbFail("开关无");
- cbDone(res.authSetting['scope.userInfo']);
- },
- fail: (res) => {
- if (cbFail) cbFail(res);
- }
- });
- } else {
- console.error("----> 微信版本不支持getSetting API");
- if (cbFail) cbFail("----> 微信版本不支持getSetting API");
- }
- }
- /**
- * @description 创建用户登录按钮
- */
- public createUserInfoButton(x = 0, y = 0, width = view.getVisibleSize().width, height = view.getVisibleSize().height): void {
- if (wechat.isSupportedAPI(wx.createUserInfoButton)) {
- this.userInfoButton = wx.createUserInfoButton({
- type: 'image',
- // image: this._userInfoButtonData.url,
- style: {
- // left: this.systemInfo.screenWidth * this._userInfoButtonData.x - this._userInfoButtonData.width / 2,
- // top: this.systemInfo.screenHeight * this._userInfoButtonData.y - this._userInfoButtonData.height / 2,
- // width: this._userInfoButtonData.width,
- // height: this._userInfoButtonData.height
- left: x,
- top: y,
- width: view.getVisibleSize().width,
- height: view.getVisibleSize().height
- }
- });
- } else {
- console.log('=====> @framework,当前微信版本过低,无法使用授权按钮,请升级到最新微信版本后重试');
- }
- }
- // /**
- // * 根据node的属性,创建一个授权按钮
- // * @param btnNode
- // * @param cbOk 成功后回调
- // * @param cbFail 失败后回调
- // */
- // public createAuthorizeBtnByNode(btnNode: Node, cbOk?: Function, cbFail?: Function): void {
- // if (!wechat.isSupportedAPI(wx.createUserInfoButton)) {
- // console.log('=====> @framework,当前微信版本过低,无法使用授权按钮,请升级到最新微信版本后重试');
- // return;
- // }
- // this.destroyAuthorizeBtn()
- // let btnSize = size(btnNode.width + 10, btnNode.height + 10);
- // let btnPosI = btnNode.convertToWorldSpaceAR(v2(0, 0));
- // let frameSize = view.getFrameSize();
- // let winSize = director.getWinSize();
- // //适配不同机型来创建微信授权按钮
- // let left = (btnPosI.x - btnSize.width * 0.5) / winSize.width * frameSize.width;
- // let top = (winSize.height - btnPosI.y - btnSize.height * 0.5) / winSize.height * frameSize.height;
- // let width = btnSize.width / winSize.width * frameSize.width;
- // let height = btnSize.height / winSize.height * frameSize.height;
- // this.userInfoButton = wx.createUserInfoButton({
- // type: 'text',
- // text: '',
- // // type: 'image',
- // // image: this._userInfoButtonData.url,
- // style: {
- // left: left,
- // top: top,
- // width: width,
- // height: height,
- // // lineHeight: 0,
- // // backgroundColor: '',
- // // color: '#ffffff',
- // // textAlign: 'center',
- // // fontSize: 16,
- // // borderRadius: 4
- // }
- // })
- // this.onTapUserInfoButton(cbOk, cbFail)
- // }
- public destroyAuthorizeBtn(): void {
- if (this.userInfoButton) {
- this.userInfoButton.destroy();
- this.userInfoButton = null;
- }
- };
- /**
- * @description 监听用户点击登录按钮的事件
- */
- private onTapUserInfoButton(cbOK, cbFail): void {
- if (this.userInfoButton) {
- this.userInfoButton.onTap((res: any) => {
- // 点击登录按钮,用户授权成功
- console.log('onTap', res);
- if (res.userInfo) {
- this.destroyAuthorizeBtn();
- if (cbOK)
- cbOK(res);
- } else {
- cbFail(res);
- }
- });
- } else {
- cbFail(null);
- }
- }
- /**
- * @description 登录游戏服务
- */
- public login(cbOk, cbFail): void {
- wx.login({
- success: (res: { code: string }) => {
- cbOk(res.code);
- },
- fail: () => {
- cbFail();
- }
- });
- }
- /**
- * @description 获取用户信息
- */
- public getUserInfo(resolve?, reject?): void {
- this.getSetting((res: any) => {
- wx.getUserInfo({
- success: (res: any) => {
- if (resolve)
- resolve(res);
- },
- fail: (err) => {
- if (reject)
- reject(err);
- }
- });
- }, (res) => {
- if (reject) {
- console.log(res);
- reject("getsetting 失败");
- }
- })
- }
- ////////////////////////////
- // 分享
- ///////////////////////////
- /**
- * @description 分享,主动拉起转发,进入选择通讯录界面
- * @param _title
- * @param _imageUrl
- * @param _query
- */
- public shareAppMessage(_title: string, _imageUrl: string, _query: string): void {
- wx.shareAppMessage({
- title: _title,
- imageUrl: _imageUrl,
- query: _query
- });
- }
- ////////////////////////////
- // banner广告
- ///////////////////////////
- /**
- * @description 显示banner广告
- * @param refreshTime 自动刷新时间,默认30秒,必须>=30秒;
- */
- public showBannerAd(next?, refreshTime: number = 30) {
- if (!wechat.isSupportedAPI(wx.createBannerAd)) return;
- if (!this.bannerAd) {
- this.createBannerAd(refreshTime, next);
- this.bannerAd.show();
- return;
- }
- else {
- this.bannerAd.show();
- next && next(true);
- }
- }
- //轮流显示banner
- public showBannerTurns(times) {
- if (!wechat.isSupportedAPI(wx.createBannerAd)) return;
- clearInterval(this._bannerTimer);
- this.showBannerNext();
- this._bannerTimer = setInterval(() => {
- this.showBannerNext();
- }, times)
- }
- private showBannerNext() {
- if (this._bannerAdObjList.length <= 0) {
- console.error('zzzzzzz无banner广告');
- return;
- }
- this._bannerAdObjList.forEach(ad => {
- ad.hide();
- })
- this._bannerAdObjList[this._bannerShowIndex].hide();
- this._bannerShowIndex++;
- if (this._bannerShowIndex >= this._bannerAdObjList.length) {
- this._bannerShowIndex = 0;
- }
- let bannerAd = this._bannerAdObjList[this._bannerShowIndex];
- if (bannerAd) {
- bannerAd.show().catch(() => {
- let id = this._bannerAdUnitId[this._bannerShowIndex];
- bannerAd = this.createBanner(id);
- if (bannerAd) {
- bannerAd.show();
- }
- });
- } else {
- let id = this._bannerAdUnitId[this._bannerShowIndex];
- bannerAd = this.createBanner(id);
- if (bannerAd) {
- bannerAd.show();
- }
- }
- }
- /**
- * @description 显示banner广告
- * @param refreshTime 自动刷新时间,默认30秒,必须>=30秒;
- */
- // public showMainBanner(next?, refreshTime: number = 30) {
- // if (!wechat.isSupportedAPI(wx.createBannerAd)) return;
- // if (!this.mainBannerAD) {
- // this.mainCreateBannerAd(refreshTime, next);
- // return;
- // } else {
- // this.mainBannerAD.destroy();
- // this.mainBannerAD = null;
- // this.mainCreateBannerAd(refreshTime, next);
- // return;
- // }
- // }
- /**
- * @description 创建banner广告
- */
- // public mainCreateBannerAd(refreshTime, next?) {
- // console.log("banner width= ", this._bannerSize.width, this._bannerAdUnitId)
- // let bannerSize = {
- // // width: this._bannerSize.width / this.systemInfo.pixelRatio,
- // // height: this._bannerSize.height / this.systemInfo.pixelRatio
- // width: this._bannerSize.width * 0.65,
- // height: this._bannerSize.height * 0.35
- // };
- // this.mainBannerAD = wx.createBannerAd({
- // // 广告单元 id
- // adUnitId: this._bannerAdUnitId,
- // // 广告自动刷新的间隔时间,单位为秒,参数值必须大于等于30(该参数不传入时 Banner 广告不会自动刷新)
- // adIntervals: refreshTime,
- // style: {
- // left: this.systemInfo.windowWidth / 2 - bannerSize.width / 2,
- // top: this.systemInfo.windowHeight - bannerSize.height + this.systemInfo.windowHeight * 0.1,
- // height: bannerSize.height,
- // width: bannerSize.width
- // }
- // });
- // console.log('mainBanner')
- // this.mainBannerAD.onLoad(() => {
- // console.log('=====> @framework, banner广告加载成功');
- // // 移除setTimeout
- // if (this._bannerAdRefreshTimeOutId != 0) {
- // clearTimeout(this._bannerAdRefreshTimeOutId);
- // this._bannerAdRefreshTimeOutId = 0;
- // }
- // this.mainBannerAD.hide();
- // // 延时刷新banner
- // // if (refreshTime > 0) {
- // // this._bannerAdRefreshTimeOutId = setTimeout(() => {
- // // if (this.bannerAd)
- // // this.showBannerAd(refreshTime);
- // // }, refreshTime * 1000);
- // // }
- // next && next(true);
- // });
- // this.mainBannerAD.onError((res) => {
- // console.log('=====> @framework, banner广告加载失败:', res);
- // next && next(false);
- // });
- // // this.mainBannerAD.onResize((res: { width: number; height: number }) => {
- // // this.mainBannerAD.style.left = this.systemInfo.windowWidth / 2 - res.width / 2 - 0.1;
- // // this.mainBannerAD.style.top = this.systemInfo.windowHeight - res.height + 0.1;
- // // AD.setErrNodeY(-((this.bannerAd.style.top * winSize.height / this.systemInfo.windowHeight) - winSize.height / 2));
- // // });
- // }
- /**
- * @description 隐藏banner广告
- */
- public hideBannerAd() {
- if (this.bannerAd) {
- this.bannerAd.hide();
- }
- if (this._bannerAdRefreshTimeOutId != 0) {
- clearTimeout(this._bannerAdRefreshTimeOutId);
- this._bannerAdRefreshTimeOutId = 0;
- }
- clearInterval(this._bannerTimer);
- this._bannerAdObjList.forEach(ad => {
- ad.hide();
- })
- }
- /**
- * @description 销毁banner广告
- */
- public destroyBannerAd() {
- if (this.bannerAd) {
- this.bannerAd.destroy();
- this.bannerAd = null;
- }
- if (this._bannerAdRefreshTimeOutId != 0) {
- clearTimeout(this._bannerAdRefreshTimeOutId);
- this._bannerAdRefreshTimeOutId = 0;
- }
- }
- /**
- * @description 创建banner广告
- */
- public createBannerAd(refreshTime, next?, isShow = true) {
- console.log("banner width= ", this._bannerSize.width, this._bannerAdUnitId)
- let bannerSize = {
- // width: this._bannerSize.width / this.systemInfo.pixelRatio,
- // height: this._bannerSize.height / this.systemInfo.pixelRatio
- width: this._bannerSize.width * 0.65,
- height: this._bannerSize.height * 0.35
- };
- let id = this._bannerAdUnitId[Math.floor(Math.random() * this._bannerAdUnitId.length)];
- this.bannerAd = wx.createBannerAd({
- // 广告单元 id
- adUnitId: id,
- // 广告自动刷新的间隔时间,单位为秒,参数值必须大于等于30(该参数不传入时 Banner 广告不会自动刷新)
- adIntervals: 30,
- style: {
- left: this.systemInfo.windowWidth / 2 - bannerSize.width / 2,
- top: this.systemInfo.windowHeight - bannerSize.height + this.systemInfo.windowHeight * 0.1,
- height: bannerSize.height,
- width: bannerSize.width
- }
- });
- console.log('bannerSize: ', bannerSize, ', systemInfo: ', this.systemInfo, ',this.bannerAd.style: ', this.bannerAd.style);
- this.bannerAd.onLoad(() => {
- console.log('=====> @framework, banner广告加载成功');
- // 移除setTimeout
- if (this._bannerAdRefreshTimeOutId != 0) {
- clearTimeout(this._bannerAdRefreshTimeOutId);
- this._bannerAdRefreshTimeOutId = 0;
- }
- if (isShow) this.bannerAd.show();
- // 延时刷新banner
- // if (refreshTime > 0) {
- // this._bannerAdRefreshTimeOutId = setTimeout(() => {
- // if (this.bannerAd)
- // this.showBannerAd(refreshTime);
- // }, refreshTime * 1000);
- // }
- next && next(true);
- });
- this.bannerAd.onError((res) => {
- console.log('=====> @framework, banner广告加载失败:', res);
- next && next(false);
- });
- this.bannerAd.onResize((res: { width: number; height: number }) => {
- this.bannerAd.style.left = this.systemInfo.windowWidth / 2 - res.width / 2 - 0.1;
- this.bannerAd.style.top = this.systemInfo.windowHeight - res.height + 0.1;
- //AD.setErrNodeY(-((this.bannerAd.style.top * winSize.height / this.systemInfo.windowHeight) - winSize.height / 2));
- });
- }
- ////////////////////////////
- // 奖励广告
- ///////////////////////////
- public showRewardVideoAd() {
- return new Promise((resolve, reject) => {
- this.createRewardedVideoAd();
- if (!this.rewardedVideoAd) {
- console.log('=====> @framework, 奖励视频对象为不存在');
- reject();
- return null;
- }
- this.rewardedVideoAd.load().then(() => {
- this.rewardedVideoAd.show();
- });
- let closeListener = (res: { isEnded: boolean }) => {
- let isComplete: boolean;
- // 小于 2.1.0 的基础库版本,res 是一个 undefined
- if (res && res.isEnded || res === undefined) {
- isComplete = true;
- resolve(isComplete);
- } else {
- isComplete = false;
- resolve(isComplete);
- }
- this.closeRewardVideo();
- this.rewardedVideoAd.offClose(closeListener);
- this.rewardedVideoAd = null;
- this.createRewardedVideoAd();
- };
- let errorListener = (res: { errMsg: string; errCode: number }) => {
- console.log('=====> @framework, 奖励视频发生错误:', res);
- // 再拉一次视频
- this.rewardedVideoAd.load()
- .then(() => {
- return this.rewardedVideoAd.show();
- })
- .then(() => {
- this.rewardedVideoAd.offError(errorListener);
- })
- .catch(() => {
- reject();
- this.rewardedVideoAd.offError(errorListener);
- });
- };
- this.rewardedVideoAd.onClose(closeListener);
- this.rewardedVideoAd.onError(errorListener);
- });
- }
- /**
- * @description 创建奖励视频单例(小游戏端是全局单例)
- */
- private createRewardedVideoAd(): void {
- if (!wx.createRewardedVideoAd) {
- console.log('=====> @framework,当前微信版本过低,无法使用奖励视频功能,请升级到最新微信版本后重试');
- return;
- }
- if (this.rewardedVideoAd) {
- return;
- }
- let id = Math.floor(Math.random() * this._rewardedVideoAdUnitId.length);
- this.rewardedVideoAd = wx.createRewardedVideoAd({
- adUnitId: this._rewardedVideoAdUnitId[id]
- });
- this.rewardedVideoAd.onLoad(() => {
- console.log('=====> @framework, 加载视频广告成功');
- });
- this.rewardedVideoAd.onError(() => {
- console.log('=====> @framework, 加载视频广告失败');
- })
- }
- private closeRewardVideo(): void {
- if (this._closeRewardVideoListener) {
- this._closeRewardVideoListener();
- }
- }
- ////////////////////////////
- // 插屏广告
- ///////////////////////////
- public showInterstitialAd(closeCb?): void {
- if (!wx.createInterstitialAd) {
- console.log('=====> @framework,当前微信版本过低,无法使用插屏广告功能,请升级到最新微信版本后重试');
- return;
- }
- this.createInterstitialAd();
- console.log("----> 显示插屏广告");
- this.interstitialAd.show();
- this.interstitialAd.onError((res) => {
- console.log('=====> @framework,插屏创建失败: ', res);
- closeCb && closeCb();
- });
- this.interstitialAd.onClose(res => {
- this.interstitialAd = null;
- console.log('----> 插屏 广告关闭')
- closeCb && closeCb();
- this.interstitialAd = null;
- this.createInterstitialAd();
- })
- }
- private createInterstitialAd() {
- if (!this.interstitialAd) {
- let id = this._interstitialAdUnitId[Math.floor(Math.random() * this._interstitialAdUnitId.length)];
- this.interstitialAd = wx.createInterstitialAd({
- adUnitId: id
- });
- this.interstitialAd.onLoad(() => {
- console.log('=====> @framework,插屏创建成功');
- });
- // this.interstitialAd.onError(() => {
- // console.log('=====> @framework,插屏创建失败');
- // });
- }
- }
- ////////////////////////////
- // 游戏圈
- ///////////////////////////
- /**
- * @description 创建微信游戏圈
- */
- public createGameClubButton(): void {
- // 微信圈是用户必要的功能,不需求弹出提示
- if (!wx.createGameClubButton) {
- console.log('=====> @framework,当前微信版本过低,无法使用游戏圈功能,请升级到最新微信版本后重试');
- return;
- }
- if (this.gameClub) {
- return;
- }
- this.gameClub = wx.createGameClubButton({
- icon: this._gameClubSize.icon,
- style: {
- left: this._gameClubSize.x / this.systemInfo.pixelRatio,
- top: this._gameClubSize.y / this.systemInfo.pixelRatio,
- width: this._gameClubSize.width,
- height: this._gameClubSize.height
- }
- });
- this.gameClub.hide();
- console.log('gameClub', this.gameClub);
- }
- /**
- * @description 显示微信游戏圈
- */
- public showGameClub(): void {
- console.log('显示游戏圈:', this.gameClub);
- this.createGameClubButton();
- if (this.gameClub) {
- this.gameClub.show();
- console.log('显示游戏圈成功');
- }
- }
- /**
- * @description 隐藏微信游戏圈
- */
- public hideGameClub(): void {
- if (this.gameClub) {
- this.gameClub.hide();
- }
- }
- ////////////////////////////
- // 开放数据域
- ///////////////////////////
- /**
- * @description 向开放数据域发送消息
- * @param msg 要发送的消息,message 中及嵌套对象中 key 的 value 只能是 primitive value。即 number、string、boolean、null、undefined
- */
- public postMessage(msg: any, info?: any): void {
- let data = {
- message: '',
- value: info
- }
- data.message = msg;
- data.value = info;
- console.log('发送信息: ', data);
- wx.getOpenDataContext().postMessage(data);
- }
- ////////////////////////////
- // 意见反馈
- ///////////////////////////
- /**
- * @description 创建打开意见反馈页面的按钮, 默认使用图片按钮的形式创建
- */
- public createFeedbackButton(cbOk, cbFail): void {
- if (wechat.isSupportedAPI(wx.createFeedbackButton)) {
- this.feedbackButton = wx.createFeedbackButton({
- type: 'image', // 按钮的类型.支持text、image
- image: this._feedbackButtonData.url,
- style: {
- left: this._feedbackButtonData.x, // 左上角横坐标
- top: this._feedbackButtonData.y, // 左上角纵坐标
- width: this._feedbackButtonData.width, // 宽度
- height: this._feedbackButtonData.height // 高度
- }
- });
- cbOk(this.feedbackButton);
- } else {
- console.log('=====> @framework,当前微信版本过低,无法使用反馈按钮,请升级到最新微信版本后重试');
- cbFail();
- }
- }
- /**
- * @description 监听意见反馈按钮的点击事件(在创建意见反馈按钮后,立即执行该函数,注册点击事件),只能使用一次
- */
- public onTapFeedbackButton(cbOk, cbFail): void {
- if (this.feedbackButton) {
- this.feedbackButton.onTap(() => {
- cbOk();
- });
- } else {
- cbFail();
- }
- }
- /**
- * @description 显示意见反馈按钮
- */
- public showFeedbackButton(): void {
- if (this.feedbackButton) {
- this.feedbackButton.show();
- }
- }
- /**
- * @description 隐藏意见反馈按钮
- */
- public hideFeedbackButton(): void {
- if (this.feedbackButton) {
- this.feedbackButton.hide();
- }
- }
- ////////////////////////////
- // 录屏
- ///////////////////////////
- /**
- * @description 获取全局唯一的游戏画面录制对象
- */
- public getGameRecorder(cbOk, cbFail): void {
- if (wechat.isSupportedAPI(wx.getGameRecorder)) {
- this.GameRecorder = wx.getGameRecorder();
- cbOk();
- } else {
- cbFail();
- }
- }
- public registerRecordScreenEvent(): void {
- if (!wechat.isSupportedAPI(wx.getGameRecorder)) {
- console.log('=====> @framework,当前客户端版过低,无法使用录制功能,请升级到最新客户端版本后重试');
- return;
- }
- this.GameRecorder = wx.getGameRecorder();
- // 监听录屏继续事件
- this.GameRecorder.on('start', (res: { currentTime?: number; error?: { code: number; message: string }; duration?: number }) => {
- if (this.resumeListener) {
- this.resumeListener();
- }
- });
- // 监听录屏暂停事件
- this.GameRecorder.on('pause', (res: { currentTime?: number; error?: { code: number; message: string }; duration?: number }) => {
- if (this.pauseListener) {
- this.pauseListener();
- }
- });
- // 监听录屏结束事件。可以通过 onStop 接口监听录屏结束事件,获得录屏地址
- this.GameRecorder.on('stop', (res: { currentTime?: number; error?: { code: number; message: string }; duration?: number }) => {
- if (this.stopListener) {
- console.log('视频的时长:', res.duration);
- this.stopListener(res.duration);
- }
- });
- // 监听录屏错误事件
- this.GameRecorder.on('error', (res: { currentTime?: number; error?: { code: number; message: string }; duration?: number }) => {
- console.log('=====> @framework,录屏错误:', res.error.message, ',code: ', res.error.code);
- if (this.errorListener) {
- this.errorListener();
- }
- });
- // 录制时间更新事件。在录制过程中触发该事件
- this.GameRecorder.on('timeUpdate', (res: { currentTime?: number; error?: { code: number; message: string }; duration?: number }) => {
- console.log('=====> @framework,录屏到第几秒:', res.currentTime);
- if (this.timeUpdateListener) {
- this.timeUpdateListener();
- }
- });
- // 录制取消事件
- this.GameRecorder.on('abort', (res: { currentTime?: number; error?: { code: number; message: string }; duration?: number }) => {
- if (this.abortListener) {
- this.abortListener();
- }
- });
- }
- /**
- * @description 开始录屏
- * @param callback
- */
- public startRecordScreen(callback?: Function): void {
- return
- this.startListener = callback;
- this.GameRecorder.start({
- fps: 24,
- duration: 7200,
- bitrate: 1000,
- gop: 12
- });
- }
- /**
- * @description 暂停录屏
- */
- public pauseRecordScreen(callback?: Function): void {
- this.pauseListener = callback;
- this.GameRecorder.pause();
- }
- /**
- * @description 恢复录制游戏画面
- * @param callback
- */
- public resumeRecordScreen(callback?: Function): void {
- this.resumeListener = callback;
- this.GameRecorder.resume();
- }
- /**
- * @description 结束录制游戏画面。结束录制后可以发起分享
- * @param callback
- */
- public stopRecordScreen(callback?: Function): void {
- this.stopListener = callback;
- this.GameRecorder.stop();
- }
- /**
- * @description 放弃录制游戏画面。此时已经录制的内容会被丢弃
- * @param callback
- */
- public abortRecordScreen(callback?: Function): void {
- this.abortListener = callback;
- this.GameRecorder.abort();
- }
- public createGameRecorderShareButton(): void {
- }
- ////////////////////////////
- // 其他能力
- ///////////////////////////
- /**
- * 监听小游戏回到前台的事件
- * @param callbak
- */
- public onShow(callbak): void {
- this.showListener = callbak;
- wx.onShow(this.onShowListener.bind(this));
- }
- /**
- * @description 取消监听小游戏回到前台的事件
- */
- public offShow(): void {
- wx.offShow(this.onShowListener);
- }
- /**
- * @description 监听小游戏隐藏到后台事件。锁屏、按 HOME 键退到桌面、显示在聊天顶部等操作会触发此事件
- * @param callbak
- */
- public onHide(callbak): void {
- this.hideListener = callbak;
- wx.onHide(this.onHideListener.bind(this));
- }
- /**
- * @description 取消监听小游戏隐藏到后台事件
- */
- public offHide(): void {
- this.hideListener = null;
- wx.offHide(this.onHideListener);
- }
- public onShowListener(res): void {
- if (this.showListener) {
- this.showListener(res);
- }
- }
- public onHideListener(): void {
- if (this.hideListener) {
- this.hideListener();
- }
- }
- /**
- * @description 打开另一个小程序
- * @param _appId
- * @param _path
- */
- public navigateToMiniProgram(_appId: string, _path: string, cbOk, cbFail): void {
- if (wechat.isSupportedAPI(wx.navigateToMiniProgram)) {
- wx.navigateToMiniProgram({
- appId: _appId,
- path: _path,
- envVersion: 'release',
- success: () => {
- cbOk();
- },
- fail: () => {
- cbFail();
- },
- complete: () => {
- }
- });
- } else {
- cbFail();
- }
- }
- ////////////////////////////
- // 震动
- ///////////////////////////
- /**
- * 使手机发生较长时间的振动。
- */
- /**
- * 使手机发生较长时间的振动。
- * @param cb 回调
- */
- public vibrateLong(cb?: Function): void {
- if (cb)
- console.warn("----> vibrateLong 微信可能没有cb");
- wx.vibrateLong();
- };
- /**
- * 使手机发生较短时间的振动
- * @param cb 回调
- */
- public vibrateShort(cb?: Function): void {
- console.warn("----> vibrateShort 微信可能没有cb");
- wx.vibrateShort();
- };
- ////////////////////////////
- // 通用
- ///////////////////////////
- /**
- * @description 获取系统信息
- */
- public getSystemInfoSync(): void {
- this.systemInfo = wx.getSystemInfoSync();
- }
- /**
- * @description 是否支持改API
- * @param api
- */
- private static isSupportedAPI(api: any): boolean {
- if (api) {
- return true;
- } else {
- wx.showModal({
- title: '提示',
- content: '当前微信版本过低,无法使用该功能,请升级到最新微信版本后重试。'
- });
- return false;
- }
- }
- /**
- * 退出小程序
- * @param cb
- */
- public exitMiniProgram(cb: any): void {
- wx.exitMiniProgram(cb);
- };
- /**
- * 显示灰色背景的消息提示框
- * @param title 内容
- * @param duration 提示框停留时间,单位ms
- * @param callback 成功后回调
- */
- public showToast(title: string, duration: number = 3000, callback?: Function): void {
- wx.showToast({
- title: title,
- duration: duration,
- success: () => {
- if (callback) callback();
- }
- });
- };
- /**
- * 获取系统信息
- * @param callback 成功后回调
- */
- public getSystemInfo(callback?: Function): void {
- wx.getSystemInfo({
- success: (res) => {
- if (callback) callback(res);
- }
- });
- };
- /**
- * 阿拉丁事件
- * @param str
- * @param objOrStr {key:string,value:string}
- */
- public aldSendEvent(str, objOrStr?): void {
- console.log('send msg: ', str);
- if (wx.aldSendEvent) {
- if (objOrStr)
- wx.aldSendEvent(str);
- else
- wx.aldSendEvent(str, objOrStr);
- } else
- console.error("----> 阿拉丁接入失败,请检查game.js");
- }
- /**
- * 创建供量主广告实例
- */
- public createIconAd() {
- let styleItemArray = [...Array(global.iconCount + 1).map((_, i) => ({
- appNameHidden: false,
- color: 'white',
- size: 100,
- borderWidth: 100,
- borderColor: 'white',
- left: 100 * i,
- top: 100,
- }))]
- // 创建推荐位实例,提前初始化
- this.LiconAD = wx.createGameIcon({
- adUnitId: this._LIconAdunit,
- count: global.iconCount,
- style: styleItemArray
- })
- // this.RiconAD = wx.createGameIcon({
- // adUnitId:this._RIconAdunit,
- // count:global.iconCount,
- // style:styleItemArray
- // })
- this.LiconAD.onError((res) => {
- console.log('=====> @framework, 小游戏推荐左边icon加载失败:', res);
- //next && next(false);
- });
- this.LiconAD.onLoad(() => {
- console.log('=====> @framework, 小游戏推荐左边icon加载成功');
- })
- // this.RiconAD.onError((res)=>{
- // console.log('=====> @framework, 小游戏推荐右边icon加载失败:',res);
- // //next && next(false);
- // });
- // this.RiconAD.onLoad(()=>{
- // console.log('=====> @framework, 小游戏推荐右边icon加载成功');
- // })
- this.LiconAD.onResize(size => {
- //偶数 自适应排位置
- var starTop = 0;
- if (global.iconCount % 2 === 0) {
- starTop = this.systemInfo.windowHeight / 2 - global.iconCount / 2 * size[0].height;
- } else {
- starTop = this.systemInfo.windowHeight / 2 - global.iconCount / 2 * size[0].height + size[0].height / 2;
- }
- for (let i = 0; i < size.length; i++) {
- size[i].left = 10
- size[i].top = starTop + (72 * i);
- }
- })
- //同一时间只能展示一个,放弃右边的
- // this.RiconAD.onResize(size =>{
- // //偶数 自适应排位置
- // var starTop = 0;
- // if(global.iconCount%2 === 0){
- // starTop = this.systemInfo.windowHeight/2 - global.iconCount/2*size[0].height;
- // }else{
- // starTop = this.systemInfo.windowHeight/2 - global.iconCount/2*size[0].height+size[0].height/2;
- // }
- // for (let i = 0; i < size.length; i++) {
- // size[i].left = this.systemInfo.windowWidth-10
- // size[i].top = starTop + (72*i);
- // }
- // })
- }
- /**
- * 显示小游戏推荐广告
- */
- public showIconAd(dir: string) {
- if (dir == 'R') {
- if (this.RiconAD) {
- this.RiconAD.load().then(() => {
- this.RiconAD.show()
- }).catch((err) => {
- console.error(err)
- })
- } else {
- setTimeout(this.createIconAd, 1000)
- }
- } else {
- if (this.LiconAD) {
- this.LiconAD.load().then(() => {
- this.LiconAD.show()
- }).catch((err) => {
- console.error(err)
- })
- } else {
- setTimeout(this.createIconAd, 1000)
- }
- }
- }
- /**创建格子广告 */
- public createGridAd(count: number) {
- this.gridAd = wx.createGridAd({
- adUnitId: global.latticeAdunit,
- adTheme: 'white',
- gridCount: count,
- adIntervals: 30,
- style: {
- left: 0,
- top: this.systemInfo.windowHeight / 2 - 350,
- width: 500,
- opacity: 0.8
- }
- })
- this.gridAd.onLoad(() => {
- console.log('=====> @framework, 格子广告加载成功');
- this.gridAdCunt = count;
- });
- this.gridAd.onError((res) => {
- console.log('=====> @framework, 格子广告加载失败:', res);
- });
- }
- /**显示格子广告 */
- public showGridAd(count: number) {
- //数量不一样的时候重新创建格子
- if (count != this.gridAdCunt) {
- if (this.gridAd) {
- this.gridAd.destroy();
- }
- this.createGridAd(count);
- }
- this.gridAd.show();
- }
- /**隐藏格子广告 */
- public hideGridAd() {
- this.gridAd.hide();
- }
- /**
- * 显示转发和分享到朋友圈
- * @param bool 是否使用带 shareTicket 的转发详情
- */
- public showShareMenu(bool: boolean = false) {
- if (window.wx) {
- wx.showShareMenu({
- withShareTicket: bool,
- menus: ['shareAppMessage', 'shareTimeline']
- })
- }
- }
- }
- export const Wechat = wechat._instance;
|