Межстраничная реклама

Межстраничная реклама (interstitial) — полноэкранный формат рекламы, встраиваемый в контент приложения во время естественных пауз, таких как переход между уровнями игры или окончание выполнения целевого действия.

Когда приложение показывает межстраничное объявление, у пользователя есть выбор: либо нажать на объявление и перейти на сайт рекламодателя, либо закрыть рекламу и вернуться в приложение.

В межстраничной рекламе внимание пользователя полностью сконцентрировано на рекламе, за счет чего стоимость ее показа выше.

Это руководство покажет, как интегрировать межстраничную рекламу в Unity-приложение. В дополнение к примерам кода и инструкции оно содержит рекомендации по использованию данного формата рекламы, а также ссылки на дополнительные ресурсы.

Дополнительно об интеграции межстраничной рекламы смотрите в видео:

Пререквизит

  1. Выполните шаги по интеграции Yandex Mobile Ads Unity Plugin, описанные в Быстром старте.
  2. Убедитесь, что используете самую актуальную версию Yandex Mobile Ads Unity Plugin, а в случае использовании медиации — наиболее свежую версию единой сборки.

Имплементация

Основные шаги по интеграции межстраничных объявлений:

  1. Создать загрузчик рекламы InterstitialAdLoader и зарегистрировать обработчики событий загрузки рекламного объявления.
  2. Настроить параметры загрузки объявления AdRequestConfiguration.
  3. Загрузить рекламу вызовом метода InterstitialAdLoader.LoadAd(AdRequestConfiguration).
  4. Передать дополнительные настройки, если вы работаете через систему Adfox.
  5. Зарегистрировать обработчики событий взаимодействия пользователя с рекламным объявлением.
  6. Показать объявление вызовом метода Interstitial.Show().
  7. Освободить ресурсы.

Особенности подключения межстраничной рекламы

  1. Если вы получили ошибку в событии onAdFailedToLoad, не пытайтесь загрузить новое объявление снова. Если всё же необходимо это сделать, ограничьте число повторных попыток загрузки рекламы. Это поможет избежать постоянных неудачных запросов и проблем с подключением в случае ограничений.

  2. Рекомендуется использовать один инстанс InterstitialAdLoader для всех загрузок рекламных объявлений для улучшения производительности.

