Cuando Adapty asocia una instalación a una campaña, devuelve los datos de atribución a tu app a través del callback onInstallationDetailsSuccess. Usa estos datos para personalizar la experiencia del usuario según el canal o la campaña que generó la instalación.
Los datos de atribución se devuelven como un objeto attribution anidado dentro del campo payload. Contiene los siguientes campos:
Campo
Descripción
channel
Canal de adquisición (p. ej. facebook, tiktok, google, organic)
campaign_id
Identificador de la campaña
campaign_name
Nombre de la campaña
adset_id
Identificador del conjunto de anuncios / grupo de anuncios
adset_name
Nombre del conjunto de anuncios / grupo de anuncios
ad_id
Identificador del anuncio / creatividad
ad_name
Nombre del anuncio / creatividad
Todos los campos son opcionales. Para instalaciones orgánicas o cuando no se pudo determinar la atribución, el campo payload no incluye el objeto attribution.
Para leer los datos de atribución en tu app:
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'}');});