ILRD

ILRD (Impression Level revenue data) — функционал для отслеживания и сбора данных из рекламы.

Родительский класс

Метод

InterstitialAdDelegate

didTrackImpression

NativeAdDelegate

didTrackImpression

RewardedAdDelegate

didTrackImpression

BannerAdViewDelegate

bannerAdView(_:didTrackImpression:)

У каждого из этих методов есть параметр ImpressionData, который имеет единственный метод rawData, возвращающий JSON string с ILRD (см. таблицу ниже).

Примечание

didTrackImpressionWithData срабатывает только после того, как рекламный показ был засчитан.

  1. Logger в виде чистой функции:

    struct NetworkData: Decodable {
        let name: String
        let ad_unit_id: String
    }
    
    struct ImpressionDataModel: Decodable {
        let ad_unit_id: String
        let adType: String
        let currency: String
        let revenue: String
        let revenueUSD: String
        let precision: String
        let network: NetworkData
    }
    
    func logImpression(_ impressionData: ImpressionData?, tag: String = "Ad") {
        guard let raw = impressionData?.rawData else {
            print("[\(tag)] Impression: no data")
            return
        }
        
        guard let jsonData = raw.data(using: .utf8) else {
            print("[\(tag)] Impression: invalid encoding")
            return
        }
        
        do {
            let parsed = try JSONDecoder().decode(ImpressionDataModel.self, from: jsonData)
            
            print("""
            [\(tag) Impression]
            ├─ adUnitId: \(parsed.ad_unit_id)
            ├─ adType: \(parsed.adType)
            ├─ currency: \(parsed.currency)
            ├─ revenue: \(parsed.revenue)
            ├─ revenueUSD: \(parsed.revenueUSD)
            ├─ precision: \(parsed.precision)
            ├─ networkName: \(parsed.network.name)
            └─ networkAdUnitId: \(parsed.network.ad_unit_id)
            """)
            
        } catch {
            print("[\(tag)] Impression parse error: \(error.localizedDescription)")
            print("[\(tag)] Raw: \(raw)")
        }
    }
    
  2. Callback(s) у разных форматов вызова рекламы, в которых можно использовать готовый Logger:

    // MARK: - Interstitial
    func interstitialAd(_ ad: InterstitialAd, didTrackImpressionWith impressionData: ImpressionData?) {
        logImpression(impressionData, tag: "Interstitial")
    }
    
    // MARK: - Rewarded
    func rewardedAd(_ ad: RewardedAd, didTrackImpressionWith impressionData: ImpressionData?) {
        logImpression(impressionData, tag: "Rewarded")
    }
    
    // MARK: - Native
    func nativeAd(_ ad: NativeAd, didTrackImpressionWith impressionData: ImpressionData?) {
        logImpression(impressionData, tag: "Native")
    }
    
    // MARK: - AppOpen
    func appOpenAd(_ ad: AppOpenAd, didTrackImpressionWith impressionData: ImpressionData?) {
        logImpression(impressionData, tag: "AppOpen")
    }
    
    // MARK: - Banner
    func adView(_ adView: AdView, didTrackImpression impressionData: ImpressionData?) {
        logImpression(impressionData, tag: "Banner")
    }
    

Доступные данные

Парсинг rawData позволит получить следующие данные:

Ключ

Тип

Описание

ad_unit_id

string

Уникальный идентификатор ad unit ID.

adType

string

Тип рекламного объявления:

  • баннер (inline/sticky);

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

  • нативная реклама;

  • реклама с вознаграждением;

  • реклама при открытии приложения.

currency

string

Валюта рекламной сети.

revenue

string

Доход за показ в валюте рекламной сети. Используется значение валюты из поля currency.

revenueUSD

string

Доход за показ, конвертированный в USD.

precision

string

Точность значения revenue. Допустимые значения:

  • publisher_defined — значение с учетом порога CPM из интерфейса медиации;

  • estimated — значение с учетом автостратегий.

network.name

string

Название рекламной сети, совершившей показ рекламы.

network.ad_unit_id

string

Уникальный идентификатор ad unit ID в рекламной сети, которая совершила показ.