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

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

# Рекламная лента

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

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

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

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

{% endcut %}

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

<!-- source: ru/dev/_includes/pre-android-feed.md -->
1. Выполните шаги по интеграции sdk, описанные в [Быстром старте](https://ads.yandex.com/helpcenter/ru/dev/android/quick-start.md).
2. Заранее [проинициализируйте](https://ads.yandex.com/helpcenter/ru/dev/android/quick-start.md#init) рекламный SDK.
3. Убедитесь, что используете самую [актуальную версию Yandex Mobile Ads SDK](https://ads.yandex.com/helpcenter/ru/dev/android/changelog-android.md).
<!-- endsource: ru/dev/_includes/pre-android-feed.md -->

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

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

* Задать параметры внешнего вида рекламной ленты через объект `FeedAdAppearance`.
* Создать и настроить конфигурацию запроса через объект `AdRequest`.
* Создать объект рекламной ленты `FeedAd` и зарегистрировать слушатель методов обратного вызова загрузки `FeedAdLoadListener`.
* Как можно раньше предзагрузить рекламу, вызвав `feedAd.preloadAd()`.
* Создать адаптер `FeedAdAdapter` и зарегистрировать слушатель методов обратного вызова событий `FeedAdEventListener`.
* Установить `FeedAdAdapter` в `RecyclerView.adapter`.

### Основные шаги

1. Создайте объект конфигурации внешнего вида рекламной ленты `FeedAdAppearance`.

   Доступны следующие параметры:

   * `cardWidth` (обязательный параметр) - задает ширину показываемого рекламного объявления в dp. Для расчета этого параметра ориентируйтесь на ширину экрана, вычитая необходимые отступы по бокам.
   * `cardCornerRadius` - задает радиус скругления углов показываемого рекламного объявления в dp.
  
   {% list tabs %}

   - Kotlin

     ```kotlin
     val feedMarginDp = 24
     val screenWidthDp = (screenWidth / resources.displayMetrics.density).roundToInt()
     val cardWidthDp = screenWidthDp - 2 * feedMarginDp
     val cardCornerRadiusDp = 16.0

     val feedAdAppearance = FeedAdAppearance.Builder(cardWidthDp)
	           .setCardCornerRadius(cardCornerRadiusDp)
	           .build()
     ```
  
   - Java

     ```java
     DisplayMetrics displayMetrics = getResources().getDisplayMetrics();

     int feedMarginDp = 24;
     int screenWidthDp = Math.round(displayMetrics.widthPixels / displayMetrics.density);
     val cardWidthDp = screenWidthDp - 2 * feedMarginDp;
     double cardCornerRadius = 16.0;

     FeedAdAppearance feedAdAppearance = new FeedAdAppearance.Builder(cardWidth)
         .setCardCornerRadius(cardCornerRadius)
         .build();
     ```

   {% endlist %}

2. Создайте и сконфигурируйте объект параметров запроса `AdRequest`.

   Потребуется идентификатор рекламного места, полученный вами в интерфейсе Рекламной сети Яндекса (`AD_UNIT_ID`).

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

   {% list tabs %}

   - Kotlin

     ```kotlin
     val AD_UNIT_ID = "R-M-XXXXXX-Y" // For debugging reasons you can use "demo-feed-yandex"
     val adRequest = AdRequest.Builder(AD_UNIT_ID).build()
     ```

   - Java

     ```java
     String AD_UNIT_ID = "R-M-XXXXXX-Y"; // For debugging reasons you can use "demo-feed-yandex"
     AdRequest adRequest = new AdRequest.Builder(AD_UNIT_ID).build();
     ```

   {% endlist %}

3. Создайте объект рекламной ленты `FeedAd` и зарегистрируйте слушатель методов обратного вызова загрузки `FeedAdLoadListener`.

   {% list tabs %}

   - Kotlin

     ```kotlin
     val feedAdLoadListener = object : FeedAdLoadListener {

         override fun onAdLoaded() {
    	       // Called when additional ads are received for display
         }

         override fun onAdFailedToLoad(error: AdRequestError) {
    	       // Called when additional ads request fails
         }
     }

     val feedAd = FeedAd.Builder(context, adRequest, feedAdAppearance).build()
     feedAd.loadListener = feedAdLoadListener
     ```

   - Java

     ```java
     FeedAdLoadListener feedAdLoadListener = new FeedAdLoadListener() {
         @Override
         public void onAdLoaded() {
             // Called when additional ads are received for display
         }

         @Override
         public void onAdFailedToLoad(AdRequestError error) {
             // Called when additional ads request fails
         }
     };

     FeedAd feedAd = new FeedAd.Builder(context, adRequest, feedAdAppearance).build();
     feedAd.setLoadListener(feedAdLoadListener);
     ```

   {% endlist %}

4. Как можно раньше предзагрузите рекламное объявление с помощью метода `preloadAd()` у `FeedAd`. По завершению предзагрузки рекламной ленты будет вызван один из методов `FeedAdLoadListener`.
   
   {% list tabs %}

   - Kotlin

     ```kotlin
     feedAd.preloadAd()
     ```
   
   - Java
  
     ```java
     feedAd.preloadAd();
     ```

   {% endlist %}

5. Создайте адаптер `FeedAdAdapter` и зарегистрируйте слушатель методов обратного вызова событий `FeedAdEventListener`.

   {% list tabs %}

   - Kotlin

     ```kotlin
     val feedAdEventListener = object : FeedAdEventListener {

         override fun onAdClicked() {
    	       // Called when user clicked on the ad
         }
    
         override fun onAdImpression(impressionData: ImpressionData?) {
    	       // Called when impression was observed
         }
     }

     val feedAdAdapter = FeedAdAdapter(feedAd)
     feedAdAdapter.eventListener = feedAdEventListener
     ```

   - Java
  
     ```java
     FeedAdEventListener feedAdEventListener = new FeedAdEventListener() {
         @Override
         public void onAdClicked() {
             // Called when user clicked on the ad
         }

         @Override
         public void onAdImpression(ImpressionData impressionData) {
             // Called when impression was observed
         }
     };

     FeedAdAdapter feedAdAdapter = new FeedAdAdapter(feedAd);
     feedAdAdapter.setEventListener(feedAdEventListener);
     ```

   {% endlist %}

6. Отобразите рекламную ленту.

   {% list tabs %}

   - Как основной список

     Установите созданный `FeedAdAdapter` в `RecyclerView.adapter`.

     * Kotlin

       ```kotlin
       binding.feedRecyclerView.layoutManager = LinearLayoutManager(context)
       binding.feedRecyclerView.adapter = feedAdAdapter
       ```
     * Java

       ```java
       binding.feedRecyclerView.setLayoutManager(new LinearLayoutManager(context));
       binding.feedRecyclerView.setAdapter(feedAdAdapter);
       ```
  
   - В дополнение к существущему списку

     Для добавления рекламной ленты к существующему списку `RecycerView` нужно воспользоваться [ConcatAdapter](https://developer.android.com/reference/androidx/recyclerview/widget/ConcatAdapter).

     [ConcatAdapter](https://developer.android.com/reference/androidx/recyclerview/widget/ConcatAdapter) позволит объединить адаптер `RecyclerView` существующего списка с адаптером рекламной ленты. Порядок передачи аргументов в конструктор [ConcatAdapter](https://developer.android.com/reference/androidx/recyclerview/widget/ConcatAdapter) задает порядок отображения списков соответствующих адаптеров.

     * Kotlin

       ```kotlin
       val screenContentDataAdapter = ScreenContentDataAdapter() // Your own implementation of RecyclerView.Adapter
       val concatAdapter = ConcatAdapter(listOf(screenContentDataAdapter, feedAdAdapter))

       binding.feedRecyclerView.layoutManager = LinearLayoutManager(context)
       binding.feedRecyclerView.adapter = concatAdapter
       ```
     * Java

       ```java
       ScreenContentDataAdapter screenContentDataAdapter = new ScreenContentDataAdapter(); // Your own implementation of RecyclerView.Adapter
       ConcatAdapter concatAdapter = new ConcatAdapter(Arrays.asList(screenContentDataAdapter, feedAdAdapter));

       binding.feedRecyclerView.setLayoutManager(new LinearLayoutManager(context));
       binding.feedRecyclerView.setAdapter(concatAdapter);
       ```
  
   {% endlist %}

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

Все вызовы методов Yandex Mobile Ads SDK необходимо выполнять из главного потока.

## Тестирование интеграции рекламной ленты {#test}

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

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

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

Демонстрационный Yandex Ad Unit ID: `demo-feed-yandex`.

{% note warning %}

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

{% endnote %}

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

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

Проверить корректность интеграции рекламной ленты можно через встроенный в 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 feed was integrated successfully
```

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