Posted in

Интеграция Яндекс Mobile Ads в Unity

Монетизация мобильных приложений с помощью рекламы — один из ключевых способов заработка для разработчиков. Яндекс Mobile Ads (ранее Яндекс.Реклама) предлагает удобный SDK для показа рекламы в Unity-приложениях на Android и iOS. В этой статье разберем, как интегрировать баннерную, межстраничную (interstitial) и rewarded-рекламу.


1. Подготовка проекта

1.1. Регистрация в Яндекс Mobile Ads

  1. Перейдите в Яндекс Mobile Ads.

  2. Создайте аккаунт или войдите через Яндекс ID.

  3. Добавьте новое приложение в личном кабинете и получите R-M-XXXXXX-X (идентификатор рекламного блока).

1.2. Настройка Unity-проекта

  1. Откройте Unity (версия 2020.3 LTS или новее).

  2. Убедитесь, что в настройках (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)

  1. Откройте Window → Package Manager.

  2. Нажмите + → Add package from git URL.

  3. Вставьте ссылку:

    text

    Copy

    Download

    https://github.com/yandexmobile/yandex-mobile-ads-unity.git
  4. Нажмите Add.

2.2. Альтернативный способ: загрузка .unitypackage

  1. Скачайте последнюю версию SDK с официального GitHub.

  2. Импортируйте в проект через 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:

  • Androiddemo-banner-yandexdemo-interstitial-yandexdemo-rewarded-yandex

  • iOSdemo-banner-yandexdemo-interstitial-yandexdemo-rewarded-yandex

4.2. Проверка на эмуляторе и устройстве

  1. Android:

    • Включите Developer Mode на телефоне.

    • Соберите APK и установите.

  2. iOS:

    • Убедитесь, что TestFlight настроен.


5. Публикация приложения

  1. Убедитесь, что в AndroidManifest.xml и Info.plist добавлены разрешения:

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  2. Замените тестовые ID на реальные перед публикацией.


Заключение

Интеграция Яндекс Mobile Ads в Unity — простой способ монетизировать мобильное приложение. Баннеры, межстраничная и rewarded-реклама легко настраиваются и работают на Android и iOS.

Советы:

  • Оптимизируйте частоту показа, чтобы не раздражать пользователей.

  • Тестируйте разные форматы (например, rewarded за бонусы).

  • Используйте A/B-тестирование для лучшей монетизации.

Если у вас есть вопросы — пишите в комментарии!

Добавить комментарий