---
metadata:
  - name: generator
    content: Diplodoc Platform v5.52.0
alternate:
  - https://ads.yandex.com/helpcenter/en/easy/integration/android/formats/native.md
  - https://ads.yandex.com/helpcenter/ru/easy/integration/android/formats/native.md
  - https://ads.yandex.com/helpcenter/zh/easy/integration/android/formats/native.md
  - href: ru/easy/integration/android/formats/native.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

# Нативная реклама

<!-- source: ru/easy/_includes/sdk-guide.md -->
Нативная реклама (Native) — реклама, внешний вид которой может определяться на стороне приложения. Эта особенность позволяет изменять визуальный стиль объявлений и места их размещения с учетом особенностей дизайна приложения.
<!-- endsource: ru/easy/_includes/sdk-guide.md -->

<!-- source: ru/easy/_includes/notes-android-easy-guide.md -->
{% note info %}

Пример работы всех типов форматов есть в [демопроекте](https://ads.yandex.com/helpcenter/ru/easy/integration/android/testing.md#demo).

{% endnote %}
<!-- endsource: ru/easy/_includes/notes-android-easy-guide.md -->

#|
||

**Сущность**

|

**Описание**

||
||

`onAdFailedToLoad`

|

При получении ошибки в `onAdFailedToLoad()` не пытайтесь загружать новое объявление снова **из этого же метода**.

||
||

`adUnitId`

|

Используйте:

- **development mode** — для работы с [демоблоками](https://ads.yandex.com/helpcenter/ru/easy/integration/android/testing.md#blocks);

- **production mode** — для работы с `R-M-XXXXXX-Y` (уточните реальный ID в интерфейсе Рекламной сети Яндекса). `R-M-XXXXXX-Y` — это вид рабочего рекламного ID, по которому будут приходить разные креативы.

||
|#

## Пример создания нативной рекламы {#example}

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

* Создать и настроить загрузчик рекламы NativeAdLoader.
* Зарегистрировать слушатель событий загрузчика объявлений.
* Загрузить рекламу.
* Отобразить загруженное объявление.

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

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

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

3. Рекомендуется держать сильную ссылку на рекламу и ее загрузчик на всем протяжении жизни экрана, в рамках которого происходит взаимодействие с рекламой.

4. Размер рекламного контейнера рекомендуется рассчитывать исходя из содержимого объявления.
После окончания загрузки рекламы, все ее компоненты необходимо отобразить. Список доступных в объявлении компонентов можно получить из объекта рекламы NativeAd.

5. Объявления с видео, как правило, показывают лучший результат. Для отображения рекламы с видео необходимо чтобы размер рекламного контейнера и компонента MediaView были не меньше 300x160 dp (density-independent pixels).

6. Рекомендуется использовать макет, который включает весь набор возможных компонентов. Как показывает практика, макеты, включающие весь набор компонентов, приводит к лучшим конверсиям.

## Загрузка рекламы {#load}

Для загрузки нативной рекламы необходимо создать объект `NativeAdLoader`.

Параметры запроса за рекламой настраиваются через объект класса `AdRequest.Builder`. В качестве параметров запроса можно передать идентификатор рекламного блока, способ загрузки изображений и другие данные, способные улучшить качество подбора рекламы.

Для получения уведомлений о результате загрузки объявлений, создайте экземпляр `NativeAdLoadListener` и передайте его в метод `loadAd()`.

Для загрузки рекламы вызовите метод `loadAd()`.

В примере ниже показано как загрузить нативную рекламу из Activity:

{% list tabs %}

- Kotlin
  ```kotlin
  class CustomNativeAdActivity : AppCompatActivity(R.layout.activity_custom_native_ad) {

    private val nativeAdView get() = binding.nativeAd.root

    private var nativeAdLoader: NativeAdLoader? = null

    private lateinit var binding: ActivityCustomNativeAdBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityCustomNativeAdBinding.inflate(layoutInflater)
        setContentView(binding.root)

        nativeAdLoader = NativeAdLoader(this)
        nativeAdLoader?.loadAd(
            // Methods in the AdRequest.Builder class can be used here to specify individual options settings.
            AdRequest.Builder("your-ad-unit-id").build(),
            object : NativeAdLoadListener {
                override fun onAdLoaded(p0: NativeAd) {
                    // The ad was loaded successfully. Now you can show loaded ad.
                }

                override fun onAdFailedToLoad(p0: AdRequestError) {
                    // Ad failed to load with AdRequestError.
                    // Attempting to load a new ad from the onAdFailedToLoad() method is strongly discouraged.
                }
            })
    }
  }
  ```
- Java
  ```java
  class CustomNativeAdActivity extends AppCompatActivity {
    private NativeAdView mNativeAdView = mBinding.nativeAd.getRoot();

    @Nullable private NativeAdLoader mNativeAdLoader = null;

    private ActivityCustomNativeAdBinding mBinding;

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mBinding = ActivityCustomNativeAdBinding.inflate(getLayoutInflater());
        setContentView(mBinding.getRoot());

        mNativeAdLoader = new NativeAdLoader(this);
        // Methods in the AdRequest.Builder class can be used here to specify individual options settings.
        mNativeAdLoader.loadAd(
                new AdRequest.Builder("your-ad-unit-id").build(),
                new NativeAdLoadListener() {
                    @Override
                    public void onAdLoaded(@NonNull final NativeAd nativeAd) {
                        // The ad was loaded successfully. Now you can show loaded ad.
                    }

                    @Override
                    public void onAdFailedToLoad(@NonNull final AdRequestError error) {
                        // Ad failed to load with AdRequestError.
                        // Attempting to load a new ad from the onAdFailedToLoad() method is strongly discouraged.
                    }
                }
        );
    }
  }
  ```
{% endlist %}

## Показ рекламных объявлений {#ad-view}

После окончания загрузки рекламы, все ее компоненты необходимо отобразить. Список доступных в объявлении компонентов можно получить из объекта рекламы NativeAd.

{% note tip %}

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

{% endnote %}

Для каждого компонента рекламного объявления предоставьте View через экземпляр класса `NativeAdViewBinder.Builder`. Класс принимает в качестве аргумента контейнер `NativeAdView`. Все компоненты рекламы должны быть определены как subview данного контейнера.

Сформированный макет рекламного объявления необходимо связать с объектом нативной рекламы `NativeAd`.

{% cut "Пример кода" %}

   {% list tabs %}

   - Kotlin

     ```kotlin
     private fun showAd(nativeAd: NativeAd) {
         val nativeAdViewBinder = binding.nativeAd.run {
             NativeAdViewBinder.Builder(nativeAdView)
                 .setAgeView(age)
                 .setBodyView(body)
                 .setCallToActionView(callToAction)
                 .setDomainView(domain)
                 .setFaviconView(favicon)
                 .setFeedbackView(feedback)
                 .setIconView(icon)
                 .setMediaView(media)
                 .setPriceView(price)
                 .setRatingView(rating)
                 .setReviewCountView(reviewCount)
                 .setSponsoredView(sponsored)
                 .setTitleView(title)
                 .setWarningView(warning)
                 .build()
         }

         when (val result = nativeAd.bindNativeAd(nativeAdViewBinder)) {
             is AdBindingResult.Failure -> {
                 Logger.error(result.exception.message.orEmpty())
             }
             AdBindingResult.Success -> {
                 nativeAd.setNativeAdEventListener(NativeAdEventLogger())
             }
         }
     }

     private inner class NativeAdEventLogger : NativeAdEventListener {

         override fun onAdClicked() {
             // Called when a click is recorded for an ad.
         }

         override fun onImpression(data: ImpressionData?) {
             // Called when an impression is recorded for an ad.
         }
     }
     ```

   - Java

     ```java
     private void showAd(@NonNull final NativeAd nativeAd) {
         final NativeAdViewBinder nativeAdViewBinder = new NativeAdViewBinder.Builder(mNativeAdView)
                 .setAgeView(age)
                 .setBodyView(body)
                 .setCallToActionView(callToAction)
                 .setDomainView(domain)
                 .setFaviconView(favicon)
                 .setFeedbackView(feedback)
                 .setIconView(icon)
                 .setMediaView(media)
                 .setPriceView(price)
                 .setRatingView(rating)
                 .setReviewCountView(reviewCount)
                 .setSponsoredView(sponsored)
                 .setTitleView(title)
                 .setWarningView(warning)
                 .build();
         AdBindingResult result = nativeAd.bindNativeAd(nativeAdViewBinder);
         if (result instanceof AdBindingResult.Failure) {
             Log.e("TAG", ((AdBindingResult.Failure) result).getException().getMessage());
         } else {
             nativeAd.setNativeAdEventListener(new CustomNativeAdActivity.NativeAdEventLogger());
         }
     }

     private class NativeAdEventLogger implements NativeAdEventListener {
         @Override
         public void onAdClicked() {
             // Called when a click is recorded for an ad.
         }

         @Override
         public void onImpression(@Nullable ImpressionData data) {
             // Called when an impression is recorded for an ad.
         }
     }
     ```
   {% endlist %}

{% endcut %}

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

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

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

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

Демонстрационный `adUnitId` для комбинаторной рекламы: `demo-native-content-yandex`.

Демонстрационный `adUnitId` для рекламы мобильных приложений: `demo-native-app-yandex`.

{% note warning %}

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

{% endnote %}

<!-- Список всех доступных демонстрационных идентификаторов рекламного места доступен в разделе [Тестовые объявления](ссылка). -->

### Проверка корректной интеграции рекламы {#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 native was integrated successfully
```

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

### Индикатор корректной интеграции нативной рекламы {#indicator}

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

Чтобы включить отображение индикатора в отладочном режиме, вызовите метод `enableDebugErrorIndicator` со значением `true`:

```java
YandexAds.enableDebugErrorIndicator(true)
```
{% list tabs %}

- Успешная интеграция

  Если интеграция прошла успешно, то в отладочном режиме, поверх рекламного объявления появится рамка светлого зеленого цвета.

  <img src="https://yastatic.net/s3/doc-binary/src/dev/mobile-ads/ru/images/indicator-ok.png">

- Интеграция с ошибкой

  Если при интеграции нативной рекламы допущена ошибка, то в отладочном режиме, поверх рекламного объявления, появится индикатор. По нажатию на индикатор вы увидите сообщение с отладочной информацией, по которой можно понять причину ошибки. Повторное нажатие на индикатор скрывает сообщение.

  #|
   || <img src="https://yastatic.net/s3/doc-binary/src/dev/mobile-ads/ru/images/house_closed_1.png"> | <img src="https://yastatic.net/s3/doc-binary/src/dev/mobile-ads/ru/images/house_open_1.png"> ||
  |#


{% endlist %}

Чтобы выключить отображение индикатора в отладочном режиме, вызовите метод `enableDebugErrorIndicator` со значением `false`:

```java
YandexAds.enableDebugErrorIndicator(false)
```
