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


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

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

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

<!-- source: ru/dev/_includes/native-ads.md -->
Нативная реклама — реклама, внешний вид которой может определяться на стороне приложения. Данная особенность позволяет изменять визуальный стиль объявлений и места их размещения с учетом особенностей дизайна приложения.
<!-- endsource: ru/dev/_includes/native-ads.md -->

<!-- source: ru/dev/_includes/native-ads.md -->
Нативные объявления улучшают впечатления от рекламы, поэтому вы можете показывать больше объявлений, не теряя интерес пользователей. Это позволяет обеспечить максимальный доход от рекламы в долгосрочной перспективе.
<!-- endsource: ru/dev/_includes/native-ads.md -->

<!-- source: ru/dev/_includes/native-ads.md -->
Отрисовка рекламы производится нативными средствами платформы, что увеличивает ее производительность и качество.
<!-- endsource: ru/dev/_includes/native-ads.md -->

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

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

{% endcut %}

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


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

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

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

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

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

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

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

2. Попытка загрузить новое объявление при получении ошибки загрузки настоятельно не рекомендуется. При использовании completion handler это case `.failure`, при использовании Swift Concurrency — блок `catch`. Если вам необходимо повторить загрузку, ограничьте повторные попытки загрузки рекламы, чтобы избежать постоянных неудачных запросов за рекламой в случае ограничений подключения к сети.

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

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

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

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

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

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

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

