---
metadata:
  - name: generator
    content: Diplodoc Platform v5.50.6
alternate:
  - https://ads.yandex.com/helpcenter/en/dev/unity/adaptive-sticky-banner.md
  - https://ads.yandex.com/helpcenter/ru/dev/unity/adaptive-sticky-banner.md
  - https://ads.yandex.com/helpcenter/zh/dev/unity/adaptive-sticky-banner.md
---
> **Documentation Index:** Fetch the complete configuration index at https://ads.yandex.com/helpcenter/ru/llms.txt

<!--
Используется в Boost: boost/ru/ad-monetization/dev/unity
-->

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

<!-- source: ru/dev/_includes/adaptive-sticky-banner.md -->
Адаптивный sticky-баннер — небольшое, автоматически обновляемое рекламное объявление. Оно располагается в нижней или верхней части экрана приложения. Баннер не перекрывает основной контент и часто используется в приложениях-играх.
<!-- endsource: ru/dev/_includes/adaptive-sticky-banner.md -->

<!-- source: ru/dev/_includes/adaptive-sticky-banner.md -->
Адаптивный sticky-баннер обеспечивает максимальную эффективность за счет оптимизации размера рекламы для каждого устройства. Данный тип рекламы позволяет разработчикам указывать максимально допустимую ширину объявления, при этом оптимальный размер рекламы определяется автоматически.
<!-- endsource: ru/dev/_includes/adaptive-sticky-banner.md -->

{% cut "Внешний вид" %}

<img src="https://yastatic.net/s3/doc-binary/src/docs/support/mobile-ads/ru/monetization/_images/banner-sticky-ru-ex.png" width="200">

{% endcut %}

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


## Пререквизит {#pre}