Пошаговая инструкция

  1. Создайте объект InterstitialAdLoader в скрипте (на C#), который прикреплен к GameObject и зарегистрируйте обработчики событий загрузки рекламного объявления.

    using UnityEngine;
    using YandexMobileAds;
    using YandexMobileAds.Base;
    
    public class YandexMobileAdsInterstitialDemoScript : MonoBehaviour
    {
        private InterstitialAdLoader interstitialAdLoader;
        private Interstitial interstitial;
    
        private void SetupLoader()
        {
            interstitialAdLoader = new InterstitialAdLoader();
            interstitialAdLoader.OnAdLoaded += HandleInterstitialLoaded;
            interstitialAdLoader.OnAdFailedToLoad += HandleInterstitialFailedToLoad;
            // ...
        }
    
        public void HandleInterstitialLoaded(object sender, InterstitialAdLoadedEventArgs args)
        {
            // The ad was loaded successfully. Now you can handle it.
            interstitial = args.Interstitial;
        }
    
        public void HandleInterstitialFailedToLoad(object sender, AdFailedToLoadEventArgs args)
        {
            // Ad {args.AdUnitId} failed for to load with {args.Message}
            // Attempting to load a new ad from the OnAdFailedToLoad event is strongly discouraged.
        }
    }
    
  2. Настройте параметры загрузки объявления AdRequestConfiguration.

    string adUnitId = "demo-interstitial-yandex"; // замените на "R-M-XXXXXX-Y"
    AdRequestConfiguration adRequestConfiguration = new AdRequestConfiguration.Builder(adUnitId).Build();
    

    adUnitId — уникальный идентификатор, который выдается в Партнерском интерфейсе и имеет следующий вид: R-M-XXXXXX-Y.

    Совет

    Для тестирования можете использовать ID демо блока: "demo-interstitial-yandex". Перед публикацией приложения обязательно замените его на ID настоящего рекламного блока.

    Расширить параметры запроса за рекламой можно через AdRequestConfiguration.Builder, передав в запросе данные об интересах пользователя, контекстные данные страницы, локацию или другие дополнительные данные. Дополнительные контекстные данные на запросе могут значительно улучшить качество рекламы.

  3. Загрузите рекламу вызовом метода LoadAd передав в качестве аргумента AdRequestConfiguration.

    interstitialAdLoader.LoadAd(adRequestConfiguration);
    
  4. Зарегистрируйте обработчики событий взаимодействия пользователя с рекламным объявлением.

    using System;
    
    // ...
    interstitial.OnAdClicked += HandleAdClicked;
    interstitial.OnAdShown += HandleInterstitialShown;
    interstitial.OnAdFailedToShow += HandleInterstitialFailedToShow;
    interstitial.OnAdImpression += HandleImpression;
    interstitial.OnAdDismissed += HandleInterstitialDismissed;
    // ...
    
    public void HandleAdClicked(object sender, EventArgs args)
    {
        // Called when a click is recorded for an ad.
    }
    
    public void HandleInterstitialShown(object sender, EventArgs args)
    {
        // Called when ad is shown.
    }
    
    public void HandleInterstitialFailedToShow(object sender, AdFailureEventArgs args)
    {
        // Called when an InterstitialAd failed to show.
    }
    
    public void HandleInterstitialDismissed(object sender, EventArgs args)
    {
        // Called when ad is dismissed.
    }
    
    public void HandleImpression(object sender, ImpressionData impressionData)
    {
        // Called when an impression is recorded for an ad.
    }
    
  5. Покажите объявление вызовом метода Show() объекта Interstitial.

    if (interstitial != null)
    {
        interstitial.Show();
    }
    
  6. Вызывайте Destroy() у отработанных объявлений и очищайте ссылки, если они больше не используются на этом экране.

    Это освобождает используемые ресурсы и предотвращает утечки памяти.

    public void DestroyInterstitial()
    {
        if (interstitial != null)
        {
            interstitial.Destroy();
            interstitial = null;
        }
    }
    

Тестирование интеграции межстраничной рекламы

Использование демоблоков для тестирования рекламы

Для проверки корректной интеграции межстраничной рекламы, а также для тестирования вашего приложения, рекомендуется использовать тестовую рекламу.

Для гарантированного возврата тестовых объявлений на каждый запрос за рекламой, мы создали специальный демонстрационный идентификатор рекламного места. Используйте его для проверки корректной интеграции рекламы.

Демонстрационный adUnitId: demo-interstitial-yandex.

Важно

Убедитесь, что перед выкладыванием приложения в store, вы заменили демонстрационный идентификатор рекламного места на настоящий, полученный в ПИ.

Список всех доступных демонстрационных идентификаторов рекламного места доступен в разделе Демоблоки для тестирования.

Проверка корректной интеграции рекламы

Проверить корректность интеграции межстраничной рекламы можно через встроенный в sdk анализатор.

Данный инструмент проверяет корректность подключения межстраничной рекламы и выводит в лог подробный отчет. Для просмотра отчета, выполните поиск по ключевому слову "YandexAds" в инструменте отладки Android-приложений Logcat.

adb logcat -v brief '*:S YandexAds'

В случае успешной интеграции, вы увидите следующее сообщение:

adb logcat -v brief '*:S YandexAds'
mobileads$ adb logcat -v brief '*:S YandexAds'
I/YandexAds(13719): [Integration] Ad type interstitital was integrated successfully

В случае обнаружения проблем при интеграции межстраничной рекламы — подробный отчет о проблемах и рекомендации по их устранению.

Использование демоблоков для тестирования рекламы

Для проверки корректной интеграции рекламы, а также для тестирования вашего приложения, рекомендуется использовать тестовую рекламу.

Для гарантированного возврата тестовых объявлений на каждый запрос за рекламой, мы создали специальный демонстрационный идентификатор рекламного места. Используйте его для проверки корректной интеграции рекламы.

Демонстрационный adUnitId: demo-interstitial-yandex.

Важно

Убедитесь, что перед выкладыванием приложения в store, вы заменили демонстрационный идентификатор рекламного места на настоящий, полученный в ПИ.

Список всех доступных демонстрационных идентификаторов рекламного места доступен в разделе Демоблоки для тестирования.

Проверка корректной интеграции рекламы

Проверить корректность интеграции рекламы можно через нативный инструмент Console.

Чтобы получить возможность просматривать расширенные логи, необходимо вызвать метод enableLogging класса YMAMobileAds.

YMAMobileAds.enableLogging()

Для просмотра логов SDK в инструменте Console установите sybsystem = com.yandex.mobile.ads.sdk. Так же вы можете фильтровать логи по категории и по уровню ошибки.

В случае обнаружения проблем при интеграции рекламы вы увидите подробный отчет о проблемах и рекомендации по их устранению.

Советы

Предзагрузка объявления

Загрузка рекламного объявления может занимать до нескольких секунд в зависимости от количества подключенных рекламных сетей в мобильной медиации и скорости соединения пользователя. Рекомендуется предзагружать рекламные объявления перед показом.

Вы можете вызвать загрузку в методе Awake для gameObject. При этом важно сохранить объект между сценами, с помощью вызова DontDestroyOnLoad(), для того чтобы загруженное объявление не удалялось вместе с gameObject при смене сцен.

private void Awake()
{
    SetupLoader();
    RequestInterstitial();
    DontDestroyOnLoad(gameObject);
}

При этом к функциям обратного вызова на завершение показа или ошибки показа можно привязать загрузку следующего рекламного объявления. Например так:

public void HandleInterstitialFailedToShow(object sender, EventArgs args)
{
    // Called when an InterstitialAd failed to show.

    // Clear resources after Ad dismissed.
    DestroyInterstitial();

    // Now you can preload the next interstitial ad.
    RequestInterstitial();
}

public void HandleInterstitialDismissed(object sender, EventArgs args)
{
    // Called when ad is dismissed.

    // Clear resources after Ad dismissed.
    DestroyInterstitial();

    // Now you can preload the next interstitial ad.
    RequestInterstitial();
}

Избыточное кеширование объявлений на экранах, которые вряд ли будут показаны, может снизить эффективность рекламы. Например, если в среднем пользователи проходят 2–3 уровня игры за раз, не стоит кешировать объявления для 6–7 экранов. Так видимость рекламы снизится, и рекламная система может деприоритизировать приложение.

Чтобы кеширование работало на пользу приложения, обращайте внимание на метрику «Доля показов» или «Доля видимых показов» в партнерском интерфейсе. Если она ниже 20%, это повод задуматься над изменением алгоритма кеширования. Чем доля показов выше, тем лучше.

Полный пример кода

using System;
using UnityEngine;
using UnityEngine.UI;
using YandexMobileAds;
using YandexMobileAds.Base;

public class YandexMobileAdsInterstitialDemoScript : MonoBehaviour
{
    private InterstitialAdLoader interstitialAdLoader;
    private Interstitial interstitial;
    private Button button;

    private void Awake()
    {
        SetupLoader();
        RequestInterstitial();
        DontDestroyOnLoad(gameObject);
        button.onClick.AddListener(ShowInterstitial);
    }

    private void SetupLoader()
    {
        interstitialAdLoader = new InterstitialAdLoader();
        interstitialAdLoader.OnAdLoaded += HandleInterstitialLoaded;
        interstitialAdLoader.OnAdFailedToLoad += HandleInterstitialFailedToLoad;
    }

    private void RequestInterstitial()
    {
        string adUnitId = "demo-interstitial-yandex"; // замените на "R-M-XXXXXX-Y"
        AdRequestConfiguration adRequestConfiguration = new AdRequestConfiguration.Builder(adUnitId).Build();
        interstitialAdLoader.LoadAd(adRequestConfiguration);
    }

    private void ShowInterstitial()
    {
        if (interstitial != null)
        {
            interstitial.Show();
        }
    }

    public void HandleInterstitialLoaded(object sender, InterstitialAdLoadedEventArgs args)
    {
        // The ad was loaded successfully. Now you can handle it.
        interstitial = args.Interstitial;

        // Add events handlers for ad actions
        interstitial.OnAdClicked += HandleAdClicked;
        interstitial.OnAdShown += HandleInterstitialShown;
        interstitial.OnAdFailedToShow += HandleInterstitialFailedToShow;
        interstitial.OnAdImpression += HandleImpression;
        interstitial.OnAdDismissed += HandleInterstitialDismissed;
    }

    public void HandleInterstitialFailedToLoad(object sender, AdFailedToLoadEventArgs args)
    {
        // Ad {args.AdUnitId} failed for to load with {args.Message}
        // Attempting to load a new ad from the OnAdFailedToLoad event is strongly discouraged.
    }

    public void HandleInterstitialDismissed(object sender, EventArgs args)
    {
        // Called when ad is dismissed.

        // Clear resources after Ad dismissed.
        DestroyInterstitial();

        // Now you can preload the next interstitial ad.
        RequestInterstitial();
    }

    public void HandleInterstitialFailedToShow(object sender, EventArgs args)
    {
        // Called when an InterstitialAd failed to show.

        // Clear resources after Ad dismissed.
        DestroyInterstitial();

        // Now you can preload the next interstitial ad.
        RequestInterstitial();
    }

    public void HandleAdClicked(object sender, EventArgs args)
    {
        // Called when a click is recorded for an ad.
    }

    public void HandleInterstitialShown(object sender, EventArgs args)
    {
        // Called when ad is shown.
    }

    public void HandleImpression(object sender, ImpressionData impressionData)
    {
        // Called when an impression is recorded for an ad.
    }

    public void DestroyInterstitial()
    {
        if (interstitial != null)
        {
            interstitial.Destroy();
            interstitial = null;
        }
    }
}

Дополнительные ресурсы