Інтеграція аналітики Adjust у мобільний додаток
Adjust — MMP (Mobile Measurement Partner) з сильною позицією на європейському та азіатському ринках. Як і AppsFlyer, основна задача — атрибуція установок та in-app подій. Вибір між Adjust та AppsFlyer часто визначається рекламними партнерами: деякі DSP та мережі надають перевагу роботі через Adjust.
Підключення SDK
iOS через Swift Package Manager — пакет adjust/ios_sdk:
import Adjust
// AppDelegate
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
let config = ADJConfig(
appToken: "YOUR_APP_TOKEN",
environment: ADJEnvironmentProduction
)
config?.logLevel = ADJLogLevelError
config?.delegate = self
Adjust.appDidLaunch(config)
return true
}
Важливо: ADJEnvironmentSandbox vs ADJEnvironmentProduction — у пісочниці трафік не попадає у продуктову статистику. Часта помилка — випустити реліз з Sandbox.
Android:
implementation("com.adjust.sdk:adjust-android:4.+")
val config = AdjustConfig(this, "YOUR_APP_TOKEN", AdjustConfig.ENVIRONMENT_PRODUCTION)
config.setLogLevel(LogLevel.ERROR)
Adjust.onCreate(config)
На Android додатково потрібен AdjustLifecycleCallbacks в Application.onCreate() або ручні виклики onResume/onPause в кожній Activity.
Відстеження подій
В Adjust кожна подія, створена у панелі управління, отримує унікальний Event Token — чотирисимвольний код (abc123). Код використовується при виклику SDK:
let event = ADJEvent(eventToken: "abc123")
event?.addCallbackParameter("product_id", value: "sku_789")
event?.addCallbackParameter("category", value: "electronics")
event?.setRevenue(990.0, currency: "RUB")
event?.setOrderId("order_\(orderId)") // дедупліація
Adjust.trackEvent(event)
setOrderId — критично важливий для e-commerce: запобігає дублюванню события покупки при повторних викликах (наприклад, через retry мережевого запиту).
SKAdNetwork на iOS 14+
Adjust керує conversion values автоматично через конфігурацію у панелі управління. Схема кодування визначається в Adjust Suite — там встановлюється, які события та їх послідовність кодуються у 6 бітах:
// ATT запрос повинен бути до start() або одразу після
Adjust.requestTrackingAuthorization { status in
// status: ATTrackingManager.AuthorizationStatus
}
Без requestTrackingAuthorization на iOS 14.5+ IDFA недоступний, і атрибуція буде працювати тільки через SKAdNetwork (агреговано, з затримкою до 72 годин).
Deeplink атрибуція
// Universal Links
func application(_ application: UIApplication,
continue userActivity: NSUserActivity,
restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
if userActivity.activityType == NSUserActivityTypeBrowsingWeb,
let url = userActivity.webpageURL {
Adjust.appWillOpen(url)
}
return true
}
// URL Schemes
func application(_ app: UIApplication, open url: URL,
options: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool {
Adjust.appWillOpen(url)
return true
}
Adjust vs AppsFlyer: практичний вибір
| Аспект | Adjust | AppsFlyer |
|---|---|---|
| Ринок | Європа, Азія | Глобально, особливо US |
| Ціна | За запитом, зазвичай нижча для малих обсягів | За запитом |
| Fraud Protection | Вбудований (Adjust Fraud Prevention) | Вбудований (Protect360) |
| SKAdNetwork | Так | Так |
| Raw Data Export | S3, BigQuery через Data Locker | S3 через Data Locker |
Що входить до роботи
- Підключення SDK (iOS/Android/Flutter)
- Налаштування environment для debug/release сборок
- Створення event tokens у панелі управління + інтеграція в коді
- Конфігурація ATT та SKAdNetwork для iOS 14+
- Deeplink та Universal Links
- Тестування через Adjust Testing Console
Сроки
Базова атрибуція з подіями: 1–2 дні. З deeplink та SKAdNetwork: до 3 днів. Вартість розраховується індивідуально.







