Монетизация мобильных приложений с помощью рекламы — один из ключевых способов заработка для разработчиков. Яндекс Mobile Ads (ранее Яндекс.Реклама) предлагает удобный SDK для показа рекламы в Unity-приложениях на Android и iOS. В этой статье разберем, как интегрировать баннерную, межстраничную (interstitial) и rewarded-рекламу.
1. Подготовка проекта
1.1. Регистрация в Яндекс Mobile Ads
-
Перейдите в Яндекс Mobile Ads.
-
Создайте аккаунт или войдите через Яндекс ID.
-
Добавьте новое приложение в личном кабинете и получите R-M-XXXXXX-X (идентификатор рекламного блока).
1.2. Настройка Unity-проекта
-
Откройте Unity (версия 2020.3 LTS или новее).
-
Убедитесь, что в настройках (Edit → Project Settings → Player) выставлены:
-
Android:
-
Minimum API Level: 21+
-
Target API Level: Automatic
-
-
iOS:
-
Target minimum iOS Version: 12.0+
-
-
2. Установка SDK Яндекс Mobile Ads
2.1. Импорт через Unity Package Manager (UPM)
-
Откройте Window → Package Manager.
-
Нажмите + → Add package from git URL.
-
Вставьте ссылку:
https://github.com/yandexmobile/yandex-mobile-ads-unity.git
-
Нажмите Add.
2.2. Альтернативный способ: загрузка .unitypackage
-
Скачайте последнюю версию SDK с официального GitHub.
-
Импортируйте в проект через Assets → Import Package → Custom Package.
3. Настройка рекламных блоков
3.1. Баннерная реклама
using UnityEngine; using YandexMobileAds; using YandexMobileAds.Base; public class YandexBannerAd : MonoBehaviour { private Banner _banner; void Start() { // Замените R-M-XXXXXX-X на ваш AdUnit ID string adUnitId = "R-M-XXXXXX-X"; // Создаем баннер (размер 320x50) _banner = new Banner(adUnitId, AdSize.Banner, AdPosition.BottomCenter); // Подписываемся на события _banner.OnAdLoaded += HandleAdLoaded; _banner.OnAdFailedToLoad += HandleAdFailedToLoad; // Загружаем рекламу _banner.LoadAd(); } private void HandleAdLoaded(object sender, EventArgs args) { Debug.Log("Баннер загружен!"); _banner.Show(); } private void HandleAdFailedToLoad(object sender, AdFailureEventArgs args) { Debug.LogError("Ошибка загрузки: " + args.Message); } void OnDestroy() { if (_banner != null) { _banner.Destroy(); } } }
3.2. Межстраничная реклама (Interstitial)
using UnityEngine; using YandexMobileAds; using YandexMobileAds.Base; public class YandexInterstitialAd : MonoBehaviour { private Interstitial _interstitial; void Start() { string adUnitId = "R-M-XXXXXX-X"; // Ваш AdUnit ID _interstitial = new Interstitial(adUnitId); _interstitial.OnAdLoaded += HandleAdLoaded; _interstitial.OnAdFailedToLoad += HandleAdFailedToLoad; _interstitial.OnAdShown += HandleAdShown; _interstitial.OnAdDismissed += HandleAdDismissed; _interstitial.LoadAd(); } public void ShowAd() { if (_interstitial.IsLoaded()) { _interstitial.Show(); } } private void HandleAdLoaded(object sender, EventArgs args) { Debug.Log("Interstitial загружен!"); } private void HandleAdFailedToLoad(object sender, AdFailureEventArgs args) { Debug.LogError("Ошибка загрузки Interstitial: " + args.Message); } private void HandleAdShown(object sender, EventArgs args) { Debug.Log("Interstitial показан"); } private void HandleAdDismissed(object sender, EventArgs args) { Debug.Log("Interstitial закрыт"); _interstitial.LoadAd(); // Перезагружаем } }
3.3. Вознаграждаемая реклама (Rewarded)
using UnityEngine; using YandexMobileAds; using YandexMobileAds.Base; public class YandexRewardedAd : MonoBehaviour { private RewardedAd _rewardedAd; void Start() { string adUnitId = "R-M-XXXXXX-X"; // Ваш AdUnit ID _rewardedAd = new RewardedAd(adUnitId); _rewardedAd.OnAdLoaded += HandleAdLoaded; _rewardedAd.OnAdFailedToLoad += HandleAdFailedToLoad; _rewardedAd.OnRewarded += HandleRewarded; _rewardedAd.LoadAd(); } public void ShowAd() { if (_rewardedAd.IsLoaded()) { _rewardedAd.Show(); } } private void HandleAdLoaded(object sender, EventArgs args) { Debug.Log("Rewarded загружен!"); } private void HandleAdFailedToLoad(object sender, AdFailureEventArgs args) { Debug.LogError("Ошибка загрузки Rewarded: " + args.Message); } private void HandleRewarded(object sender, RewardEventArgs args) { Debug.Log("Игрок получил награду!"); // Даем бонус (например, +100 монет) } }
4. Тестирование рекламы
4.1. Тестовые AdUnit ID
Для теста используйте специальные ID:
-
Android:
demo-banner-yandex
,demo-interstitial-yandex
,demo-rewarded-yandex
-
iOS:
demo-banner-yandex
,demo-interstitial-yandex
,demo-rewarded-yandex
4.2. Проверка на эмуляторе и устройстве
-
Android:
-
Включите Developer Mode на телефоне.
-
Соберите APK и установите.
-
-
iOS:
-
Убедитесь, что TestFlight настроен.
-
5. Публикация приложения
-
Убедитесь, что в AndroidManifest.xml и Info.plist добавлены разрешения:
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
-
Замените тестовые ID на реальные перед публикацией.
Заключение
Интеграция Яндекс Mobile Ads в Unity — простой способ монетизировать мобильное приложение. Баннеры, межстраничная и rewarded-реклама легко настраиваются и работают на Android и iOS.
Советы:
-
Оптимизируйте частоту показа, чтобы не раздражать пользователей.
-
Тестируйте разные форматы (например, rewarded за бонусы).
-
Используйте A/B-тестирование для лучшей монетизации.
Если у вас есть вопросы — пишите в комментарии!