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