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

Виды адаптивных баннеров

В Yandex Mobile Ads SDK есть три вида адаптивных баннеров:

Баннер

Описание

Когда использовать

Sticky

Баннер-липучка, который примыкает к краю экрана и появляется поверх других элементов. Устойчивый к прокрутке.

Когда баннер должен «приклеиться» и находиться поверх контента даже при прокрутке.

Inline

Баннер, который встраивается как элемент UI — в списки, контент и т. д.

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

Fixed

Используется для закрепленных баннеров или когда пространство определено по высоте.

Когда нужно простое статичное размещение баннера — например, под тулбаром или снизу.

Все виды автоматически обновляют креатив каждые 60 секунд.

Совет

Чтобы установить свой период для автообновления, обратитесь к персональному менеджеру.

Программно виды отличаются лишь тем, как задается их размер. Примеры:

BannerAdSize.stickySize(withContainerWidth:)
BannerAdSize.inlineSize(withWidth:maxHeight:)
BannerAdSize.fixedSize(withWidth:height:)

Примечание

Пример работы всех типов форматов есть в демопроекте.

Сущность

Описание

BannerAdSize

Высота баннера должна:

  • не превышать 15% от высоты экрана;

  • составлять не менее 50 dp.

Все размеры баннера должны передаваться строго в dp.

adUnitId

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

  • development mode — для работы с демоблоками;

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

Пример создания адаптивного баннера

import UIKit
import YandexMobileAds

class BannerViewController: UIViewController {
    private let adUnitID = "ad-unit-ID" // Use R-M-XXXXXX-Y or "demo-banner-yandex" (look for the description below)
    
    private lazy var adView: AdView = {
        let adSize = BannerAdSize.inlineSize(withWidth: 320, maxHeight: 320)
        let adView = AdView(adUnitID: adUnitID, adSize: adSize)
        adView.delegate = self
        adView.translatesAutoresizingMaskIntoConstraints = false
        return adView
    }()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        setupUI()
        loadAd()
    }
    
    private func setupUI() {
        view.addSubview(adView)
        
        NSLayoutConstraint.activate([
            adView.centerXAnchor.constraint(equalTo: view.centerXAnchor),
            adView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor, constant: -20)
        ])
    }
    
    private func loadAd() {
        print("[Banner] Loading ad...")
        adView.loadAd()
    }
}

// MARK: - AdViewDelegate

extension BannerViewController: AdViewDelegate {
    func adViewDidLoad(_ adView: AdView) {
        print("[Banner] adViewDidLoad")
    }
    
    func adViewDidFailLoading(_ adView: AdView, error: Error) {
        print("[Banner] adViewDidFailLoading: \(error)")
    }
    
    func adViewDidClick(_ adView: AdView) {
        print("[Banner] adViewDidClick")
    }
    
    func adView(_ adView: AdView, didTrackImpression impressionData: ImpressionData?) {
        print("[Banner] didTrackImpression: \(impressionData?.rawData ?? "nil")")
    }
    
    func adViewWillLeaveApplication(_ adView: AdView) {
        print("[Banner] adViewWillLeaveApplication")
    }
    
    func adView(_ adView: AdView, willPresentScreen viewController: UIViewController?) {
        print("[Banner] willPresentScreen")
    }
    
    func adView(_ adView: AdView, didDismissScreen viewController: UIViewController?) {
        print("[Banner] didDismissScreen")
    }
}