穿山甲GroMore廣告—(Banner廣告)——Android_Unity廣告系列文章03
穿山甲GroMore廣告—(Banner廣告)——Android_Unity廣告系列文章03
穿山甲GroMore聚合版本:2022.04.14。
對于Banner廣告,2022.04.14版本的GroMore聚合版本里是有一點問題的,代碼控制上有一些問題,我就寫出調用方式和相應的BUG并做出修正。
首先展示:
Demo中的Banner的展示和加載是寫在一個方法中,沒有分開。
第1步調用入口為:AdFunctionScript.cs中的FunctionDispatch()方法,ID為:MainListItemId.BANNER_LOAD

第2步:創建Banner廣告對象。
GMBannerAd gmBannerAd
安卓層AdManager.java中有一個方法 getBannerAd()

這個方法是在Unity里調用的,在第3步里面。
第3步:設置Adslot,注意每個廣告均有一個Adslot,用來設置所顯示的廣告的參數,比如ID,大小等等,
不同的是有的使用的版本1,為com.bytedance.msdk.api.AdSlot,有的使用的版本2,為com.bytedance.msdk.api.v2.slot,依據Ad的對象需要的參數來定。
Unity層在Android宏下的ABUBannerAd.cs中調用加載和展示與Android交互。
真正的加載在Android層AdManager.java中。

上圖中紅框圈出來的部分是adSlot,之所以重復了Unity這邊的內容,是因為我調整廣告尺寸嫌發包麻煩,所以直接在Android層寫了一個adSlot,而unity層傳過來的adSlot則沒有使用,然后因為廣告的尺寸以及縮放,你并不能控制,而廣告的內容尺寸是屬于一個迷,經常使你設置的高寬無效,所以你可以設置為按底對齊,向上自適應。
以上為加載廣告,以下說展示。
-------------------------------------------
SDK當在初始化Banner時,會先干掉顯示Banner的View,內容在AbuBannerAd.cs中的BannerAdListener類,里面的onAdLoaded的方法。
注意SDK里Banner的BUG在這里了。
BUG1:
BannerAdListener中onAdLoaded方法里調用了removeBannerLayout(),為移除Banner的View,而removeBannerLayout()方法中有一句代碼
() => mAdManager.Call<AndroidJavaObject>("removeViewFromRootView", ABUAdSDK.GetActivity(), bannerViewLayout));

從代碼里可以看出我們調用了安卓層的removeViewFromRootView方法,看你注意到沒,Android層這個方法為Void類型,而我們unity調用的則是帶返回類型,導致調不到安卓層的這個方法,所以將Unity中這句改為
() => mAdManager.Call("removeViewFromRootView", ABUAdSDK.GetActivity(), bannerViewLayout));

這里就修正了Banner廣告不能正常移除的BUG,記住你移除的時候不要干掉BannerAd,只需要干掉View就行了。
BUG2:
當你修正BUG1后,會引發邏輯錯誤,因為在之前的BUG寫法上,你移除的時候并沒有真正移除,而你修正后,真正的移除了廣告的View。
所以在BannerAdListener中的onAdLoaded方法中,你remove后,你還得加回來,需要增加代碼initBannerLayout();

BUG3:
在initAndLoadBannerAd方法中,你移除了,再加載回來,但是少了點東西,按照SDK的意思,Banner應該是顯示在你所創建的view的一個子view當中,也就是BUG2圖中的getBannerView。
所以在initAndLoadBannerAd又需要新增代碼如下:

---------------------------------
當你要控制顯示和隱藏的時候,你自己寫一個CloseBanner方法。

需要顯示了再直接加載即可,加載代碼如下:
AdFunctionScript.Instance.FunctionDispatch(MainListItemId.BANNER_LOAD);
跟第1步的加載一樣。
注意廣告顯示有延遲,注意在調用代碼的時候自己添加顯示和隱藏標識來控制。

浙公網安備 33010602011771號