Подключение баннерной рекламы

Внимание.

Это архивная версия документации. Актуальная документация по всем платформам находится здесь.

  1. Типы баннера
  2. Подключение баннера
  3. Пример работы с баннером

Типы баннера

Особенности:

  1. Используется заданная ширина баннера. Высота подбирается автоматически.
  2. Ширина баннера задается с помощью метода +stickySizeWithContainerWidth:.
  3. Высота баннера не должна превышать 15% высоты устройства и не должна быть меньше 50 dp.

Примеры отображения баннера:

Подключение баннера

Чтобы подключить баннер:

  1. Добавьте импорт:

    import YandexMobileAds
  2. Создайте @property, где будет храниться ссылка на баннер:

    var adView: YMAAdView!
  3. Создайте баннер:

    Чтобы задать ширину баннера, вызовите метод +stickySizeWithContainerWidth:.

    let adSize = YMAAdSize.stickySize(withContainerWidth: width)
    let adView = YMAAdView(adUnitID: "", adSize: adSize)
    adView.delegate = self
    Ограничение. Требования к размерам баннера при отображении видеорекламы

    Минимальный размер баннера, в котором поддерживается воспроизведение видео: 300x160 или 160x300.

    AdUnitId — уникальный идентификатор рекламного места, который выдается в Партнерском интерфейсе и имеет вид: R-M-XXXXXX-Y.

    При этом self должен удовлетворять протоколу YMAAdViewDelegate. В случае если делегат реализует метод -viewControllerForPresentingModalView, ссылки будут открываться во встроенном браузере внутри приложения. Иначе ссылки будут открываться в браузере, установленном на устройстве.

    Чтобы определить причины, по которым реклама работает некорректно, используйте метод -adViewDidFailLoading:error:.

    Описание ошибок доступно в разделе YMAAdErrorCode.

  4. Разместите баннер. Вы можете разместить баннер двумя способами:

    • С помощью autolayout constraints.

      Добавьте баннер в UIView. Затем добавьте autolayout constraints, чтобы баннер отображался в нужном месте.
      view.addSubview(adView)
      adView.translatesAutoresizingMaskIntoConstraints = false
      var adViewConstraints = [
          adView.leadingAnchor.constraint(equalTo: adView.superview!.leadingAnchor),
          adView.trailingAnchor.constraint(equalTo: adView.superview!.trailingAnchor)
      ]
      let bottomDistance: CGFloat = 8
      if #available(iOS 11.0, *) {
          adViewConstraints.append(
              adView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor, constant: bottomDistance)
          )
      } else {
          adViewConstraints.append(
              adView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: bottomDistance)
          )
      }
      NSLayoutConstraint.activate(adViewConstraints)
    • С помощью следующих методов:
      displayAtTop(in:)
      displayAtBottom(in:)

      В обоих случаях баннеры центрируются по горизонтали.

  5. Загрузите баннер. Опционально, с помощью класса YMAAdRequest, можно передать данные для таргетирования.

    func loadAd(with request: YMAAdRequest?)

    Когда баннер загрузится, делегат получит об этом уведомление.

  6. Опционально можно включить логирование с помощью метода +enableLogging. Если показ рекламы не был засчитан, в консоли появится сообщение.

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

    Пример реализации
    // Получение экземпляра YMAVideoController с помощью videoController.
    let videoController = adView.videoController
    
    // Установка делегата, который реализует протокол YMAVideoDelegate.
    videoController.delegate = self
    
    // Реализация метода протокола YMAVideoDelegate.
    // MARK: - YMAVideoDelegate
    func videoControllerDidFinishPlayingVideo(_ videoController: YMAVideoController) {
        print("Video complete");
    }

Если реклама подключена данным образом, после запуска приложения появится баннер.

Чтобы посмотреть, как баннерная реклама будет отображаться в приложении, используйте демонстрационный AdUnitID:
  • demo-banner-yandex

Пример работы с баннером

Следующий код демонстрирует создание и настройку объекта AdView, регистрацию слушателя, а также загрузку баннера.

override func viewDidLoad() {
    super.viewDidLoad()

    // Задание ширины рекламы
    let adSize = YMAAdSize.stickySize(withContainerWidth: containerWidth())

    // Создание экземпляра adView
    adView = YMAAdView(adUnitID: "R-M-XXXXX-YY", adSize: adSize)
    adView.delegate = self
    addAdView()

    // Загрузка рекламы
    adView.loadAd()
}

private func addAdView() {
    view.addSubview(adView)
    adView.translatesAutoresizingMaskIntoConstraints = false
    var adViewConstraints = [
        adView.leadingAnchor.constraint(equalTo: adView.superview!.leadingAnchor),
        adView.trailingAnchor.constraint(equalTo: adView.superview!.trailingAnchor)
    ]
    let bottomDistance: CGFloat = 8
    if #available(iOS 11.0, *) {
        adViewConstraints.append(
            adView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor, constant: bottomDistance)
        )
    } else {
        adViewConstraints.append(
            adView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: bottomDistance)
        )
    }
    NSLayoutConstraint.activate(adViewConstraints)
}

private func containerWidth() -> CGFloat {
    var containerWidth = view.frame.width
    if #available(iOS 11, *) {
        containerWidth = view.frame.inset(by: view.safeAreaInsets).width
    }
    return containerWidth
}