Адаптивный inline-баннер

Адаптивный inline-баннер — гибкий формат баннерной рекламы, обеспечивающий максимальную эффективность за счет оптимизации размера рекламы для каждого устройства.

Данный тип рекламы позволяет разработчикам указывать максимально допустимые ширину и высоту объявления, при этом наиболее оптимальный размер рекламы определяется автоматически. Чтобы выбрать лучший размер объявления, встроенные адаптивные баннеры используют максимальную, а не фиксированную высоту. Это приводит к возможности для повышения производительности.

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

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

Дополнительно об интеграции адаптивного inline-баннера смотрите в видео:

Пререквизит

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

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

Основные шаги по интеграции адаптивного inline-баннера:

  • Создать и настроить объект баннерной рекламы (Banner).
  • Зарегистрировать слушатель методов обратного вызова.
  • Загрузить рекламу.
  • Передать дополнительные настройки, если вы работаете через систему Adfox.

Особенности подключения адаптивного inline-баннера

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

  2. Чтобы адаптивные inline-баннеры работали правильно, сделайте макеты приложения адаптивными. Невыполнение этого требования может привести к некорректному отображению рекламы.

  3. Адаптивные inline-баннеры лучше всего работают при использовании всей доступной ширины. В большинстве случаев это будет полная ширина экрана используемого устройства. Обязательно учитывайте применимые в приложении отступы (padding) и безопасные зоны (safe area) дисплея.

  4. Адаптивный inline-баннер предназначен для размещения в прокручиваемом контенте. Баннер может быть такой же высоты, как экран устройства, или ограничен максимальной высотой, в зависимости от API.

  5. Для получения размера рекламного объявления воспользуйтесь методом BannerAdSize.InlineSize(screenWidth, maxAdHeight), принимающим в качестве аргументов доступную ширину рекламного контейнера и максимально допустимую высоту объявления.

  6. Объект BannerAdSize, рассчитанный с помощью метода BannerAdSize.InlineSize(screenWidth, maxAdHeight) содержит технические данные для выбора наиболее эффективных размеров рекламных объявлений на стороне бэкенда. Высота рекламного объявления может изменяться при каждой загрузке рекламы. Актуальные значения ширины и высоты рекламы доступны после получения сообщения об успешной загрузке рекламы.

Добавление Banner в проект

Чтобы отобразить баннер в вашем приложении, создайте объект Banner в скрипте (на C#), который прикреплен к GameObject.

using UnityEngine;
using YandexMobileAds;
using YandexMobileAds.Base;

public class YandexMobileAdsInlineBannerDemoScript : MonoBehaviour
{
    private Banner banner;

    private int GetScreenWidthDp()
    {
        int screenWidth = (int)Screen.safeArea.width;
        return ScreenUtils.ConvertPixelsToDp(screenWidth);
    }

    private void RequestInlineBanner()
    {   
        string adUnitId = "demo-banner-yandex"; // замените на "R-M-XXXXXX-Y"
        BannerAdSize bannerMaxSize = BannerAdSize.InlineSize(GetScreenWidthDp(), 100);
        banner = new Banner(adUnitId, bannerMaxSize, AdPosition.BottomCenter);
    }
}

Конструктор Banner содержит следующие параметры:

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

    Совет

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

  • BannerAdSize — размер баннера, который необходимо показать;

  • AdPosition — позиция на экране;

  • InlineSize(int width, int maxHeight) — размеры баннера.

Необходимо задать ширину и максимально допустимую высоту. Объявление встроится в эти размеры. При этом высота подобранного объявления будет не более чем высота экрана устройства.

Загрузка и отображение рекламы

После создания и настройки объекта класса Banner необходимо загрузить рекламу. Для загрузки рекламы используйте метод LoadAd, принимающий в качестве параметра объект AdRequest.

Перед загрузкой адаптивного inline-баннера, необходимо рассчитать размер рекламы для каждого устройства. Делается это автоматически через API sdk: BannerAdSize.InlineSize(screenWidth, maxAdHeight).

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

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

private void RequestInlineBanner()
{
    // ...

    AdRequest request = new AdRequest.Builder().Build();
    banner.LoadAd(request);
}

События баннерной рекламы

Чтобы отслеживать события, происходящие в баннерной рекламе, зарегистрируйте делегата для соответствующего EventHandler, как показано ниже:

using System;
// ...

private void RequestInlineBanner()
{
    // ...
    // Вызывается, когда реклама с вознаграждением была загружена
    banner.OnAdLoaded += HandleAdLoaded;

    // Вызывается, если во время загрузки произошла ошибка
    banner.OnAdFailedToLoad += HandleAdFailedToLoad;

    // Вызывается, когда приложение становится неактивным, так как пользователь кликнул на рекламу и сейчас перейдет в другое приложение (например, браузер).
    banner.OnLeftApplication += HandleLeftApplication;

    // Вызывается, когда пользователь возвращается в приложение после клика
    banner.OnReturnedToApplication += HandleReturnedToApplication;

    // Вызывается, когда пользователь кликнул на рекламу
    banner.OnAdClicked += HandleAdClicked;

    // Вызывается, когда зарегистрирован показ
    banner.OnImpression += HandleImpression;
    // ...
}

private void HandleAdLoaded(object sender, EventArgs args)
{
    Debug.Log("AdLoaded event received");
    banner.Show();
}

private void HandleAdFailedToLoad(object sender, AdFailureEventArgs args)
{
    Debug.Log($"AdFailedToLoad event received with message: {args.Message}");
    // Настоятельно не рекомендуется пытаться загрузить новое объявление с помощью этого метода
}

private void HandleLeftApplication(object sender, EventArgs args)
{
    Debug.Log("LeftApplication event received");
}

private void HandleReturnedToApplication(object sender, EventArgs args)
{
    Debug.Log("ReturnedToApplication event received");
}

private void HandleAdClicked(object sender, EventArgs args)
{
    Debug.Log("AdClicked event received");
}

private void HandleImpression(object sender, ImpressionData impressionData)
{
    var data = impressionData == null ? "null" : impressionData.rawData;
    Debug.Log($"HandleImpression event received with data: {data}");
}

Тестирование интеграции адаптивного inline-баннера

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

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

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

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

Важно

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

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

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

Проверить корректность интеграции адаптивного inline-баннера можно через встроенный в 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 banner was integrated successfully

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

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

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

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

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

Важно

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

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

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

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

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

YMAMobileAds.enableLogging()

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

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

Советы

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

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

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

Далее, когда баннер необходимо будет показать — просто вызвовите banner.Show().

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

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

Очищение неиспользуемой памяти

Рекомендуется вызывать banner?.Destroy() и создавать объект Banner заново перед каждым запросом рекламного объявления. Так гарантировано будет очищаться вся неиспользуемая память, а приложение сможет запрашивать и показывать рекламу множество раз не нагружая устройство сверх необходимого. При этом вы сможете избежать возможных ошибок в вашем коде при повторной загрузке и нарушении жизненного цикла рекламного объявления.

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