Unity Android接入MoPub聚合廣告SDKUnity Android接入MoPub聚合廣告SDK這里只總結(jié)前端接入流程和注意事項(xiàng),后臺(tái)配置請(qǐng)參考官方詳細(xì)文檔mopub廣告有以下類型Bananer(橫幅)Interstitial(插屏)Rewarded Video(激勵(lì)視頻)Rewarded Playable......
這里只總結(jié)前端接入流程和注意事項(xiàng),后臺(tái)配置請(qǐng)參考官方詳細(xì)文檔
mopub廣告有以下類型
Bananer(橫幅)
Interstitial(插屏)
Rewarded Video(激勵(lì)視頻)
Rewarded Playable(互動(dòng)式激勵(lì)MRAID)
Native(原生)
1:下載mopubunitysdk
這里下載最新的unity package
2:設(shè)置支持的廣告平臺(tái)
推薦使用插件提供的MoPub SDK Manager來管理
在這里插入圖片描述
需要注意的是,每次升級(jí)或者安裝或者刪除(刪除一般只需要在Assets/MoPub/Mediation目錄下刪除對(duì)應(yīng)目錄即可)某個(gè)廣告平臺(tái)后,建議用External Dependency Manager工具重新設(shè)置一下jar和aar依賴。
另外在網(wǎng)絡(luò)不好的情況下,使用External Dependency Manager會(huì)存在所需依賴?yán)幌聛淼那闆r,那么就需要手動(dòng)把需要的依賴放到Plugins/Android目錄下
這部分集成可以參考官方文檔:Integrate the MoPub SDK for Unity
3:SDK接入
3.1初始化
首先根據(jù)集成的廣告類型,從后臺(tái)獲得對(duì)應(yīng)的廣告id
插件中提供了Prefab來進(jìn)行初始化,同時(shí)我們也可以選擇使用底層代碼進(jìn)行初始化。筆者使用了后者。
3.1.1預(yù)定義一些參數(shù)
//ios端旗幟式廣告
public string iOSBannerID;
//ios插頁(yè)式廣告
public string iOSInterstitialID;
//ios激勵(lì)視頻廣告
public string iOSVideoID;
//安卓旗幟式廣告
public string AndroidBannerID;
//安卓插頁(yè)式廣告
public string AndroidInterstitialID;
//安卓激勵(lì)視頻廣告
public string AndroidVideoID;
//請(qǐng)求廣告的函數(shù)的參數(shù)是string數(shù)組,用來裝上面的廣告ID
private string[] bannerAdUnits;
private string[] interstitialAdUnits;
private string[] rewardedVideoAdUnits;
MPRewardedVideoListener mpRewardedVideoListener = null;
DateTime lastAdTime = new DateTime(2020, 1, 1);
3.1.2初始化
#if UNITYIOS
bannerAdUnits = new string[] { iOSBannerID };
interstitialAdUnits = new string[] { iOSInterstitialID };
rewardedVideoAdUnits = new string[] { iOSVideoID };
#elif UNITYANDROID
bannerAdUnits = new string[] { AndroidBannerID };
interstitialAdUnits = new string[] { AndroidInterstitialID };
rewardedVideoAdUnits = new string[] { AndroidVideoID };
#endif
var anyAdUnitId = rewardedVideoAdUnits[0];
MoPub.InitializeSdk(new MoPub.SdkConfiguration
{
//設(shè)置一個(gè)任意有效的廣告Id
AdUnitId = anyAdUnitId,
LogLevel = MoPub.LogLevel.Debug,
MediatedNetworks = new MoPub.MediatedNetwork[] {
},
});
3.1.3設(shè)置廣告插件
根據(jù)項(xiàng)目中需要集成的廣告類型,設(shè)置對(duì)應(yīng)的廣告插件
//加載激勵(lì)視頻的插件
MoPub.LoadRewardedVideoPluginsForAdUnits(rewardedVideoAdUnits);
//初始化各種廣告,現(xiàn)在還沒有使用好幾個(gè)id的需求,所以每個(gè)廣告類型先都用一個(gè)id,所以都取[0]。
//按著官方用例,如果有多種id的話可以寫一個(gè)for循環(huán)直接遍歷創(chuàng)造就好
其它類型api
MoPub.LoadBannerPluginsForAdUnits(bannerAdUnits);
MoPub.LoadInterstitialPluginsForAdUnits(interstitialAdUnits);
MoPub.LoadRewardedVideoPluginsForAdUnits(rewardedVideoAdUnits);
MoPub.LoadRewardedVideoPluginsForAdUnits(rewardedRichMediaAdUnits);
3.1.4根據(jù)廣告類型具體集成
官網(wǎng)提供了Banner,Interstitial,Rewarded Video三種類型廣告的集成教程,筆者這邊只集成了激勵(lì)視頻,故后文以激勵(lì)視頻為例繼續(xù)展開(需要注意的是激勵(lì)視頻教程中提到的后臺(tái)要設(shè)置Callback Server)。
step1:在SDK初始化成功的回調(diào)中,先預(yù)加載激勵(lì)視頻。
step2:播放激勵(lì)視頻前先調(diào)用MoPub.HasRewardedVideo(adUnitId);檢測(cè)視頻是否準(zhǔn)備好
step3:調(diào)用MoPub.ShowRewardedVideo(adUnitId);播放視頻
step4:處理各種回調(diào)
mpRewardedVideoListener = new MPRewardedVideoListener();
// 綁定初始化回調(diào)
MoPubManager.OnSdkInitializedEvent += OnSdkInitializedEvent;
//激勵(lì)視頻廣告回調(diào)
//激勵(lì)視頻預(yù)加載成功
MoPubManager.OnRewardedVideoLoadedEvent += mpRewardedVideoListener.OnRewardedVideoLoadedEvent;
//激勵(lì)視頻預(yù)加載失敗
MoPubManager.OnRewardedVideoFailedEvent += mpRewardedVideoListener.OnRewardedVideoFailedEvent;
//激勵(lì)視頻加載Expired
MoPubManager.OnRewardedVideoExpiredEvent += mpRewardedVideoListener.OnRewardedVideoExpiredEvent;
//激勵(lì)視頻廣告播放完(在播放完,用戶點(diǎn)了關(guān)閉按鈕后觸發(fā))
MoPubManager.OnRewardedVideoShownEvent += mpRewardedVideoListener.OnRewardedVideoAdShowed;
//激勵(lì)視頻播放失敗
MoPubManager.OnRewardedVideoFailedToPlayEvent += mpRewardedVideoListener.OnRewardedVideoAdShowFailed; ;
//激勵(lì)視頻播放關(guān)閉
MoPubManager.OnRewardedVideoClosedEvent += mpRewardedVideoListener.OnRewardedVideoAdClosed;
private void OnSdkInitializedEvent(string adUnitId)
{
Debug.LogError(mopub SDK初始化成功, adUnitId: + adUnitId);
#if UNITYIOS
MoPub.RequestInterstitialAd (iOSInterstitialID);
MoPub.RequestRewardedVideo (iOSVideoID);
#elif UNITYANDROID
//MoPub.RequestInterstitialAd(AndroidInterstitialID);
Debug.LogError(Prefetch the rewarded video ad);
MoPub.RequestRewardedVideo(AndroidVideoID);//請(qǐng)求預(yù)加載
#endif
}
class MPRewardedVideoListener
{
public Action onReward = null;
public Action onRewardClose = null;
public Action onRewardError = null;
bool rewardSuccess = false;
public void OnRewardedVideoLoadedEvent(string adUnitId)
{
Debug.LogError(激勵(lì)視頻預(yù)加載成功 : + adUnitId);
}
public void OnRewardedVideoFailedEvent(string adUnitId, string errorMsg)
{
Debug.LogError(激勵(lì)視頻預(yù)加載失敗: + adUnitId + , msg: + errorMsg);
}
public void OnRewardedVideoExpiredEvent(string adUnitId)
{
Debug.LogError(激勵(lì)視頻加載Expired: + adUnitId);
AnalyticsManager.LogEvent(AnalyticsEventID.RewardVideoShowFail);
rewardSuccess = false;
var act = onRewardError;
onRewardError = null;
if (act != null)
{
act();
}
}
public void OnRewardedVideoAdShowed(string adUnitId)
{
Debug.LogError(激勵(lì)視頻廣告播放完);
AnalyticsManager.LogEvent(AnalyticsEventID.RewardVideoShowSuccess);
rewardSuccess = true;
}
public void OnRewardedVideoAdShowFailed(string adUnitId, string errorMsg)
{
Debug.LogError(激勵(lì)視頻播放失敗 : + adUnitId + , msg: + errorMsg);
AnalyticsManager.LogEvent(AnalyticsEventID.RewardVideoShowFail);
rewardSuccess = false;
var act = onRewardError;
onRewardError = null;
if (act != null)
{
act();
}
}
public void OnRewardedVideoAdClicked(string scene)
{
AnalyticsManager.LogEvent(AnalyticsEventID.RewardVideoClick);
}
public void OnRewardedVideoAdClosed(string adUnitId)
{
Debug.LogError(激勵(lì)視頻播放關(guān)閉 : + adUnitId);
if (rewardSuccess)
{
var act = onReward;
var act1 = onRewardClose;
onRewardClose = null;
onRewardError = null;
onReward = null;
if (act != null)
{
act();
}
if (act1 != null)
{
act1();
}
}
else
{
var act = onRewardError;
var act1 = onRewardClose;
onRewardClose = null;
onRewardError = null;
onReward = null;
if (act != null)
{
act();
}
if (act1 != null)
{
act1();
}
}
rewardSuccess = false;
}
}
4:測(cè)試
官方Test文檔中有提供100%填充的廣告id,可以先用這些id來測(cè)試流程。沒問題后再切換到正式id。同時(shí)也可以根據(jù)這個(gè)來很快定位是后臺(tái)配置還是前端的問題。
另外最好掛V.P.N來測(cè)試廣告~
5:注意事項(xiàng)
5.1廣告填充率低下的問題
筆者使用聚合平臺(tái)集成了MoPub、Applovin、IronSource、UnityAds。通過后臺(tái)控制只開啟某個(gè)廣告平臺(tái),發(fā)現(xiàn)MoPub和Applovin的填充率很低,Applovin是展示幾個(gè)后就再也拉不到了,MoPub是自始至終一次都沒有填充。另兩個(gè)沒有問題。目前還沒有找到原因
5.2各廣告平臺(tái)額外的配置項(xiàng)
上文中寫到了這段代碼:
MediatedNetworks = new MoPub.MediatedNetwork[] {
},
這里即按照廣告平臺(tái)來具體設(shè)置一些信息,但是各個(gè)廣告平臺(tái)需要設(shè)置哪些信息呢。可以參考AppLovin,IronSource(在這些頁(yè)面左側(cè)可以很方便導(dǎo)航到其它廣告平臺(tái))。根據(jù)文檔可以看到還需要配置一些信息,最終代碼如下:
MediatedNetworks = new MoPub.MediatedNetwork[] {
//AppLovin
new MoPub.SupportedNetwork.AppLovin{
NetworkConfiguration=new Dictionarystring, string(){
{ sdkkey,xxxxxxxxx},
},
},
//IronSource
new MoPub.SupportedNetwork.IronSource
{
NetworkConfiguration=new Dictionarystring, string()
{
{ appKey,xxxxxxxxx},
}
}
},
至于在unity中上述sdkkey和appKey這些字符串是哪里來的,可以通過各個(gè)廣告平臺(tái)在Unity這邊的XXXXNetworkConfig.cs腳本中獲得。比如AppLovinNetworkConfig.cs的內(nèi)容為:
在這里插入圖片描述
可以很快定位關(guān)鍵字為:sdkkey
事實(shí)上Applovin的這個(gè)配置就是AndroidManifest中的(有些聚合SDK是把參數(shù)配置到AndroidManifest.xml中):
metadata android:name=applovin.sdk.key android:value=xxxxxx /
5.3激勵(lì)視頻預(yù)加載
不知道從哪里看過一眼,說MoPub的激勵(lì)視頻是自己處理了預(yù)加載的。但是筆者項(xiàng)目中發(fā)現(xiàn)第一次預(yù)加載成功,順利播放視頻后。后續(xù)調(diào)用MoPub.HasRewardedVideo(adUnitId)總是返回false
無奈只有自己處理,主要做了以下工作:
定義bool flag來指定當(dāng)前是否正在預(yù)加載視頻,來規(guī)避重復(fù)的預(yù)加載。即只能在flag==false的情況下調(diào)用MoPub.RequestRewardedVideo(adUnitId);進(jìn)行視頻預(yù)加載,且在調(diào)用的同時(shí),設(shè)置flag=true
用戶在成功播放視頻的onclose回調(diào)中,再次預(yù)加載視頻
預(yù)加載成功或者失敗的回調(diào)中,設(shè)置flag為false
特別聲明:以上文章內(nèi)容僅代表作者本人觀點(diǎn),不代表ESG跨境電商觀點(diǎn)或立場(chǎng)。如有關(guān)于作品內(nèi)容、版權(quán)或其它問題請(qǐng)于作品發(fā)表后的30日內(nèi)與ESG跨境電商聯(lián)系。
二維碼加載中...
使用微信掃一掃登錄
使用賬號(hào)密碼登錄
平臺(tái)顧問
微信掃一掃
馬上聯(lián)系在線顧問
小程序
ESG跨境小程序
手機(jī)入駐更便捷
返回頂部