Когда Adapty сопоставляет установку с кампанией, данные атрибуции возвращаются в приложение через коллбэк onInstallationDetailsSuccess. Используйте эти данные, чтобы персонализировать пользовательский опыт в зависимости от канала или кампании, которые привели к установке.
Данные атрибуции возвращаются в виде вложенного объекта attribution внутри поля payload. Он содержит следующие поля:
Поле
Описание
channel
Канал привлечения (например, facebook, tiktok, google, organic)
campaign_id
Идентификатор кампании
campaign_name
Название кампании
adset_id
Идентификатор группы объявлений
adset_name
Название группы объявлений
ad_id
Идентификатор объявления / креатива
ad_name
Название объявления / креатива
Все поля необязательны. Для органических установок или в случаях, когда атрибуцию определить не удалось, поле payload не содержит объект attribution.
Чтобы прочитать данные атрибуции в приложении:
Adapty.delegate = selfnonisolated func onInstallationDetailsSuccess(_ details: AdaptyInstallationDetails) { guard let payloadDict = details.payload?.dictionary, let attribution = payloadDict["attribution"] as? [String: Any] else { return } let channel = attribution["channel"] as? String let campaignName = attribution["campaign_name"] as? String let adName = attribution["ad_name"] as? String print("Channel: \(channel ?? "organic")")}
Adapty.setOnInstallationDetailsListener(object : OnInstallationDetailsListener { override fun onInstallationDetailsSuccess(details: AdaptyInstallationDetails) { val payloadStr = details.payload ?: return runCatching { val payload = JSONObject(payloadStr) val attribution = payload.optJSONObject("attribution") ?: return val channel = attribution.optString("channel") val campaignName = attribution.optString("campaign_name") val adName = attribution.optString("ad_name") println("Channel: $channel") }.onFailure(Throwable::printStackTrace) }})
Adapty().onUpdateInstallationDetailsSuccessStream.listen((details) { final payloadStr = details.payload; if (payloadStr == null) return; final payload = json.decode(payloadStr) as Map<String, dynamic>; final attribution = payload['attribution'] as Map<String, dynamic>?; if (attribution == null) return; final channel = attribution['channel'] as String?; final campaignName = attribution['campaign_name'] as String?; final adName = attribution['ad_name'] as String?; print('Channel: ${channel ?? 'organic'}');});