收藏
回答

多实例模式下,调用同一id的不同广告实例,第二个实例show时会抛错,但却能够拉起广告,影响开发判断

框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
小游戏 Bug RewardedVideoAd.show() 工具 开发者工具1.05.2107221 2.19.2
// 背景介绍:小游戏开发,广告实例在Modal弹窗组件中,会被多个地方调用
// 开启了 multiton 多实例,但是在第二个地方调用组件时,调用ad.show()会抛出错误,但广告仍能拉起
// 而且错误对象e没有errCode只有errMsg,导致处理异常时只能用正则匹配错误信息,规避这种特殊情况(因为广告正常拉起来了)
// 请官方答复,这种hack调用很没安全感!!
// 预期:
//   已经开启了多实例模式,不应该在第二个实例调用show时报错;
//   要么抛出错误,不要拉起广告;
this.wxAd = wx.createRewardedVideoAd({
  adUnitId: 'adunit-xxx',
  multiton: true,  // 开启了多实例模式
});
try {
  await this.wxAd.show()  
  .catch(async (e) => {
      console.log('first try show failed', e);  // {"errMsg": ""} no errCode !!
      // wired behavior under multiton, have to hack...
      if (/is\sshowed/.test(e.errMsg)) {
        console.warn(`
          NOTE: 在多实例状态下,show会抛出错误,但广告仍能拉起,感觉是微信广告巨大的Bug
          {errMsg: "can't invoke show() while other video-ad is showed"}
          已提issue至社区
        `);
        return false;
      }
      await this.wxRewardedVideoAd.load()
      return true;
    })
    .then((shouldShow: boolean) => {
      if (!shouldShow) return;
      this.wxRewardedVideoAd.show();
    });
} catch(e) {
  console.error('拉起广告失败', e);
  this.showToast('拉起广告失败');
}
回答关注问题邀请回答
收藏

2 个回答

  • 布boo
    布boo
    2021-09-04

    谢谢官方回答,问题已解决,是我个人使用问题。

    问题出在写cocos按钮事件监听时,用的是clickEvents api的push方法,弹窗两次onEnable,注册了两个相同的点击事件。导致第二次点击时,调了两次wxAd.show方法,第一次show成功拉起广告;第二次show导致报错;

    解决方案是: 避免点击事件重复绑定:按钮点击事件从cocos editor中拖拽注册。


    2021-09-04
    有用
    回复
  • Forever
    Forever
    2021-09-02

    同一id的激励视频广告不需要开启了多实例模式

    2021-09-02
    有用
    回复 5
    • Forever
      Forever
      2021-09-02
      多实例模式是为了可以使长广告和短广告同时存在
      2021-09-02
      回复
    • 布boo
      布boo
      2021-09-03
      整理了bug report文档,麻烦看下并尽快给出回复,谢谢!
      【腾讯文档】激励广告组件拉起问题反馈
      https://docs.qq.com/doc/DTU10SWFqTU5nSHVJ
      2021-09-03
      回复
    • Forever
      Forever
      2021-09-03回复布boo
      感谢你的反馈。请问你在使用场景下,需要重复创建激励视频广告?在不重复创建的情况下,用全局唯一单例进行显示是可行的
      2021-09-03
      回复
    • Forever
      Forever
      2021-09-03回复布boo
      我创建了两个不同ID激励视频广告是没有问题的,我认为multiton: true 是为不同广告ID服务的
      2021-09-03
      回复
    • 布boo
      布boo
      2021-09-04
      问题找到了,抱歉我的问题。是我的按钮事件监听了两次,导致调了两次show,所以有can't invoke show() while other video-ad is showed的报错。已解决,谢谢
      2021-09-04
      回复
登录 后发表内容