昂,我也遇到过这个问题,视频的回调就如同一条链式的,每onClose一次,就给加上了一个……
视频广告回调问题 设计得比较差我自己封装个激励视频的方法 可是却有一个问题,比如 我先调A用该方法,得到正确的adClose回调结果 当我在之后的逻辑B处再调用该方法时,A的回调也会被执行 请问 onClose 是有一个回调队列吗? 看文档有一个 offClose方法, 可是onClose使用的是匿名函数, 我该如何offClose? 或者说 为什么 onClose要是一个回调队列? 我的方法如下:[代码]// 创建视频广告[代码][代码] [代码][代码]public CreateRewardedVideoAd(id:string, adClose:(end:boolean,param:any)=>void,param:any,thisObj:any) :void[代码][代码] [代码][代码]{[代码][代码] [代码][代码]if[代码][代码](cc.sys.platform == cc.sys.WECHAT_GAME)[代码][代码] [代码][代码]{[代码][代码] [代码][代码]if[代码][代码](id==[代码][代码]""[代码][代码])[代码][代码] [代码][代码]{[代码][代码] [代码][代码]if[代码][代码](adClose!=[代码][代码]null[代码][代码])[代码][代码] [代码][代码]{[代码][代码] [代码][代码]adClose.call(thisObj,[代码][代码]true[代码][代码],param);[代码][代码] [代码][代码]}[代码][代码] [代码][代码]return[代码][代码];[代码][代码] [代码][代码]}[代码] [代码] [代码][代码]if[代码][代码]([代码][代码]this[代码][代码].rewardedVideoAd==[代码][代码]null[代码][代码])[代码][代码] [代码][代码]{[代码][代码] [代码][代码]this[代码][代码].rewardedVideoAd = wx.createRewardedVideoAd({[代码][代码] [代码][代码]adUnitId: id,[代码][代码] [代码][代码]});[代码][代码] [代码][代码]}[代码] [代码] [代码][代码]var[代码] [代码]self = [代码][代码]this[代码][代码]; [代码][代码] [代码][代码]if[代码][代码]([代码][代码]this[代码][代码].rewardedVideoAd==[代码][代码]null[代码] [代码]|| [代码][代码]this[代码][代码].rewardedVideoAd == undefined)[代码][代码] [代码][代码]{[代码][代码] [代码][代码]if[代码][代码](adClose!=[代码][代码]null[代码][代码])[代码][代码] [代码][代码]{[代码][代码] [代码][代码]adClose.call(thisObj,[代码][代码]false[代码][代码],param);[代码][代码] [代码][代码]}[代码][代码] [代码][代码]return[代码][代码];[代码][代码] [代码][代码]}[代码] [代码] [代码][代码]// 设置事件回调[代码][代码] [代码][代码]this[代码][代码].rewardedVideoAd.onClose(res => {[代码][代码] [代码][代码]// 用户点击了【关闭广告】按钮[代码][代码] [代码][代码]// 小于 2.1.0 的基础库版本,res 是一个 undefined[代码][代码] [代码][代码]console.log([代码][代码]"VideoAd: "[代码] [代码]+ res);[代码][代码] [代码][代码]if[代码] [代码](res && res.isEnded || res === undefined)[代码][代码] [代码][代码]{[代码][代码] [代码][代码]// 正常播放结束,可以下发游戏奖励[代码][代码] [代码][代码]if[代码][代码](adClose!=[代码][代码]null[代码][代码])[代码][代码] [代码][代码]{[代码][代码] [代码][代码]adClose.call(thisObj,[代码][代码]true[代码][代码],param);[代码][代码] [代码][代码]}[代码][代码] [代码][代码]}[代码][代码] [代码][代码]else[代码][代码] [代码][代码]{[代码][代码] [代码][代码]// 播放中途退出,不下发游戏奖励[代码][代码] [代码][代码]if[代码][代码](adClose!=[代码][代码]null[代码][代码])[代码][代码] [代码][代码]{[代码][代码] [代码][代码]adClose.call(thisObj,[代码][代码]false[代码][代码],param);[代码][代码] [代码][代码]}[代码][代码] [代码][代码]}[代码][代码] [代码][代码]});[代码] [代码] [代码][代码]this[代码][代码].rewardedVideoAd.load()[代码][代码] [代码][代码].then(() => self.rewardedVideoAd.show())[代码][代码] [代码][代码].[代码][代码]catch[代码][代码](err => console.log(err.errMsg));[代码][代码] [代码][代码]}[代码][代码] [代码][代码]else[代码][代码] [代码][代码]{[代码][代码] [代码][代码]if[代码][代码](adClose!=[代码][代码]null[代码][代码])[代码][代码] [代码][代码]{[代码][代码] [代码][代码]adClose.call(thisObj,[代码][代码]true[代码][代码],param);[代码][代码] [代码][代码]}[代码][代码] [代码][代码]}[代码][代码] [代码][代码]}[代码]
2018-12-11