<!-- source: ru/dev/_includes/pre-unity.md -->
1. Выполните шаги по интеграции Yandex Mobile Ads Unity Plugin, описанные в [Быстром старте](https://ads.yandex.com/helpcenter/ru/dev/unity/quick-start.md).
2. Убедитесь, что используете самую [актуальную версию Yandex Mobile Ads Unity Plugin](https://ads.yandex.com/helpcenter/ru/dev/platforms.md), а в случае использовании медиации — наиболее свежую [версию единой сборки](https://ads.yandex.com/helpcenter/ru/dev/platforms.md).
<!-- endsource: ru/dev/_includes/pre-unity.md -->

## Имплементация {#implement}

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

* Создать и настроить объект баннерной рекламы (Banner).
* Зарегистрировать слушатель методов обратного вызова.
* Загрузить рекламу.
* Передать [дополнительные настройки](https://ads.yandex.com/helpcenter/ru/dev/unity/target-adfox.md), если вы работаете через систему Adfox.

## Особенности подключения адаптивного sticky-баннера {#features}

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

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

3. Для получения размера рекламного объявления, воспользуйтесь методом `BannerAdSize.Sticky(adWidth)`, принимающий в качестве аргумента доступную ширину рекламного контейнера.

4. Объект `BannerAdSize`, рассчитанный с помощью метода `BannerAdSize.Sticky(adWidth)` содержит постоянные значения ширины и высоты рекламы для одного и того же устройства. Протестировав макет своего приложения на конкретном устройстве, вы можете быть уверены, что размер объявления не изменится.

5. Высота адаптивного sticky-баннера не будет превышать 15% высоты экрана и не меньше 50dp.

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

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

public class YandexMobileAdsStickyBannerDemoScript : MonoBehaviour
{
    private Banner banner;

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

    private void RequestStickyBanner()
    {   
        BannerAdSize bannerMaxSize = BannerAdSize.Sticky(GetScreenWidthDp());
        banner = new Banner(bannerMaxSize, AdPosition.BottomCenter);
    }
}
```

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

* `BannerAdSize` — размер баннера, который необходимо показать;
* `AdPosition` — позиция на экране;
* `Sticky(int width)` — размеры баннера.

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

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

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

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

Расширить параметры запроса за рекламой можно через класс `AdTargeting`, передав в запросе данные об интересах пользователя, контекстные данные страницы, локацию или другие дополнительные данные. Дополнительные контекстные данные на запросе могут значительно улучшить качество рекламы. Подробнее читайте в разделе [Таргетирование рекламы](https://ads.yandex.com/helpcenter/ru/dev/unity/target.md).

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

```c#
private void RequestStickyBanner()
{
    // ...

    string adUnitId = "demo-banner-yandex"; // замените на "R-M-XXXXXX-Y"
    AdRequest request = new AdRequest(adUnitId);
    banner.LoadAd(request);
}
```

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

Чтобы отслеживать события, происходящие в баннерной рекламе, зарегистрируйте делегата для соответствующего `EventHandler`, как показано ниже:
```c#
using System;
// ...

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

    // Вызывается, если во время загрузки произошла ошибка
    banner.OnAdFailedToLoad += HandleAdFailedToLoad;
    
    // Вызывается, когда пользователь кликнул на рекламу
    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 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}");
}
```

## Тестирование интеграции адаптивного sticky-баннера {#test}

{% list tabs %}

- Android

  <!-- source: ru/dev/_includes/test-android-sticky-banner.md -->
  ### Использование демоблоков для тестирования рекламы {#demo-blocks}

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

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

  {% note warning %}

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

  {% endnote %}

  Список всех доступных демонстрационных идентификаторов рекламного места доступен в разделе [Демоблоки для тестирования](https://ads.yandex.com/helpcenter/ru/dev/android/demo-blocks.md).

  ### Проверка корректной интеграции рекламы {#test-int}

  Проверить корректность интеграции адаптивного sticky-баннера можно через встроенный в SDK анализатор. Подробный отчет о проверке выведется в лог.

  Для просмотра отчета, выполните поиск по ключевому слову YandexAds в инструменте отладки Android-приложений [Logcat](https://developer.android.com/studio/command-line/logcat).

  ```bash
  adb logcat -v brief '*:S YandexAds'
  ```

  В случае успешной интеграции вы увидите следующее сообщение:
  ```bash
  adb logcat -v brief '*:S YandexAds'
  mobileads$ adb logcat -v brief '*:S YandexAds'
  I/YandexAds(13719): [Integration] Ad type banner was integrated successfully
  ```

  В случае обнаружения проблем при интеграции баннерной рекламы вы получите подробный отчет о проблемах и рекомендации по их устранению.
  <!-- endsource: ru/dev/_includes/test-android-sticky-banner.md -->

- iOS

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

  <!-- source: ru/dev/_includes/test-ios-inline-banner.md -->
  Для проверки корректной интеграции рекламы и тестирования приложения используйте тестовую рекламу. Для гарантированного возврата тестовых объявлений на каждый запрос за рекламой вы можете использовать специальный демонстрационный идентификатор рекламного места.

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

  {% note warning %}

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

  {% endnote %}

  Список всех доступных демонстрационных идентификаторов рекламного места доступен в разделе [Демоблоки для тестирования](https://ads.yandex.com/helpcenter/ru/dev/ios/demo-blocks.md).
  <!-- endsource: ru/dev/_includes/test-ios-inline-banner.md -->

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

  <!-- source: ru/dev/_includes/test-integration-ios.md -->
  Проверить корректность интеграции рекламы можно через нативный инструмент Console.

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

  ```swift
  YandexAds.enableLogging()
  ```

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

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

  <img src= "https://yastatic.net/s3/doc-binary/src/dev/mobile-ads/common/integration-ios-2.png">
  <!-- endsource: ru/dev/_includes/test-integration-ios.md -->

{% endlist %}

## Советы

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

<!-- source: ru/dev/_includes/preload.md -->
Загрузка рекламного объявления может занимать до нескольких секунд в зависимости от количества подключенных рекламных сетей в мобильной медиации и скорости соединения пользователя. Рекомендуется предзагружать рекламные объявления перед показом.
<!-- endsource: ru/dev/_includes/preload.md -->

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

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

<!-- source: ru/dev/_includes/cash-ads.md -->
Избыточное кеширование объявлений на экранах, которые вряд ли будут показаны, может снизить эффективность рекламы. Например, если в среднем пользователи проходят 2–3 уровня игры за раз, не стоит кешировать объявления для 6–7 экранов. Так видимость рекламы снизится, и рекламная система может деприоритизировать приложение.

Чтобы кеширование работало на пользу приложения, обращайте внимание на метрику «Доля показов» или «Доля видимых показов» в интерфейсе Рекламной сети Яндекса. Если она ниже 20%, это повод задуматься над изменением алгоритма кеширования. Чем доля показов выше, тем лучше.
<!-- endsource: ru/dev/_includes/cash-ads.md -->

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

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

## Дополнительные ресурсы {#resources}

* <!-- source: ru/dev/_includes/github-pubdev-links.md -->
  Ссылка на [github](https://github.com/yandexmobile/yandex-ads-unity-plugin).
  <!-- endsource: ru/dev/_includes/github-pubdev-links.md -->
