Сегодня мы рассмотрим интеграцию Yandex Mobile Ads SDK в Unity.
Первые шаги:
Первое что надо сделать — это зарегистрироваться в РСЯ https://partner2.yandex.ru/
После регистрации переходим в раздел «Мобильная медиация» и жмём «Добавить
приложение».
ВАЖНО: Приложение должно быть опубликовано в Google Play или App Store, иначе
его невозможно будет добавить.
После успешного добавления нам нужно создать рекламное место. Если мы
интегрируем рекламу в Android Studio или XCode, то нам доступны
следующие типы рекламы:
● Баннер
● Нативная реклама
● Видео с вознаграждением
● Полноэкранная реклама
Для Unity немного урезанный функционал, и доступны следующие типы рекламы:
● Баннер
● Видео с вознаграждением
● Полноэкранная реклама.
После того, как мы определились какой тип рекламы будем делать, нужно
создать для него рекламное место.
Для этого жмём на название приложения и на
кнопку «Добавить рекламное место», вписываем название и выбираем его тип.
Каждое рекламное место имеет свой уникальный ID и находится в столбце «ID
Места». Он нам понадобится в будущем для показа рекламного блока.
Отобразить рекламу пользователю
Для этого у Yandex есть две версии плагина: «Lite Версия» и
«Обычная версия». Мы будем использовать Обычную версию.
Интегрировать плагин вы сможете согласно инструкции: https://yandex.ru/dev/mobile-ads/doc/plugins/unity/mob-mediation/init.html
Возможные ошибки
После добавления обычной версии плагина, у вас может возникнуть
следующая ошибка:
Assets\YandexMobileAds\Editor\PostprocessBuildPlayerYandexMobileAds.cs(12,19): error
CS0234: The type or namespace name ‘iOS’ does not exist in the namespace ‘UnityEditor’
(are you missing an assembly reference?)
Данная ошибка отображается, если у вас не установлена поддержка
билдинга на iOS. Если вы не собираетесь портировать приложение на iOS, то просто
удалите файл по пути:
Assets\YandexMobileAds\Editor\PostprocessBuildPlayerYandexMobileAds.cs, данный
файл никак не влияет на работоспособность плагина на Android.
Как интегрировать каждый тип рекламы:
Интеграция баннера
Для интеграции баннера используем представленный код:
private void RequestBanner(){
string adUnitId = «adf-12344566789»; //ID места, о котором говорили выше
banner = new Banner(adUnitId, AdSize.BANNER_320x50, AdPosition.BottomCenter);
//указываем id места, размер баннера и его позицию.
Подробнее здесь: https://yandex.ru/dev/mobile-ads/doc/plugins/unity/mob-mediation/banner.html
banner.LoadAd(request); //отправляем запрос на вызов баннера
Далее, для загрузки баннера просто необходимо вызвать метод «RequestBanner».
Интеграция рекламы с вознаграждением
Для интеграции рекламы с вознаграждением используем представленный код:
private void RequestRewardedAd(){
string adUnitId = «adf-1003143»; //ID места
rewardedAd = new RewardedAd(adUnitId); //заполняем переменную с рекламой
AdRequest request = new AdRequest.Builder().Build(); //создаём запрос на рекламу
rewardedAd.LoadAd(request); // отсылаем запрос на рекламу
//начинаем отслеживать события рекламы
rewardedAd.OnRewardedAdLoaded += this.HandleRewardedAdLoaded;
rewardedAd.OnRewardedAdFailedToLoad += this.HandleRewardedAdFailedToLoad;
rewardedAd.OnReturnedToApplication += this.HandleReturnedToApplication;
rewardedAd.OnLeftApplication += this.HandleLeftApplication;
rewardedAd.OnRewardedAdShown += this.HandleRewardedAdShown;
rewardedAd.OnRewardedAdDismissed += this.HandleRewardedAdDismissed;
rewardedAd.OnImpression += this.HandleImpression;
rewardedAd.OnRewarded += this.HandleRewarded;
}
//метод для вызова рекламы
private void ShowRewardedAd(){
//если реклама загружена — показываем её
if (this.rewardedAd.IsLoaded()){
rewardedAd.Show();
}
}
//каждый метод будет вызван при определенном действии связанной с рекламой (её загрузкой и тд)
public void HandleRewardedAdLoaded(object sender, EventArgs args){
ShowRewardedAd(); //реклама загружена — показываем её
}
public void HandleRewardedAdFailedToLoad(object sender, AdFailureEventArgs args){
Debug.Log(«HandleRewardedAdFailedToLoad event received with message: » + args.Message);
}
public void HandleReturnedToApplication(object sender, EventArgs args){
Debug.Log(«HandleReturnedToApplication event received»);
}
public void HandleLeftApplication(object sender, EventArgs args){
Debug.Log(«HandleLeftApplication event received»);
}
public void HandleRewardedAdShown(object sender, EventArgs args){
Debug.Log(«HandleRewardedAdShown event received»);
}
public void HandleRewardedAdDismissed(object sender, EventArgs args){
Debug.Log(«HandleRewardedAdDismissed event received»);
}
public void HandleImpression(object sender, ImpressionData impressionData){
Debug.Log(«HandleImpression event received with data: » + data);
}
public void HandleRewarded(object sender, Reward args){
Debug.Log(«HandleRewarded event received: amout = » + args.amount + «, type = » + args.type);
}
Для показа рекламы вызываем метод «RequestRewardedAd»
Интеграция полноэкранной рекламы
Для интеграции полноэкранной рекламы используем код:
private void RequestInterstitial(){
string adUnitId = «adf-10034305»; //id блока
interstitial = new Interstitial(adUnitId); //заполняем переменную с рекламой
AdRequest request = new AdRequest.Builder().Build(); //создаём запрос на показ рекламы
interstitial.LoadAd(request); //отправляем запрос
//каждый метод будет вызван при определенном действии связанной с рекламой (её загрузкой и тд)
interstitial.OnInterstitialLoaded += this.HandleInterstitialLoaded;
interstitial.OnInterstitialFailedToLoad += this.HandleInterstitialFailedToLoad;
interstitial.OnReturnedToApplication += this.HandleReturnedToApplication;
interstitial.OnLeftApplication += this.HandleLeftApplication;
interstitial.OnInterstitialShown += this.HandleInterstitialShown;
interstitial.OnInterstitialDismissed += this.HandleInterstitialDismissed;
interstitial.OnImpression += this.HandleImpression;
}
//метод для показа рекламы
private void ShowInterstitial(){
if (this.interstitial.IsLoaded()){
interstitial.Show();
}
}
public void HandleInterstitialLoaded(object sender, EventArgs args){
ShowInterstitial(); //при загрузки рекламы — показываем её
}
public void HandleInterstitialFailedToLoad(object sender, AdFailureEventArgs args){
Debug.Log(«HandleInterstitialFailedToLoad event received with message: » + args.Message);
}
public void HandleReturnedToApplication(object sender, EventArgs args){
Debug.Log(«HandleReturnedToApplication event received»);
}
public void HandleLeftApplication(object sender, EventArgs args){
Debug.Log(«HandleLeftApplication event received»);
}
public void HandleInterstitialShown(object sender, EventArgs args){
Debug.Log(«HandleInterstitialShown event received»);
}
public void HandleInterstitialDismissed(object sender, EventArgs args){
Debug.Log(«HandleInterstitialDismissed event received»);
}
public void HandleImpression(object sender, ImpressionData impressionData){
Debug.Log(«HandleImpression event received with data: » + data);
}
Далее, для загрузки показа рекламы необходимо вызвать метод «RequestInterstitial».
Важно:Реклама не будет показываться в редакторе Unity, для этого нужно сбилдить приложение на телефон и уже с телефона запустить его.
Успешных интеграций!