Как работает многооконная атрибуция в SKAdNetwork 4.0? SKAdNetwork 4.0 разделяет измерение конверсий на три последовательных окна, охватывающих дни 0–2, 3–7 и 8–35 после первого запуска приложения. Apple присваивает уровень данных постбэка каждой загрузке приложения, определяя, будут ли подходящие постбэки содержать детализированные, укрупненные (грубые) или сокращенные данные атрибуции.
SKAdNetwork 4.0 — это разработанный Apple фреймворк для конфиденциальной атрибуции мобильных рекламных кампаний в iOS, обеспечивающий безопасный дляプライва (приватности) анализ эффективности. Он вводит три последовательных окна конверсии продолжительностью до 35 дней с момента первого запуска, иерархические идентификаторы источников, укрупненные значения конверсий и механизмы блокировки окон для оценки жизненной ценности (LTV) пользователей на средних этапах воронки без сбора постоянных идентификаторов устройств.
| Термин | Определение |
|---|---|
| SKAdNetwork | Платформенный фреймворк Apple для конфиденциальной атрибуции рекламных кампаний. |
| Окно конверсии | Один из трех выделенных периодов измерения, начинающихся с первого запуска приложения, в течение которых рекламируемое приложение может обновлять значения конверсии. |
| Уровень данных постбэка | Присваиваемый платформой уровень (от Tier 0 до Tier 3), который определяет детализацию метаданных, возвращаемых в постбэках. |
| Укрупненное значение конверсии | Трехуровневый сигнал конверсии (low, medium, high), который может передаваться при недоступности детализированных данных конверсии или в последующих окнах конверсии. |
Краткий обзор: Основные сроки отправки постбэков и правила раскрытия данных
- Окно 1 (Дни 0–2 после первого запуска): Может содержать детализированные (0–63) или укрупненные (
low,medium,high) значения; отправляется после дополнительной случайной задержки в 24–48 часов. - Окно 2 (Дни 3–7 после первого запуска): Может содержать параметр
coarse-conversion-value, если он предоставлен и разрешен уровнем данных постбэка; в противном случае этот поле отсутствует. Отправляется после дополнительной случайной задержки в 24–144 часа. - Окно 3 (Дни 8–35 после первого запуска): Может содержать параметр
coarse-conversion-value, если он предоставлен и разрешен уровнем данных постбэка; в противном случае это поле отсутствует. Отправляется после дополнительной случайной задержки в 24–144 часа. - Ограничение данных для Tier 0: Загрузки, попавшие в уровень Tier 0, получают единственный постбэк, содержащий 2-значный ID источника и без значения конверсии; второй и третий постбэки опускаются.
- Требование для нескольких постбэков: Чтобы претендовать на получение нескольких выигрышных постбэков, реклама должна быть подписана с помощью SKAdNetwork 4 или новее, а рекламируемое приложение должно обновлять значения конверсии в течение применимых окон конверсии.
Что такое SKAdNetwork 4.0 и как работает многооконная атрибуция
Структурная эволюция: от ограничений единого таймера к трекингу жизненного цикла по окнам
Ранние версии StoreKit Ad Network от Apple (SKAdNetwork 2.0 и 3.0) работали на базе единого скользящего 24-часового таймера. В SKAdNetwork 3 и более ранних версиях допустимые возрастающие обновления значений конверсии могли продлевать период конверсии путем перезапуска 24-часового таймера. Как только проходило 24 часа без обновлений, окно закрывалось, и Apple отправляла единственный постбэк после случайной задержки.
Такая архитектура с одним таймером создавала операционные трудности:
- Ограниченные горизонты наблюдения: Рекламодатели могли измерять только раннюю вовлеченность в первые дни после установки.
- Задержки в отчетности: Повторные квалифицирующие обновления конверсии могли продлевать эффективный период измерения и задерживать финальный постбэк, что замедляло работу алгоритмов автоматического назначения ставок.
- Ограниченная видимость долгосрочных результатов: В SKAdNetwork 3 не было выделенных последующих окон конверсии для структурированного измерения в период с 7 по 30 день.
SKAdNetwork 4.0 перестраивает эту модель, устанавливая три фиксированных последовательных окна измерения, привязанных к первому запуск приложения пользователем.
Отвязка таймеров атрибуции от активных сессий пользователя
В SKAdNetwork 4.0 окна конверсии продвигаются на основе фиксированной календарной длительности, а не непрерывной активности пользователя. Когда приложение открывается впервые после показа атрибутированной рекламы, операционная система запускает Окно 1.
Независимо от того, откроет ли пользователь приложение один раз или пятьдесят раз в течение первых 48 часов, Окно 1 закрывается по истечении 48-часовой отметки (если оно не было досрочно зафиксировано с помощью блокировки окон). Затем система автоматически переходит к Окну 2 (с 3-го по 7-й день), а затем к Окну 3 (с 8-го по 35-й день). Такая независимость гарантирует четкие интервалы отправки постбэков для последующих пайплайнов данных.
Двухэтапная цепочка криптографических подписей
SKAdNetwork поддерживает целостность данных с помощью криптографии с открытым ключом на двух различных этапах:
- Этап показа рекламы (Рекламная сеть — Apple): Когда рекламная сеть показывает рекламу, она подписывает рекламные данные своим закрытым ключом. При установке и запуске приложения операционная система проверяет эту подпись по открытому ключу рекламной сети, зарегистрированному у Apple, чтобы подтвердить право на атрибуцию.
- Этап проверки установки (Apple — Рекламная сеть / Разработчик): Когда окно конверсии закрывается, Apple подписывает данные постбэка подтверждения установки. Получающая рекламная сеть и эндпоинт разработчика проверяют эту подпись с помощью открытого ключа Apple для подтверждения подлинности и целостности постбэка.
Смотрите также: SKAdNetwork ──> Модель мобильной атрибуции
Механика трех окон постбэков и графики измерений
Окно 1: Сбор ранней вовлеченности и высокоточных сигналов конверсии
- Интервал измерения: С 0 по 2 день (первые 48 часов после первого запуска).
- Доступные данные: Детализированное значение конверсии (6-битное целое число от 0 до 63) или укрупненное значение (
low,medium,high), определяемое назначенным уровнем данных постбэка. - Случайная задержка постбэка: От 24 до 48 часов после закрытия или блокировки окна.
- Аналитическая цель: Измерение завершения онбординга, прохождения туториалов, первоначальной покупки и раннего риска оттока.
Окно 2: Оценка раннего удержания пользователей и промежуточных этапов воронки
- Интервал измерения: С 3 по 7 день после первого запуска (с 48-го по 168-й час).
- Доступные данные: Может содержать
coarse-conversion-value(low,medium,high), если оно предоставлено и разрешено уровнем данных постбэка; в противном случае этот поле отсутствует. Детализированные значения (от 0 до 63) в Окне 2 не поддерживаются. - Случайная задержка постбэка: От 24 до 144 часов (от 1 до 6 дней) после закрытия или блокировки окна.
- Аналитическая цель: Оценка удержания (Retention) с 3-го по 7-й день, циклов многодневной вовлеченности, начальных тестовых подписок и повторных покупок.
Окно 3: Измерение долгосрочного удержания и совокупной пожизненной ценности (LTV)
- Интервал измерения: С 8 по 35 день после первого запуска (с 168-го по 840-й час).
- Доступные данные: Может содержать
coarse-conversion-value(low,medium,high), если оно предоставлено и разрешено уровнем данных постбэка; в противном случае это поле отсутствует. - Случайная задержка постбэка: От 24 до 144 часов (от 1 до 6 дней) после закрытия или блокировки окна.
- Аналитическая цель: Сбор бенчмарков удержания за 1-й месяц, конверсий из пробной подписки в платную и долгосрочных показателей монетизации.