Параметры запроса за рекламой настраиваются через объект класса `AdRequest`. В качестве параметров запроса нужно передать идентификатор рекламного блока, также дополнительно можно настроить таргетинг и другие данные, способные улучшить качество подбора рекламы. Параметры загрузки изображений передаются через `NativeAdOptions`. Подробнее читайте в разделе [Таргетирование рекламы](https://ads.yandex.com/helpcenter/ru/dev/ios/target.md).

Для загрузки рекламы используйте метод `loadAd(with:options:completion:)` с completion handler или Swift Concurrency вариант `loadAd(with:options:)`.

В следующем примере показано как загрузить нативную рекламу из View Controller:

{% list tabs %}

- Swift Concurrency

  ```swift
  final class CustomNativeViewController: UIViewController {
      private var adLoader: NativeAdLoader?

      override func viewDidLoad() {
          adLoader = NativeAdLoader()
      }

      private func loadNativeAd() async {
          let request = AdRequest(adUnitID: "R-M-XXXXX-YY")
          let options = NativeAdOptions()
          do {
              let ad = try await adLoader?.loadAd(with: request, options: options)
              // Notifies that a native ad is loaded
          } catch {
              // Notifies that the ad failed to load
          }
      }
  }
  ```

- Completion handler

  ```swift
  final class CustomNativeViewController: UIViewController {
      private var adLoader: NativeAdLoader?

      override func viewDidLoad() {
          adLoader = NativeAdLoader()
      }

      private func loadNativeAd() {
          let request = AdRequest(adUnitID: "R-M-XXXXX-YY")
          let options = NativeAdOptions()
          adLoader?.loadAd(with: request, options: options) { [weak self] result in
              switch result {
              case .success(let ad):
                  // Notifies that a native ad is loaded
                  break
              case .failure:
                  // Notifies that the ad failed to load
                  break
              }
          }
      }
  }
  ```

{% endlist %}

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

{% note warning %}

Начиная с версии 8.0.0 нативные шаблоны (`NativeBannerView`, `MutableNativeTemplateAppearance` и связанные классы) полностью удалены из SDK. Используйте ручную настройку внешнего оформления нативной рекламы, описанную ниже.

{% endnote %}

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

## Ручная настройка внешнего оформления нативной рекламы {#config}

Данный способ позволяет самостоятельно сверстать макет нативной рекламы, определить расположение компонентов рекламы относительно друг друга. В объявлении могут присутствовать как обязательные, так и опциональные для показа компоненты. Полный их перечень можно найти в разделе [Компоненты нативной рекламы](https://ads.yandex.com/helpcenter/ru/dev/ios/components.md).

{% note tip %}

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

{% endnote %}

Чтобы вручную настроить отображение нативной рекламы:

1. Создайте кастомное `view` для класса `NativeAdView`.
1. Настройте расположение кастомных элементов для отображения компонентов.
1. Свяжите эти кастомные элементы с соответствующими свойствами `NativeAdView`:

    ```swift
    final class CustomNativeAdView: NativeAdView {
        // ...

        init() {
            super.init(frame: CGRect())
            setupUI()
            bindAssets()
        }

        private func bindAssets() {
            titleLabel = customTitleLabel
            domainLabel = customDomainLabel
            warningLabel = customWarningLabel
            sponsoredLabel = customSponsoredLabel
            feedbackButton = customFeedbackButton
            callToActionButton = customCallToActionButton
            mediaView = customMediaView
            priceLabel = customPriceLabel
            reviewCountLabel = customReviewCountLabel
            ratingView = customRatingView
            bodyLabel = customBodyLabel
            iconImageView = customIconImageView
        }

        private func setupUI() {
        // ...
        }
    }
    ```

    {% note info %}

    Если вы не свяжете кастомный элемент со свойством `NativeAdView` для обязательного компонента, реклама не будет показана.

    {% endnote %}

1. Привяжите кастомный `view` к объекту рекламы `NativeAd` для отображения нативной рекламы после успешной загрузки рекламы. Для этого вызовите метод `bind(with adView: NativeAdView)` у объекта `NativeAd`:

    ```swift
    final class NativeCustomViewController: UIViewController, NativeAdDelegate {
        private let adView = NativeCustomAdView()

        // ...

        private lazy var adLoader: NativeAdLoader = {
            let adLoader = NativeAdLoader()
            return adLoader
        }()

        override func viewDidLoad() {
            super.viewDidLoad()
            setupUI()
            loadNativeAd()
        }

        private func loadNativeAd() {
            let request = AdRequest(adUnitID: "demo-native-app-yandex")
            let options = NativeAdOptions()
            adLoader.loadAd(with: request, options: options) { [weak self] result in
                if case .success(let ad) = result {
                    self?.bindNativeAd(ad)
                }
            }
        }

        private func bindNativeAd(_ ad: NativeAd) {
            ad.delegate = self
            do {
                try ad.bind(with: adView)
            } catch {
                // ...
            }
        }

        private func setupUI() {
        // ...
        }
    }

    ```

## Загрузка нескольких рекламных объявлений {#load-more-ads}

Yandex Mobile Ads SDK предоставляет возможность загрузки нескольких рекламных объявлений одним запросом (до девяти объявлений).

{% note info %}

Используйте демоблок `demo-native-bulk-yandex` для `AdUnitID`. Посмотреть поддерживаемые платформы можно на странице [Демоблоки для тестирования](https://ads.yandex.com/helpcenter/ru/dev/ios/demo-blocks.md).

{% endnote %}

1. Создайте экземпляр класса `NativeBulkAdLoader` для получения нативных объявлений.

2. Создайте `AdRequest` с идентификатором рекламного блока и `NativeAdOptions` для дополнительных параметров (изображения и т.д.).

3. Вызовите метод `loadAds(with:adsCount:options:completion:)` для загрузки рекламы.





{% list tabs %}

- Swift Concurrency

  ```swift
  let request = AdRequest(adUnitID: AdUnitID)
  let options = NativeAdOptions()
  let adLoader = NativeBulkAdLoader()

  do {
      let ads = try await adLoader.loadAds(with: request, adsCount: adsCount, options: options)
      // Отдельная работа с каждым объектом NativeAd
  } catch {
      // Ошибка загрузки
  }
  ```

- Completion handler

  ```swift
  let request = AdRequest(adUnitID: AdUnitID)
  let options = NativeAdOptions()
  let adLoader = NativeBulkAdLoader()

  adLoader.loadAds(with: request, adsCount: adsCount, options: options) { result in
      switch result {
      case .success(let ads):
          // Отдельная работа с каждым объектом NativeAd
          break
      case .failure:
          break
      }
  }
  ```

{% endlist %}

{% note info %}

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

Массив рекламных объявлений, полученный в результате балкового запроса, может содержать от 0 до `adsCount` объектов `NativeAd`. Все полученные объекты рекламы можно показывать независимо друг от друга, используя описанные выше способы внешнего оформления нативных объявлений.

{% endnote %}

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

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

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

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

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

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

{% note warning %}

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

{% endnote %}

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

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

<!-- 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 -->

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

{% note info %}

По умолчанию индикатор отображается только в режиме симулятора (тип устройства `DeviceTypeSimulator`). Типы устройства можно посмотреть в `DeviceType`.

{% endnote %}

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

Чтобы включить индикатор также и для реальных устройств, передайте значение `DeviceTypeHardware | DeviceTypeSimulator` в методе `enableVisibilityErrorIndicatorForDeviceType:`.

```swift
YandexAds.enableVisibilityErrorIndicator(for: [.hardware, .simulator])
```

Чтобы выключить индикатор, передайте значение `DeviceTypeNone` в методе `enableVisibilityErrorIndicatorForDeviceType:`.

```swift
YandexAds.enableVisibilityErrorIndicator(for: [])
```

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

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

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