微信小程序展示激励广告报错 can't invoke show() while other video-ad is showed
,根据官方的回复,原因是:
同一个激励视频对象调用过展示,但是没有关闭的情况下,会出现这个错误。
根据文档,激励广告的关闭不是开发者所能控制的:
只有在用户点击激励视频广告组件上的关闭广告按钮时,广告才会关闭。开发者不可控制激励视频广告组件的隐藏。
结合以上两段话,可推测用户在没有关闭广告的情况下,又重新触发了广告。
但是,这是怎么做到的?
微信开放社区有开发者表示,当用户通过右滑(沿着屏幕左边边缘往右滑)返回上一页,再重新回到广告页并触发广告时,就会出现这个错误。证据:在这个过程中,RewardedVideoAd.onClose
没有被触发,即广告没有被关闭。
解决这个问题的方法是:在页面 onUnload
中判断广告的 onClose
回调有没有被触发,如果没有触发,就在 onUnload
中调用 RewardedVideoAd.destroy()
销毁广告实例,这相当于间接地强制关闭了广告。这样,当用户重新返回广告页播放广告时,就不会出现 can't invoke show() while other video-ad is showed
的报错了。
激励广告的曝光似乎等于完整观看次数 + 中途关闭次数 + 没看完广告右滑屏幕返回上一页面的次数,即只要播放了广告,无论结果如何,都会统计一次曝光。这是理论上的,事实上后台给出的数据可能只有下发奖励次数的一半,这个现象在社区有不少相关帖子,原因不明,官方的解释总是说后台的数据是所谓的有效曝光,至于什么叫有效曝光,没有解释。