Межстраничная реклама

Межстраничная реклама (Interstitial) — полноэкранный формат рекламы, встраиваемый в контент приложения во время естественных пауз, таких как переход между уровнями игры или окончание выполнения целевого действия.

Примечание

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

Сущность

Описание

didFailToLoadWithError

При получении ошибки в func interstitialAdLoader(_ adLoader: InterstitialAdLoader, didFailToLoadWithError error: AdRequestError) не пытайтесь загружать новое объявление снова из этого же метода.

InterstitialAdLoaderDelegate

Не сохраняйте ссылки на ранее отображенные объявления. Вызовите set AddEventListener(null) для ранее отображенных объявлений. Вызовите setAdLoadListener(null) для загрузчика, если он больше не используется. Это освобождает ресурсы и предотвращает утечки памяти.

adUnitId

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

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

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

Пример создания межстраничной рекламы с готовым xml

import UIKit
import YandexMobileAds

class InterstitialViewController: UIViewController {
    private let adUnitID = "ad-unit-ID" // Use R-M-XXXXXX-Y or "demo-interstitial-yandex" (look for the description below)
    
    private var interstitialAd: InterstitialAd?
    
    private lazy var interstitialAdLoader: InterstitialAdLoader = {
        let loader = InterstitialAdLoader()
        loader.delegate = self
        return loader
    }()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        loadAd()
    }
    
    private func loadAd() {
        print("[Interstitial] Loading ad...")
        let configuration = AdRequestConfiguration(adUnitID: adUnitID)
        interstitialAdLoader.loadAd(with: configuration)
    }
    
    private func showAd() {
        guard let ad = interstitialAd else { return }
        ad.show(from: self)
    }
}

// MARK: - InterstitialAdLoaderDelegate

extension InterstitialViewController: InterstitialAdLoaderDelegate {
    func interstitialAdLoader(_ adLoader: InterstitialAdLoader, didLoad interstitialAd: InterstitialAd) {
        print("[Interstitial] didLoad")
        self.interstitialAd = interstitialAd
        self.interstitialAd?.delegate = self
        
        showAd()
    }
    
    func interstitialAdLoader(_ adLoader: InterstitialAdLoader, didFailToLoadWithError error: AdRequestError) {
        print("[Interstitial] didFailToLoad: \(error.error)")
    }
}

// MARK: -InterstitialAdDelegate

extension InterstitialViewController: InterstitialAdDelegate {
    func interstitialAdDidShow(_ interstitialAd: InterstitialAd) {
        print("[Interstitial] didShow")
    }
    
    func interstitialAdDidDismiss(_ interstitialAd: InterstitialAd) {
        print("[Interstitial] didDismiss")
    }
    
    func interstitialAdDidClick(_ interstitialAd: InterstitialAd) {
        print("[Interstitial] didClick")
    }
    
    func interstitialAd(_ interstitialAd: InterstitialAd, didFailToShowWithError error: Error) {
        print("[Interstitial] didFailToShow: \(error)")
    }
    
    func interstitialAd(_ interstitialAd: InterstitialAd, didTrackImpressionWith impressionData: ImpressionData?) {
        print("[Interstitial] didTrackImpression: \(impressionData?.rawData ?? "nil")")
    }
}