現(xiàn)象
成功緩存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過期古瓤。
- 我這邊只有等mtgSdk回調(diào)了onVideoLoadSuccess才會標(biāo)記緩存成功止剖,如果沒有緩存成功都沒有機會調(diào)用show,也就是沒有機會調(diào)起isReady的判斷落君。所以不存在已回調(diào)了onVideoLoadSuccess但是視頻沒下載完的情況穿香,如若這樣就是mtgSdk內(nèi)部回調(diào)的重大bug
- offer過期問題不存在,目前就是間隔幾分鐘
深入分析
讓mtg方提供日志绎速,輸出isReady為false的具體原因皮获,此時輸出了can't show because load is failed。這個日志說明的是由于家在失敗所以不能顯示纹冤,跟我前面【現(xiàn)象】中描述的已成功緩存兩個廣告的事實沖突洒宝。經(jīng)過多次溝通告知對方我們是一次緩存多個廣告,分別是不同的廣告對象發(fā)起loadAd萌京。最終終于理清他們的內(nèi)部邏輯雁歌。
- 如果兩個不同實例(A和B)請求到同一廣告源(S),就會出現(xiàn)上面問題知残。因為在播放完一個廣告(A)后靠瞎,mtgSdk內(nèi)部會在數(shù)據(jù)庫中清除該廣告源(S)。那么另一個廣告實例(B)就showFailure
- 如果兩個不同實例請求到不同廣告源求妹,就不會出現(xiàn)
- mtgSdk沒有處理多個實例緩存同一廣告的功能
解決方案
- 接收目前這種方式并推進mtg處理這個問題
- 緩存廣告?zhèn)€數(shù)改為1
總結(jié)
針對一次發(fā)起兩個緩存的場景乏盐,如果廣告源是同一個,在展示完一個廣告后扒最,mtgSdk會在他們內(nèi)部數(shù)據(jù)庫中刪掉該廣告源的所有記錄丑勤。這個操作會導(dǎo)致客戶端展示第二個已緩存好的廣告時找不到廣告源數(shù)據(jù)华嘹,從而報錯:can not show load fail吧趣。這個問題可以定為mtgSdk內(nèi)部問題,他們提供了可以緩存多個廣告的功能耙厚,但是內(nèi)部卻沒有合適的處理緩存多個廣告時拉到同一個廣告源的情況强挫,而簡單粗暴的將廣告源移除了。
其次站在使用者角度薛躬,既然能成功緩存到多個廣告俯渤,那么期望就是都能展示成功,使用者不需要關(guān)心第1個型宝,第2個八匠,第n個廣告是不是同源絮爷。