---
metadata:
  - name: generator
    content: Diplodoc Platform v5.52.0
alternate:
  - https://ads.yandex.com/helpcenter/en/dev/unity/adaptive-inline-banner.md
  - https://ads.yandex.com/helpcenter/pt/dev/unity/adaptive-inline-banner.md
  - https://ads.yandex.com/helpcenter/ru/dev/unity/adaptive-inline-banner.md
  - https://ads.yandex.com/helpcenter/zh/dev/unity/adaptive-inline-banner.md
  - href: ru/dev/unity/adaptive-inline-banner.md
    type: text/markdown
    title: Markdown version
  - href: llms.txt
    type: text/markdown
    title: llms.txt
---
> **Documentation Index:** Fetch the complete configuration index at https://ads.yandex.com/helpcenter/ru/llms.txt


[//]: # (Эта страница переводится также на бразильский португальский — pt-BR)

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

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

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

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

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

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

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

{% endcut %}

Это руководство покажет, как интегрировать адаптивный inline-баннер в 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}

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

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

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

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

2. Чтобы адаптивные inline-баннеры работали правильно, [сделайте макеты приложения адаптивными](https://developer.android.com/guide/topics/large-screens/support-different-screen-sizes). Невыполнение этого требования может привести к некорректному отображению рекламы.

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

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

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

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

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

Чтобы отобразить баннер в вашем приложении, создайте объект `Banner` в скрипте (на C#), который прикреплен к `GameObject`.
```c#
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()
    {   
        BannerAdSize bannerMaxSize = BannerAdSize.Inline(GetScreenWidthDp(), 100);
        banner = new Banner(bannerMaxSize, AdPosition.BottomCenter);
    }
}
```

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

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

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

* `Inline(int width, int maxHeight)` — размеры баннера.

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

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

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

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

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

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

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

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

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

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

```c#
using System;
// ...

private void RequestInlineBanner()
{
    // ...
    // Вызывается, когда баннерная реклама загружена
    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}");
}
```

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

{% list tabs %}

- Android

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

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

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

  {% note warning %}

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

  {% endnote %}

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

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

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