ILRD

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

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

Метод

InterstitialAdDelegate

didTrackImpression

NativeAdDelegate

didTrackImpression

RewardedAdDelegate

didTrackImpression

AdViewDelegate

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)")
    }
}
  1. 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 в рекламной сети, которая совершила показ.