Настройка SKAdNetwork для атрибуції встановлень iOS-додатку
Після iOS 14.5 Apple забрала прямий доступ до IDFA без явної згоди користувача. Замість детермінованої атрибуції через рекламний ідентифікатор Apple ввела SKAdNetwork — агрегований механізм, де постбеки відправляються прямо в рекламну мережу без передачі даних про пристрій. Налаштувати це не складно — але зрозуміти, що саме робити й у якому порядку, займає час.
Як працює SKAdNetwork
Ланцюг атрибуції виглядає так:
- Рекламна мережа підписує показ реклами своїм SKAdNetwork ID
- Користувач кліне й встановлює додаток
- iOS реєструє встановлення й запускає таймер
- Додаток викликає
updateConversionValue(_:)— передає 6-бітне значення (0–63), кодуюче дію користувача - Apple відправляє постбек рекламній мережі — без user_id, без IDFA, тільки агреговані дані кампанії
Затримка постбека — від 24 до 72 годин. Це не баг, а архітектурне рішення Apple для захисту приватності.
Що потрібно зробити в додатку
Додати SKAdNetwork IDs в Info.plist
Кожна рекламна мережа має унікальний SKAdNetwork ID. Потрібно прописати їх у Info.plist вашого додатку — інакше Apple не засчитає атрибуцію від цієї мережі:
<key>SKAdNetworkItems</key>
<array>
<!-- Google UAC -->
<dict>
<key>SKAdNetworkIdentifier</key>
<string>cstr6suwn9.skadnetwork</string>
</dict>
<!-- Meta (Facebook) -->
<dict>
<key>SKAdNetworkIdentifier</key>
<string>v9wttpbfk9.skadnetwork</string>
</dict>
<!-- TikTok -->
<dict>
<key>SKAdNetworkIdentifier</key>
<string>gta9lk7p23.skadnetwork</string>
</dict>
<!-- AppLovin -->
<dict>
<key>SKAdNetworkIdentifier</key>
<string>ludvb6z3bs.skadnetwork</string>
</dict>
</array>
Актуальний список з 200+ ідентифікаторів підтримують MMP-провайдери (AppsFlyer, Adjust) — їх можна експортувати готовим plist-фрагментом.
Виклик updateConversionValue
Це найтонша частина. У вас є 6 бітів (значення 0–63) для кодування поведінки користувача. Apple скидає таймер на 24 години кожен раз, коли ви викликаєте updateConversionValue з зростаючим значенням. Після того як таймер істече — постбек йде, значення зафіксовано.
import StoreKit
// Приклад простої схеми конверсії:
// 0–7: реєстрація (бiт 0 = завершив онбординг)
// 8–15: перша дія (біт 3 = додав у кошик)
// 16–31: покупка (біт 4 = зробив покупку)
func trackRegistration() {
if #available(iOS 14.0, *) {
SKAdNetwork.updateConversionValue(1) // 000001
}
}
func trackFirstPurchase(revenueLevel: Int) {
// revenueLevel 1–3 кодуємо в біти 1-2
let value = 16 | revenueLevel // 010001, 010010, 010011
if #available(iOS 14.0, *) {
SKAdNetwork.updateConversionValue(value)
}
}
Правило: значення повинно бути строго зростаючим. Якщо викликати updateConversionValue(5) після updateConversionValue(10) — виклик ігнорується. Це обмеження SKAdNetwork 1.0–2.x.
Conversion Value Schema: як упакувати максимум смислу в 6 бітів
Стандартний підхід — розділити 6 бітів на два поля:
| Біти | Назначение | Приклади значень |
|---|---|---|
| 5–4 (старші) | Подія-триггер | 00=install, 01=registration, 10=first_purchase, 11=repeat_purchase |
| 3–0 (молодші) | Revenue bucket | 0=$0, 1=$0–5, 2=$5–20, 3=$20–50, ..., 15=$500+ |
При такій схемі рекламна мережа отримує не просто «встановлення», а «користувач зробив першу покупку в діапазоні $5–20». Google UAC може оптимізувати кампанію саме під таких користувачів.
Поширені помилки
Не додані всі SKAdNetwork IDs. Якщо ID мережи відсутній в Info.plist — Apple не відправить постбек цій мережі, й атрибуція з неї не працює. Рекламна мережа видить встановлення як неатрибутовані.
Conversion value не оновлюється. Багато команд викликають SKAdNetwork.registerAppForAdNetworkAttribution() (застарілий метод з SKAdNetwork 1.0) й забувають про updateConversionValue. В результаті постбек йде з нульовим значенням — рекламна мережа знає про встановлення, але не про активність користувача.
Схема conversion value не узгоджена з рекламною командою. Технічна інтеграція зроблена, але маркетинг не знає, що означає значення 17 в постбеку. Декодування conversion value потрібно документувати й налаштовувати в MMP-дашборді.
Що входить у роботу
- Збір актуального списку SKAdNetwork IDs під використовувані рекламні мережі
- Проектування conversion value schema під продуктові події
- Інтеграція
updateConversionValueв ключевих точках додатку - Настройка декодування в AppsFlyer / Adjust
- Тестування через SKAdNetwork TestKit
Терміни
3–5 днів з урахуванням проектування conversion value schema й тестування. Вартість розраховується індивідуально після аналізу рекламних каналів.







