Introducción
AppsFlyer te permite acceder a los datos de atribución de los usuarios en tiempo real directamente en el nivel del SDK. Te permite personalizar la página de aterrizaje que ve el usuario la primera vez que abre una aplicación recién instalada. Esto se denomina comúnmente enlaces profundos "diferidos". Se trata de algo muy frecuente en la web. Sin embargo, lograr esto en el ecosistema de las aplicaciones móviles implica un gran desafío. Por suerte, AppsFlyer brinda soporte para todos los casos y plataformas.
¡Importante!
Para realizar enlaces profundos diferidos, la aplicación debe admitir esquemas URI, enlaces de aplicación (Android) o enlaces universales (iOS). Consulta Configuración de enlaces profundos para obtener más información.
Enviar a un nuevo usuario de la aplicación a un enlace profundo al momento de la instalación es muy similar a utilizar del esquema personalizado de URL para enlaces profundos de la aplicación (iOS y Android) para usuarios que ya han instalado tu aplicación.
Ejemplo
Piensa en un usuario que recién hizo clic en un anuncio de Google Adwords de HotelTonight para una búsqueda de "Hoteles en Nueva York". Primero se envía al usuario a Google Play o a la tienda de aplicaciones para descargar la aplicación y, al abrir la aplicación por primera vez, el usuario aterriza directamente en la página de Hoteles en Nueva York. Al acceder a los datos de atribución proporcionados por AppsFlyer, la aplicación recibirá la campaña y las palabras clave exactas utilizadas para impulsar ese usuario o esa instalación.
Además de la experiencia optimizada y la conversión mejorada, esta función permite realizar campañas sofisticadas basadas en el contexto, como proporcionarle al usuario un crédito o bonificación por instalar y usar la aplicación. Por ejemplo: en lugar de campañas de Haz clic para instalar, puedes usar una campaña de Instala y obtén $50 de crédito para reservar. Estas campañas no solo mejoran la conversión de clics en instalaciones, sino que también mejoran la conversión a usuarios que pagan. ¡Estas campañas pueden multiplicar el ROI total de 2 a 5 veces!
El SDK de AppsFlyer es responsable de habilitar el acceso a los datos de atribución desde la aplicación. En el primer inicio de la aplicación, el acceso a los datos de atribución desde el SDK de AppsFlyer puede tardar unos segundos. En las siguientes sesiones, el acceso es inmediato, ya que los datos de atribución se almacenan en el dispositivo.
Notas
- De acuerdo con la política de privacidad de Facebook, AppsFlyer (o cualquier otro partner de mediciones móviles para terceros) no puede proporcionar atribución de nivel de usuario para las instalaciones de Facebook a menos que tú aceptes los Términos de servicio de Facebook. Encontrarás más información aquí.
Si optas por no aceptar los Términos de servicio, las instalaciones de anuncios de Facebook en dispositivos móviles se clasificarán como "Orgánicas" y no podrás recibir los datos de nivel de usuario de las instalaciones de Facebook.
El acceso a los datos de atribución para implementar enlaces profundos diferidos es aplicable para el primer inicio del usuario después de la instalación. Para implementar enlaces profundos para usuarios que ya tienen la aplicación instalada, consulta aquí. - Los datos de conversión no constituyen la API de datos ideal para almacenar datos sin procesar de los usuarios en el backend.
Haz clic aquí para obtener información sobre cómo seleccionar las mejores API de datos para ti.
Implementación de SDK
Nota
Compatible con el SDK de AF para Android 2.3.1.6 y el SDK de AF para iOS 2.5.3.8 y superior.
OnInstallConversionDataLoaded
tiene los datos de atribución de la instalación. Puedes usar esta función para lo siguiente:
- Enlaces profundos diferidos: personaliza la página de aterrizaje de tu aplicación para un usuario que haya ingresado a la aplicación por primera vez.
- Obtén datos de atribución de instalación para diferentes eventos durante el ciclo de vida del usuario dentro de tu aplicación.
Ejemplo
Un usuario descarga e inicia tu aplicación por primera vez después de ver tu anuncio de zapatos rojos en Facebook. Para enviar al usuario directamente a la página de zapatos rojos en tu aplicación, usa OnInstallConversionDataLoaded
Para acceder a los datos de conversión de AppsFlyer desde el SDK de Android, implementa ConversionDataListener:
public interface AppsFlyerConversionListener {
void onInstallConversionDataLoaded(Map<String,String> conversionData);
void onInstallConversionFailure(String errorMessage);
}
El delegado a continuación se utiliza si deseas acceder a los datos de conversión de AppsFlyer desde el SDK.
(void) onConversionDataReceived:(NSDictionary*) installData;
onConversionDataReceived
tiene los datos de atribución de la instalación. Puedes usar esta función para lo siguiente:
- Enlaces profundos diferidos: personaliza la página de aterrizaje de tu aplicación para un usuario que haya abierto la aplicación por primera vez.
- Obtén datos de atribución de instalación para diferentes eventos durante el ciclo de vida del usuario dentro de tu aplicación.
didReceiveConversionData
tiene los datos de atribución de la instalación. Puedes usar esta función para lo siguiente:
- Enlaces profundos diferidos: personaliza la página de aterrizaje de tu aplicación para un usuario que haya ingresado a la aplicación por primera vez.
- Obtén datos de atribución de instalación para diferentes eventos durante el ciclo de vida del usuario dentro de tu aplicación.
Ejemplo
Un usuario descarga e inicia tu aplicación por primera vez después de ver tu anuncio de zapatos rojos en Facebook. Para enviar al usuario directamente a la página de zapatos rojos en tu aplicación, usa OnInstallConversionDataLoaded
Para acceder a los datos de conversión de AppsFlyer desde el SDK de Android, implementa ConversionDataListener:
didReceiveConversionData(string conversionData);
Ejemplos de código
A continuación se muestran diferentes ejemplos de código para Android y iOS.
@Override
public void onCreate(){
super.onCreate();
/** Set Up Conversion Listener to get attribution data **/
AppsFlyerConversionListener conversionListener = new AppsFlyerConversionListener() {
/* Returns the attribution data. Note - the same conversion data is returned every time per install */
@Override
public void onInstallConversionDataLoaded(Map<String, String> conversionData) {
for (String attrName : conversionData.keySet()) {
Log.d("LOG_TAG", "attribute: " + attrName + " = " + conversionData.get(attrName));
}
setInstallData(conversionData);
}
@Override
public void onInstallConversionFailure(String errorMessage) {
Log.d("LOG_TAG", "error getting conversion data: " + errorMessage);
}
/* Called only when a Deep Link is opened */
@Override
public void onAppOpenAttribution(Map<String, String> conversionData) {
for (String attrName : conversionData.keySet()) {
Log.d("LOG_TAG", "attribute: " + attrName + " = " + conversionData.get(attrName));
}
}
@Override
public void onAttributionFailure(String errorMessage) {
Log.d("LOG_TAG", "error onAttributionFailure : " + errorMessage);
}
};
/* This API enables AppsFlyer to detect installations, sessions, and updates. */
AppsFlyerLib.getInstance().init(AF_DEV_KEY , conversionListener , this);
AppsFlyerLib.getInstance().startTracking(this, AF_DEV_KEY);
Consejo
Si no necesitas los datos de conversión, simplemente puedes pasar null
en el método init
:
AppsFlyerLib.getInstance().init(AF_DEV_KEY, null, this);
#import "AppsFlyerTracker.h"
@interface AppDelegate : UIResponder<UIApplicationDelegate, AppsFlyerTrackerDelegate> {
...
}
- (BOOL)application:(UIApplication ?*)application didFinishLaunchingWithOptions:(NSDictionary*?)launchOptions {
[AppsFlyerTracker sharedTracker].appsFlyerDevKey = @"[MY_DEV_KEY]";
[AppsFlyerTracker sharedTracker].appleAppID = @"123456789";
// Load conversion and deep link data
[AppsFlyerTracker sharedTracker].delegate = self;
return YES;
}
-(void)applicationDidBecomeActive:(UIApplication *)application
{
[[AppsFlyerTracker sharedTracker] trackAppLaunch];
}
-(void)onConversionDataReceived:(NSDictionary*) installData {
id status = [installData objectForKey:@"af_status"];
if([status isEqualToString:@"Non-organic"]) {
id sourceID = [installData objectForKey:@"media_source"];
id campaign = [installData objectForKey:@"campaign"];
NSLog(@"This is a none organic install. Media source: %@ Campaign: %@",sourceID,campaign);
} else if([status isEqualToString:@"Organic"]) {
NSLog(@"This is an organic install.");
}
}
-(void)onConversionDataRequestFailure:(NSError *) error {
NSLog(@"%@",error);
}
class AppDelegate: UIResponder, UIApplicationDelegate, AppsFlyerTrackerDelegate{
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
AppsFlyerTracker.shared().appsFlyerDevKey = "MY_DEV_KEY"
AppsFlyerTracker.shared().appleAppID = "123456789"
AppsFlyerTracker.shared().delegate = self
//AppsFlyerTracker.shared().isDebug = true
//AppsFlyerTracker.shared().appInviteOneLinkID = "ONELINK_ID";
return true
}
func applicationDidBecomeActive(_ application: UIApplication) {
AppsFlyerTracker.shared().trackAppLaunch()
}
func onConversionDataReceived(_ installData: [AnyHashable: Any]) {
guard let first_launch_flag = installData["is_first_launch"] as? Int else {
return
}
guard let status = installData["af_status"] as? String else {
return
}
if(first_launch_flag == 1) {
if(status == "Non-organic") {
if let media_source = installData["media_source"] , let campaign = installData["campaign"]{
print("This is a Non-Organic install. Media source: \(media_source) Campaign: \(campaign)")
}
} else {
print("This is an organic install.")
}
} else {
print("Not First Launch")
}
}
func onConversionDataRequestFailure(_ error: Error!) {
if let err = error{
print(err)
}
}
func onAppOpenAttribution(_ attributionData: [AnyHashable : Any]!) {
if let data = attributionData{
print("\(data)")
}
}
func onAppOpenAttributionFailure(_ error: Error!) {
if let err = error{
print(err)
}
}
En AF GameObject dentro del método Start
:
#if UNITY_IOS
/* Mandatory - set your iOS app ID */
AppsFlyer.setAppID("123456789");
/* Call getConversionData() to get the conversion data in iOS*/
AppsFlyer.getConversionData();
AppsFlyer.trackAppLaunch();
#elif UNITY_ANDROID
/* Mandatory - set your Android package name */
AppsFlyer.setAppID ("com.company.app");
/* For getting the conversion data in Android, you need to add the "AppsFlyerTrackerCallbacks" listener.*/
AppsFlyer.init ("AF_DEY_KEY","AppsFlyerTrackerCallbacks");
#endif
Implementa tu lógica en el método didReceiveConversionData
dentro de la clase AppsFlyerTrackerCallbacks
:
public class AppsFlyerTrackerCallbacks : MonoBehaviour {
public Text callbacks;
// Use this for initialization
void Start () {
print ("AppsFlyerTrackerCallbacks on Start");
}
public void didReceiveConversionData(string conversionData) {
print("AppsFlyerTrackerCallbacks:: got conversion data = " + conversionData);
}
public void didReceiveConversionDataWithError(string error) {
print ("AppsFlyerTrackerCallbacks:: got conversion data error = " + error);
}
public void didFinishValidateReceipt(string validateResult) {
print ("AppsFlyerTrackerCallbacks:: got didFinishValidateReceipt = " + validateResult);
}
public void didFinishValidateReceiptWithError (string error) {
print ("AppsFlyerTrackerCallbacks:: got idFinishValidateReceiptWithError error = " + error);
}
public void onAppOpenAttribution(string validateResult) {
print ("AppsFlyerTrackerCallbacks:: got onAppOpenAttribution = " + validateResult);
}
public void onAppOpenAttributionFailure (string error) {
print ("AppsFlyerTrackerCallbacks:: got onAppOpenAttributionFailure error = " + error);
}
public void onInAppBillingSuccess () {
print ("AppsFlyerTrackerCallbacks:: got onInAppBillingSuccess succcess");
}
public void onInAppBillingFailure (string error) {
print ("AppsFlyerTrackerCallbacks:: got onInAppBillingFailure error = " + error);
}
void printCallback(string str) {
callbacks.text += str + "\n";
}
}
{
"af_status": "Non-organic",
"media_source": "tapjoy_int",
"campaign": "July4-Campaign",
"agency": "starcomm",
"af_siteid": null,
"af_sub1": "subtext1",
"af_sub2": null,
"af_sub3": null,
"af_sub4": null,
"af_sub5": null,
"freehand-param": "somevalue",
"click_time": "2014-05-23 20:11:31",
"install_time": "2014-05-23 20:12:16.751"
}
Primer inicio
Los datos de conversión se envían desde los servidores de AppsFlyer en tiempo real a la aplicación recién instalada en el primer inicio. El SDK luego almacena estos datos en la memoria caché de la aplicación (SharedPreferences o UserDefaults).
Con cualquier inicio posterior de la aplicación, el SDK de AppsFlyer lee los datos de conversión almacenados en la memoria caché y no consulta los servidores de AppsFlyer. Por lo tanto, los datos de conversión SIEMPRE devuelven los mismos valores, ya sea en el primer inicio o no.
Para ayudar a los desarrolladores a usar los datos de conversión solo en el primer inicio, AppsFlyer agregó un parámetro llamado is_first_launch
en la respuesta de conversión de datos. is_first_launch
es verdadero (YES en Objective-C) en el primer inicio de la aplicación y falso (NO en Objective-C) después. Está disponible en los SDK de Android (a partir de la versión 4.8.4) y iOS (a partir de la 4.8.2).
Si deseas establecer enlaces profundos diferidos solo en el primer inicio, hazlo después de comprobar que el valor is_first_launch
sea verdadero.
Nota
Dado que los datos de conversión se almacenan en la memoria compartida de la aplicación, los usuarios pueden eliminarlos si limpian los datos de la aplicación. Esto hace que is_first_launch
se convierta en verdadero nuevamente. Por lo tanto, los siguientes inicios después de eliminar los datos de la aplicación se manejan como primeras instalaciones.
Claves disponibles en la respuesta de atribución
Los datos de conversión devueltos consisten en TODOS los parámetros incluidos en el enlace de atribución original y algunos parámetros de servidor adicionales creados al momento de hacer clic o instalar.
Dado que los datos de conversión dependen del enlace de atribución, esto significa que diferentes fuentes y enlaces de atribución pueden producir diferentes parámetros de datos de conversión.
Se invoca la siguiente función cada vez que se inicia la aplicación:
onInstallConversionDataLoaded
para Android
onConversionDataReceived
para iOS
Hay 3 resultados posibles según el tipo de instalación:
- Instalaciones No Orgánicas
- Devuelve los datos de atribución originales de la instalación (consulta los ejemplos a continuación).
- Instalación orgánica
- (o reinstalación) Devuelve una "instalación orgánica".
- Reatribución
- Devuelve los detalles de conversión de reatribución.
Explicaciones de los nombres de claves
Nombre de clave | Explicación | Valores de ejemplo | Fuentes de medios |
---|---|---|---|
af_status |
Muestra qué tipo de atribución se detectó. Valores válidos:
|
No orgánico |
Todo |
af_message |
Texto libre |
Instalación orgánica/Mensaje de error |
Todo |
media_source |
Nombre de fuente de medios. Este es el parámetro "pid" del enlace de atribución de AF. |
NotaLas fuentes de instalación derivadas de la agencia están ocultas y tienen un valor "null" (nulo). |
Todo
|
campaign |
Nombre de campaña (parámetro "c" del enlace de atribución de AppsFlyer o nombre de campaña de Facebook) |
Ad1/camp123 |
Todo |
clickid |
Id. de clic o id. de transacción |
123456/xsfd234 |
Todo |
af_siteid |
Id. de sitio (para optimización) |
Site1 |
Todo |
af_sub1 |
Parámetro adicional |
someParameter |
Todo |
af_sub2 |
Parámetro adicional |
|
Todo |
af_sub3 |
Parámetro adicional |
|
Todo |
af_sub4 |
Parámetro adicional |
|
Todo |
af_sub5 |
Parámetro adicional |
|
Todo |
af_keywords |
Palabras clave buscadas en las campañas de búsqueda. Por ejemplo, campañas de búsquedas en Google. |
Todo |
|
click_time |
Fecha y hora de clic (milisegundos) |
2014-01-08 00:07:53.233 |
Todo |
install_time |
Fecha y hora de conversión (milisegundos) |
2014-01-08 00:12:51.701 |
Todo |
agency |
Agencia o PMD que genera la instalación |
nanigans |
Todo |
is_first_launch |
Verdadero para el primer inicio y falso después |
true |
Todo |
is_fb
|
Señal que indica que es una atribución de Facebook. Valores: true/false (verdadero/falso). |
true |
|
ad_id |
Número de identificación único de un anuncio en Facebook |
6012740800279 |
|
campaign_id |
Id. de la campaña de Facebook |
6012700005123 |
|
adset |
Nombre del conjunto de anuncios de Facebook |
US - 18+ |
|
adset_id |
Id. del conjunto de anuncios de Facebook |
6099800005123 |
|
orig_cost |
El valor de costo de la instalación (puede estar en cualquier moneda) |
1.5 |
Todo |
cost_cents_USD |
El valor de costo en centavos de dólar estadounidense después de la conversión de moneda |
150 (Centavos) |
Todo |
Nota
Para las integraciones de enlaces de atribución (redes que no son de autorreporte), todos los parámetros de URL que aparecen en el enlace de atribución se devuelven en el GCD.
Ejemplo de instalación de enlace de atribución regular de AppsFlyer
Una instalación generada mediante el siguiente enlace de atribución:
http://app.appsflyer.com/com.greatapp?pid=network_int&c=network_TH&af_ad=ad_name&af_sub1=102619
&af_sub2=network_TH_G001_Android&af_dp=app%3A%2F%2Fhome&af_prt=expertagency
&af_siteid=1777215&af_sub_siteid=1702&freehand-param=somevalue&tag={TAGID}
&clickid={CLICKID}&af_click_lookback=1d
http://app.appsflyer.com/id123456789?pid=network_int&c=network_KR&af_ad=ad_name&af_sub1=CD48704_
&af_sub2=network_KR_G001_iOS&af_dp=app%3A%2F%2Fhome&af_prt=expertagency&
af_siteid=1777236&af_sub_siteid=1702&freehand-param=somevalue&tag={TAGID}
&clickid={CLICKID}&af_click_lookback=1d
produce la siguiente
Respuesta de datos de conversión
{
"media_source":"network_int",
"campaign":"network_TH",
"adset":null,
"clickid":"fb7f51d42-2621-93bd-e9a1b24f1acfab7b76e5104706104f4d6*******",
"adgroup":null,
"campaign_id":null,
"af_cost_currency":"USD",
"af_status":"Non-organic",
"af_sub_siteid":"1702",
"agency":"expertagency",
"af_sub3":null,
"af_cost_model":"CPI",
"af_siteid":"1777215",
"af_ad" = "ad_name",
"af_dp":"app://home",
"adset_id":null,
"click_time":"2017-07-19 08:30:31.890",
"cost_cents_USD":"150",
"iscache":true,
"is_first_launch":true,
"af_cpi":null,
"af_sub1":"102619",
"af_cost_value":"1.5",
"af_click_lookback":"1d",
"af_sub4":null,
"site_id":"1777215",
"adgroup_id":null,
"tag":"8d55089f-31b6-407b-9266-*********",
"orig_cost":"1.5",
"af_prt":"expertagency",
"af_sub5":null,
"install_time":"2017-07-19 08:30:35.461",
"af_sub2":"network_TH_G001_Android",
"freehand-param":"somevalue"
}
{
"media_source":"network_int",
"campaign":"network_KR",
"adset":null,
"adgroup":null,
"campaign_id":null,
"af_cost_currency":"USD",
"af_status":"Non-organic",
"agency":"expertagency",
"af_sub3":null,
"af_cost_model":"CPI",
"af_siteid":"1777236",
"af_ad" = "ad_name",
"af_dp":"app://home",
"adset_id":null,
"click_time":"2017-07-18 14:48:42.896",
"cost_cents_USD":"0",
"iscache":true,
"is_first_launch":1,
"af_cpi":null,
"af_sub1":"CD48704_",
"af_click_lookback":"1d",
"af_sub4":null,
"site_id":"1777236",
"adgroup_id":null,
"tag":"43fafd60-76ad-4a8f-9d1d-************",
"orig_cost":"0.0",
"af_prt":"expertagency",
"af_sub5":null,
"install_time":"2017-07-18 15:09:06.014",
"af_sub2":"network_KR_G001_iOS",
"clickID":"3gggBgAw2Bvxa8gR56ZA8Y3qjUy2gPkFgP6rA96s4e*******",
"freehand-param":"somevalue"
}
Nota
El orden de las claves puede variar. Se podrían agregar claves adicionales sin previo aviso.
Ejemplo de instalación en Facebook
Nota
No existe ningún enlace de atribución para las campañas de Facebook.
Los parámetros de enlaces profundos definidos en las campañas de Facebook no están disponibles fuera de Facebook. Esto incluye el parámetro af_dp, que contiene la ruta de acceso del esquema en la aplicación. Por lo tanto, a fin de implementar enlaces profundos diferidos, se debe aplicar una lógica adicional para las campañas de Facebook. Usa los datos de Facebook en la respuesta getConversionData
, por ejemplo, campaign, adset, adgroup, etc. para redirigir a tus usuarios de manera programática.
Respuesta de datos de conversión
{
"adset":"T:DAT-Desktop_O:All_L:AR-AE_A:All_R:1-30 Day",
"adgroup":"T:DAT-Desktop_O:All_L:AR-AE_A:All_R:1-30 Day",
"campaign_id":"6068535534218",
"af_status":"Non-organic",
"agency":null,
"af_sub3":null,
"af_siteid":null,
"adset_id":"6073532011618",
"is_fb":true,
"is_first_launch":true,
"click_time":"2017-07-18 12:55:05",
"iscache":false,
"ad_id":"6074245540018",
"af_sub1":null,
"campaign":"T:DAT_L:AR-AE",
"is_paid":true,
"af_sub4":null,
"adgroup_id":"6073532011418",
"is_mobile_data_terms_signed":true,
"af_channel":"Facebook",
"af_sub5":null,
"media_source":"Facebook Ads",
"install_time":"2017-07-19 08:06:56.189",
"af_sub2":null
}
{
"media_source":"Facebook Ads",
"campaign":"T:App Install_A:ALL",
"adset":"T:App Install_M:iOS_O:ALL_L:DE-DE_A:ALL",
"adgroup":"T:App Install_M:iOS_O:ALL_L:DE-DE_A:ALL_Banne",
"campaign_id":"6074766693717",
"af_status":"Non-organic",
"agency":null,
"af_sub3":null,
"af_siteid":null,
"adset_id":"6074767207317",
"is_fb":true,
"is_first_launch":true,
"click_time":"2017-07-17 16:23:18",
"iscache":false,
"ad_id":"6078076656717",
"af_sub1":null,
"is_paid":true,
"af_sub4":null,
"adgroup_id":"6074821181517",
"is_mobile_data_terms_signed":true,
"af_channel":"Facebook",
"af_sub5":null,
"install_time":"2017-07-18 15:10:50.190",
"af_sub2":null
}
Enlaces profundos diferidos con SRN
AppsFlyer siempre recibe los datos de conversión y los pone a disposición de la aplicación en el primer inicio.
A los usuarios nuevos que instalan la aplicación después de hacer clic en una campaña de enlaces profundos o retargeting en una SRN se los puede redirigir dentro de la aplicación al momento del inicio, utilizando los datos de conversión.
Sin embargo, en el caso de las SRN, los parámetros regulares de enlaces profundos de AppsFlyer, como af_dp, no están presentes como parte de datos de enlaces profundos.
Para usar estos datos dentro de la aplicación, el desarrollador necesita emplear una lógica adicional basada en los parámetros disponibles, como campaña, conjunto de anuncios o nombres de anuncios individuales.
Ejemplo
Jill, la marketer móvil de greatapp, decide ejecutar una campaña de enlaces profundos en Facebook, dirigida a una audiencia general.
La campaña redirige a todos los usuarios que hagan clic a una actividad "bonificada".
Jack, el desarrollador móvil, agrega esta lógica después de obtener los datos de conversión:
1. ¿Se originan en Facebook ("is_fb=true")?
2. Si es verdadero, se obtiene el valor del parámetro del conjunto de anuncios.
3. Si el valor contiene la palabra "bonificación", envía al usuario a la actividad "bonificada".
Empleando los métodos de Facebook, se redirige a los usuarios existentes que hagan clic en el anuncio directamente a la actividad, mientras que los usuarios nuevos obtienen la misma experiencia a través de los datos de conversión de AppsFlyer.