Показ рекламы
│
▼
Установка приложения
│
▼
Первый запуск приложения ← измерение конверсии t = 0
│
├── Окно 1: Дни 0–2 после первого запуска
│ Детализированные или укрупненные данные
│ Случайная задержка 24–48 ч после закрытия/блокировки
│
├── Окно 2: Дни 3–7 после первого запуска
│ Только укрупненные данные (или отсутствуют)
│ Случайная задержка 24–144 ч после закрытия/блокировки
│
└── Окно 3: Дни 8–35 после первого запуска
Только укрупненные данные (или отсутствуют)
Случайная задержка 24–144 ч после закрытия/блокировки
Механика случайной задержки: Окно 1 против Окон 2 и 3
Чтобы предотвратить атаки по времени (timing-attacks), при которых наблюдатель может сопоставить точную миллисекунду внутриигровой транзакции с получением постбэка атрибуции, Apple применяет случайные задержки отправки:
- Таймер Окна 1: Если Окно 1 закрывается естественным образом без досрочной блокировки, первый постбэк отправляется после дополнительной случайной задержки от 24 до 48 часов.
- Таймеры Окон 2 и 3: Apple расширяет окно случайной задержки до 24–144 часов (до 6 полных дней) с учетом увеличенной продолжительности периодов измерения.
Как уровни данных постбэков контролируют раскрытие информации
Официальная матрица уровней данных постбэка
Apple присваивает уровень данных постбэка (от Tier 0 до Tier 3) загрузкам приложений на основе скопления (crowd), связанного с исходным приложением или доменом, рекламируемым приложением, страной установки и иерархическим идентификатором источника. Apple не публикует универсальные пороги количества установок для уровней с Tier 0 по Tier 3.
| Уровень данных постбэка | Первый постбэк (Окно 1) | Второй и третий постбэки (Окна 2 и 3) |
|---|---|---|
| Tier 3 | 2-, 3- или 4-значный ID источника + точное значение (если предоставлено) + подходящие метаданные источника/страны | 2-значный ID источника + укрупненное значение (если предоставлено) |
| Tier 2 | 2-, 3- или 4-значный ID источника + точное значение (если предоставлено) | 2-значный ID источника + укрупненное значение (если предоставлено) |
| Tier 1 | 2-значный ID источника + укрупненное значение (если предоставлено) | 2-значный ID источника + укрупненное значение (если предоставлено) |
| Tier 0 | Только 2-значный ID источника (без значения конверсии) | Второй и третий постбэки не отправляются |

