Настройка SKAN 4.0 для атрибуції iOS-додатку
SKAdNetwork 4.0 (SKAN 4.0) з'явився з iOS 16.1 й принів кілька важливих змін порівняно зі SKAN 2.x/3.x: три постбека замість одного, coarse value як доповнення до fine conversion value, а також lockWindow API для явного керування таймером. Якщо ваш додаток працює з рекламними мережами, які підтримують SKAN 4.0, — переходити варто, бо три постбека дають принципово більше інформації про життєвий цикл користувача в перші 35 днів.
Що змінилось в SKAN 4.0
Три постбека замість одного
У SKAN 2.x/3.x рекламна мережа отримувала рівно один постбек — коли істикав таймер конверсії. SKAN 4.0 вводить три часові вікна:
| Постбек | Часове вікно | Що містить |
|---|---|---|
| Перший | 0–2 дні після встановлення | fine value (0–63) + coarse value + source identifier |
| Другий | 3–7 дні | coarse value (low/medium/high) |
| Третій | 8–35 дні | coarse value |
Другий та третій постбеки відправляються тільки якщо користувач проявляв активність у відповідному вікні. Це дозволяє рекламній мережі видіти, чи залишився користувач активним на 7-й та 35-й день — без першого постбека це було неможливо.
Fine value та coarse value
Fine conversion value — попередні 6 бітів (0–63). Залишається тільки в першому постбеку й тільки при високій crowd anonymity (Apple не розкриває точний поріг, орієнтовно кілька тисяч встановлень з однієї кампанії).
Coarse value — нове поле з трьома значеннями: low, medium, high. Відправляється у всіх трьох постбеках навіть при малих обсягах трафіку. Менш інформативно, але стабільно.
Source Identifier
Нове 2–4 значне поле, яке замінює campaign ID. Перші дві цифри завжди включені в постбек, третя й четверта — тільки при достатній crowd anonymity. Дозволяє кодувати не тільки кампанію, але й ad set або окреме оголошення.
Інтеграція SKAN 4.0
Оновлення updateConversionValue
У SKAN 4.0 метод приймає три параметри:
import StoreKit
// iOS 16.1+
if #available(iOS 16.1, *) {
SKAdNetwork.updatePostbackConversionValue(
fineValue: 15, // 0–63, тільки для першого вікна
coarseValue: .medium, // .low, .medium, .high
lockWindow: false, // true = негайно закрити вікно, не чекати таймер
completionHandler: { error in
if let error = error {
print("SKAN update failed: \(error)")
}
}
)
}
Параметр lockWindow: true — новий у SKAN 4.0. Якщо викликати з true, Apple негайно запускає відправку постбека без очікування таймера. Корисно коли ви знаєте, що користувач зробив ключову дію й подальші оновлення не потрібні.
Зворотна сумісність
Додаток повинен підтримувати SKAN 3.x для iOS 14.x–16.0 й SKAN 4.0 для iOS 16.1+. Викликайте обидва API паралельно:
func trackPurchase(revenue: Double) {
let fineValue = encodeFineValue(revenue: revenue)
let coarseValue: SKAdNetwork.CoarseConversionValue = revenue > 20 ? .high : .medium
if #available(iOS 16.1, *) {
SKAdNetwork.updatePostbackConversionValue(
fineValue,
coarseValue: coarseValue,
lockWindow: false
) { _ in }
} else if #available(iOS 14.0, *) {
SKAdNetwork.updateConversionValue(fineValue)
}
}
Настройка в MMP
AppsFlyer та Adjust вже підтримують SKAN 4.0, але потрібно явно активувати три постбека в настройках додатку в дашборді. За замовчуванням MMP продовжує працювати в режимі SKAN 3.x.
В AppsFlyer в розділі iOS App Settings → SKAdNetwork: вибрати SKAN 4.0 mode, задати coarse value mapping для другого й третього вікон.
Проектування conversion value schema для трьох вікон
Для SKAN 4.0 потрібно проектувати три незалежні схеми — по одній на кожне постбек-вікно:
Перше вікно (0–2 дні): детальна інформація про перші дії. Fine value кодує, наприклад:
- 0–15: реєстрація без покупки, рівень залученості
- 16–31: додав у кошик, категорія продукту
- 32–63: зробив покупку, revenue bucket
Друге вікно (3–7 днів): coarse value відображає retention статус:
-
low— не повернувся -
medium— відкрив додаток, але без ключової eventi -
high— повторна покупка або висока залученість
Третє вікно (8–35 днів): аналогічно другому, але для 2-го місяця життєвого циклу.
Обмеження й реальність
Crowd anonymity означає, що для малих додатків (менше 1000–2000 встановлень з конкретної кампанії) Apple замінює fine value в першому постбеку на null. Coarse value приходить завжди. Це потрібно враховувати при аналізі: відсутність fine value — не помилка інтеграції, а захист приватності.
Що входить у роботу
- Аудит поточної SKAN-інтеграції й версії SKAdNetwork в Info.plist
- Проектування трьохрівневої conversion value schema
- Реалізація
updatePostbackConversionValueз підтримкою iOS 14–16.1+ - Настройка SKAN 4.0 в AppsFlyer / Adjust
- Верифікація постбеків через тестовий трафік
Терміни
3–5 днів. Більшість часу займає проектування схеми й узгодження з рекламною командою, не сам код. Вартість розраховується індивідуально.







