收藏
回答

视频广告回调问题 设计得比较差

我自己封装个激励视频的方法

可是却有一个问题,比如 我先调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-10-06
回答关注问题邀请回答
收藏

3 个回答

  • 大卷子
    大卷子
    2018-12-11

    昂,我也遇到过这个问题,视频的回调就如同一条链式的,每onClose一次,就给加上了一个……

    2018-12-11
    有用 1
    回复
  • 飘雪
    飘雪
    2018-10-08

    A的可以先offcolse 空的实体函数,再监听B的。可以避免同时回调的问题,设计的广告回调用着就是不方便

    2018-10-08
    有用 1
    回复
  • 2018-10-08

    谢谢,我已经使用该方法解决了问题   但是这个API的设计真的叫人看不懂呀

    2018-10-08
    有用
    回复 2
    • Kan\\透
      Kan\\透
      2018-10-30

      你好楼主,offcolse这个方法要怎么调用呢


      2018-10-30
      回复
    • 2018-11-13回复Kan\\透

      像下面这样调用


      // 设置关闭事件回调

      this.rewardedVideoAd.onClose(res => {


      if(self.rewardedVideoAd==null) return;

      self.rewardedVideoAd.offClose();

      //...........

      });


      不好意思,好久没有登录 回答有点 晚了

      2018-11-13
      回复
登录 后发表内容