Как работают иерархические идентификаторы источников
Структура и детализация идентификатора источника
SKAdNetwork 4.0 заменяет устаревший 2-значный ID кампании 4-значным иерархическим целым числом, называемым идентификатором источника (Source Identifier):
Рекламные сети и разработчики определяют значение иерархического идентификатора источника на основе внутренних требований к отчетности:
- Младшие две цифры (
): Образуют минимальную двухзначную часть иерархического идентификатора источника, которая может быть раскрыта. Рекламные сети могут использовать эту часть для широкой группировки кампаний, однако Apple не предписывает фиксированного бизнес-значения. - Старшие цифры (
): Могут кодировать такие внутренние параметры, как место размещения рекламы, ID креатива или географический таргетинг. Apple не закрепляет фиксированную бизнес-семантику за отдельными цифрами.

Исходный идентификатор источника: [ d4 ] [ d3 ] [ d2 ] [ d1 ]
Возможные раскрытые форматы в первом выигрышном постбэке:
2-значное раскрытие: [ d2 ] [ d1 ]
3-значное раскрытие: [ d3 ][ d2 ] [ d1 ]
4-значное раскрытие: [ d4 ][ d3 ][ d2 ] [ d1 ]
Точное количество раскрываемых цифр зависит от уровня данных постбэка от Apple.
Консолидация кампаний может увеличить объем аудитории (crowd), связанной с определенными идентификаторами источников, но Apple не публикует универсальные пороги установок, и консолидация не гарантирует конкретный уровень данных постбэка.
Детализированные против укрупненных значений конверсии
Детализированные значения конверсии
Детализированные значения конверсии работают как 6-битные двоичные числа, представляющие целые числа от 0 до 63 (
Укрупненные значения конверсии
Укрупненные значения конверсии представляют собой альтернативу с меньшей детализацией, когда применимый уровень данных постбэка не позволяет передавать точные данные, и служат форматом значений конверсии для второго и третьего постбэков. Apple не задает предопределенную бизнес-семантику для значений low, medium или high; приведенные ниже примеры являются иллюстративными вариантами маппинга, определяемыми разработчиком приложения:
low: Иллюстративный маппинг для базовой вовлеченности (например, первое открытие приложения или регистрация).medium: Иллюстративный маппинг для промежуточной вовлеченности (например, пройденный туториал или многодневная активная сессия).high: Иллюстративный маппинг для высокоценных этапов конверсии (например, внутриигровая покупка или активация триала).
Информацию о разработке схемы конверсий для конкретной реализации см. в документации по маппингу конверсий SKAN.
Маппинг индексов последовательности постбэков
В постбэках SKAdNetwork 4 поле postback-sequence-index определяет соответствующее окно конверсии:
postback-sequence-index |
Соответствующее окно конверсии | Разрешенные форматы значения конверсии |
|---|---|---|
0 |
Окно 1 (Дни 0–2 после первого запуска) | Детализированное (0–63) ИЛИ Укрупненное (low, medium, high) |
1 |
Окно 2 (Дни 3–7 после первого запуска) | Только укрупненное (low, medium, high) (или отсутствует) |
2 |
Окно 3 (Дни 8–35 после первого запуска) | Только укрупненное (low, medium, high) (или отсутствует) |
Apple указывает, что постбэк подтверждения установки может содержать либо conversion-value (точное), либо coarse-conversion-value (укрупненное), но никогда оба значения одновременно.
Следующие пейлоады (пейлоады данных) являются иллюстративными примерами для SKAdNetwork 4. Фактические поля постбэков различаются в зависимости от последовательности постбэков, уровня данных постбэка, типа рекламы и условий раскрытия конфиденциальности. Примерные значения attribution-signature являются плейсхолдерами и не являются криптографически действительными.
Пример 1 ниже иллюстрирует детализированный постбэк для Окна 1, а Пример 2 — укрупненный постбэк для Окна 2:
{
"version": "4.0",
"ad-network-id": "example123.skadnetwork",
"source-identifier": "4821",
"app-id": 1234567890,
"transaction-id": "6a8b1c2d-3e4f-5a6b-7c8d-9e0f1a2b3c4d",
"postback-sequence-index": 0,
"conversion-value": 47,
"fidelity-type": 1,
"did-win": true,
"attribution-signature": "MEQCIFz8...SAMPLE_CRYPTOGRAPHIC_SIGNATURE...=="
}
{
"version": "4.0",
"ad-network-id": "example123.skadnetwork",
"source-identifier": "48",
"app-id": 1234567890,
"transaction-id": "6a8b1c2d-3e4f-5a6b-7c8d-9e0f1a2b3c4d",
"postback-sequence-index": 1,
"coarse-conversion-value": "high",
"fidelity-type": 1,
"did-win": true,
"attribution-signature": "MEQCIFz8...SAMPLE_CRYPTOGRAPHIC_SIGNATURE...=="
}
Последствия досрочной блокировки окна конверсии
Ускорение измерений с помощью параметра lockWindow
По умолчанию каждое окно измерения остается открытым в течение всей своей календарной длительности (48 часов для Окна 1, 5 дней для Окна 2, 28 дней для Окна 3). Когда параметр lockWindow имеет значение true, обновление становится финальным обновлением значения конверсии для активного окна. Система подготавливает постбэк и игнорирует последующие обновления значений конверсии до конца этого окна.

Стандартное Окно 1 (Без блокировки):
[Первый запуск] ─────────────── 48 часов открыто ───────────────► [Закрытие] ──► Задержка (24-48ч) ──► Постбэк 1
Заблокированное Окно 1 (Покупка на 6-м часу):
[Первый запуск] ── 6ч (Lock: true) ──► [Значение конверсии заблокировано / Постбэк подготовлен] ──► Задержка (24-48ч) ──► Постбэк 1 отправлен быстрее
Операционные аспекты при вызове блокировки окон
- Ускоренная отправка постбэка: Когда конверсия фиксируется досрочно, отсчет задержки постбэка начинается сразу после фиксации заблокированной конверсии, а не по истечении полного календарного окна.
- Независимость окон: Блокировка текущего окна не сдвигает начало следующего окна вперед. Следующее окно конверсии все равно начинается в заранее определенное время (например, Окно 2 начинается на 3-й день независимо от того, когда было заблокировано Окно 1).
- Блокировка последующих событий: Как только выполняется вызов
lockWindow: true, операционная система игнорирует все последующие вызовы обновления значения конверсии в течение оставшейся части этого конкретного окна.
Приведенный ниже код на Swift демонстрирует, как обновлять точные и укрупненные значения конверсии и вызывать блокировку окон с помощью StoreKit:
import Foundation
import StoreKit
enum SKANError: Error {
case invalidFineValue
case unsupportedOSVersion
}
final class SKAN4Manager {
static let shared = SKAN4Manager()
private init() {}
/// Обновляет значения конверсии и при необходимости блокирует активное окно SKAN 4.0
/// - Parameters:
/// - fineValue: 6-битное целое число (от 0 до 63) для Окна 1. Примечание: В Окнах 2 и 3 SKAdNetwork игнорирует параметр fineValue.
/// - coarseValue: Строка укрупненного значения ("low", "medium", "high") для всех окон
/// - shouldLock: Логический флаг для немедленной фиксации активного окна
func updateConversionState(
fineValue: Int,
coarseValue: SKAdNetwork.CoarseConversionValue,
shouldLock: Bool,
completion: ((Error?) -> Void)? = nil
) {
guard #available(iOS 16.1, *) else {
completion?(SKANError.unsupportedOSVersion)
return
}
// Проверка границ детализированного значения (от 0 до 63)
guard (0...63).contains(fineValue) else {
completion?(SKANError.invalidFineValue)
return
}
// Выполнение асинхронного обновления конверсии SKAN 4.0
SKAdNetwork.updatePostbackConversionValue(
fineValue,
coarseValue: coarseValue,
lockWindow: shouldLock
) { error in
if let error = error {
print("Ошибка обновления SKAN 4.0: \(error.localizedDescription)")
} else {
print("Обновление SKAN 4.0 успешно — Точное: \(fineValue), Укрупненное: \(coarseValue.rawValue), Заблокировано: \(shouldLock)")
}
completion?(error)
}
}
/// Иллюстративный рабочий процесс маппинга доходов (Не копируйте конкретные пороги напрямую в продакшн)
/// Примечание: В продакшене определяйте активное окно конверсии и настраивайте логику укрупненных значений для каждого окна.
func handleInAppPurchase(amountUSD: Double) {
let fineVal: Int
let coarseVal: SKAdNetwork.CoarseConversionValue
let lock: Bool
switch amountUSD {
case 0.0..<5.0:
fineVal = 10
coarseVal = .low
lock = false
case 5.0..<25.0:
fineVal = 25
coarseVal = .medium
lock = false
case 25.0...:
fineVal = 60
coarseVal = .high
// Немедленно блокируем окно для ускорения подготовки постбэка при конверсии высокой ценности
lock = true
default:
fineVal = 0
coarseVal = .low
lock = false
}
updateConversionState(fineValue: fineVal, coarseValue: coarseVal, shouldLock: lock)
}
}
Совместимость SKAdNetwork 4.0 и AdAttributionKit
Взаимосвязь между SKAdNetwork и Apple AdAttributionKit
Компания Apple представила AdAttributionKit в качестве расширенного фреймворка атрибуции для iOS 17.4 и новее. AdAttributionKit и SKAdNetwork могут сосуществовать, но остаются отдельными API атрибуции:
- Вызовы API, зависящие от фреймворка: Приложения должны вызывать API обновления конверсий, соответствующее фреймворку, который используется рекламной сетью. Если рекламная сеть показывает рекламу через AdAttributionKit, приложение вызывает методы AdAttributionKit; если через SKAdNetwork, оно вызывает API StoreKit.
- Выбор победителя между фреймворками: Когда оба фреймворка фиксируют квалифицирующие показы для одной установки, операционная система оценивает их вместе и выбирает один побеждающий показ для атрибуции.
- Поведение моста (Bridging): Apple обеспечивает поведение сопряжения значений конверсии для определенных вызовов обновлений SKAdNetwork для обеспечения совместимости между уровнями измерений.
SKAdNetwork 4 остается важным для работы с существующими интеграциями атрибуции в App Store, в то время как Apple направляет новые рекламные реализации приложений в сторону AdAttributionKit и документирует совместимость между этими двумя фреймворками.
Сравнительная матрица: Устаревшая модель SKAN 3.0 против многооконной модели SKAN 4.0
| Функциональное измерение | Устаревшая SKAdNetwork 3.0 | SKAdNetwork 4.0 |
|---|---|---|
| Количество выигрышных постбэков | Один постбэк | До трех выигрышных постбэков |
| График измерений | Скользящий 24-часовой таймер после последнего возрастающего квалифицирующего обновления | До 35 дней (Три окна с момента первого запуска) |
| Структура ID источника | 2-значное целое число (от 00 до 99) | Иерархический 4-значный ID источника (2, 3 или 4 цифры) |
| Детализация значения конверсии | Только 6-битное целое число (от 0 до 63) | Детализированные (от 0 до 63) + Укрупненные (low, medium, high) |
| Досрочная фиксация | Не поддерживается | Поддерживается через API блокировки окон (lockWindow: true) |
| Атрибуция Web-to-App | Не поддерживается | Поддерживается для атрибутируемой веб-рекламы в Safari |
Часто задаваемые вопросы (FAQ)
Может ли приложение получать детализированные значения конверсии в Окне 2 или Окне 3?
Что происходит, если приложение не блокирует окно постбэка досрочно?
Требует ли SKAdNetwork 4.0 запроса разрешения на отслеживание App Tracking Transparency?
Резюме и фреймворк принятия решений
SKAdNetwork 4.0 расширяет видимость атрибуции до 35 дней с момента первого запуска приложения, вводит укрупненные значения конверсии для обеспечения измерения с меньшей детализацией, когда точные данные недоступны, и позволяет разработчикам блокировать окна измерения для снижения задержки постбэков при досрочном завершении окна конверсии. Успешная реализация требует тщательного маппинга схем конверсий во всех трех окнах и согласования клиентских вызовов обновлений с реальными бизнес-вехами.
Маршрутизация диплинков (deep-links) на уровне приложения может работать параллельно с фреймворками конфиденциальной атрибуции Apple в качестве отдельного слоя измерения и онбординга. Информацию о реализации диплинков и рабочих процессах атрибуции см. в документации OpoInstall.
Связанные материалы
-
Концепции: Многооконная атрибуция, Уровни данных постбэков, Иерархические идентификаторы источников, Блокировка окон, Укрупненные значения
-
Технологии: Apple SKAdNetwork, Apple AdAttributionKit, Фреймворк StoreKit, Мобильный SDK OpoInstall
-
Стандарты: Спецификация JSON IETF RFC 8259
-
API: API StoreKit
updatePostbackConversionValue, Постбэки проверки установки SKAdNetwork
Официальная документация
Share this article



