疑难杂症记录2:在缓存好两个mtg插屏广告后,显示阶段报错isNotReady

现象

成功缓存2个mtg广告,但显示第2个时失败报错:is not ready(can't show because load fail),报错的详细日志:onShowFailure[mintegral_interstitial_ad] unitId is xxx, errorMessage is mtg interstitial video ad is not ready, errorCode is -2020007。

初步分析

抓包+日志定位确定isNotReady有两种可能,①广告素材视频没下载完 ②广告间隔时间太长,offer过期。

  1. 我这边只有等mtgSdk回调了onVideoLoadSuccess才会标记缓存成功,如果没有缓存成功都没有机会调用show,也就是没有机会调起isReady的判断。所以不存在已回调了onVideoLoadSuccess但是视频没下载完的情况,如若这样就是mtgSdk内部回调的重大bug
  2. offer过期问题不存在,目前就是间隔几分钟

深入分析

让mtg方提供日志,输出isReady为false的具体原因,此时输出了can't show because load is failed。这个日志说明的是由于家在失败所以不能显示,跟我前面【现象】中描述的已成功缓存两个广告的事实冲突。经过多次沟通告知对方我们是一次缓存多个广告,分别是不同的广告对象发起loadAd。最终终于理清他们的内部逻辑。

  1. 如果两个不同实例(A和B)请求到同一广告源(S),就会出现上面问题。因为在播放完一个广告(A)后,mtgSdk内部会在数据库中清除该广告源(S)。那么另一个广告实例(B)就showFailure
  2. 如果两个不同实例请求到不同广告源,就不会出现
  3. mtgSdk没有处理多个实例缓存同一广告的功能

解决方案

  1. 接收目前这种方式并推进mtg处理这个问题
  2. 缓存广告个数改为1

总结

针对一次发起两个缓存的场景,如果广告源是同一个,在展示完一个广告后,mtgSdk会在他们内部数据库中删掉该广告源的所有记录。这个操作会导致客户端展示第二个已缓存好的广告时找不到广告源数据,从而报错:can not show load fail。这个问题可以定为mtgSdk内部问题,他们提供了可以缓存多个广告的功能,但是内部却没有合适的处理缓存多个广告时拉到同一个广告源的情况,而简单粗暴的将广告源移除了。

其次站在使用者角度,既然能成功缓存到多个广告,那么期望就是都能展示成功,使用者不需要关心第1个,第2个,第n个广告是不是同源。

你可能感兴趣的:(疑难杂症记录2:在缓存好两个mtg插屏广告后,显示阶段报错isNotReady)