Datos de conversión
En esta guía aprenderás a obtener datos de conversión usando AppsFlyerConversionListener
, así como ejemplos para el uso de los datos de conversión.
Aprende más sobre qué son los datos de conversión.
Antes de comenzar
Los siguientes ejemplos de código requieren importar AppsFlyerLib
and AppsFlyerConversionListener
:
import com.appsflyer.AppsFlyerLib;
import com.appsflyer.AppsFlyerConversionListener;
Configuración de AppsFlyerConversionListener en el SDK de Android
AppsFlyerConversionListener overview
The AppsFlyerConversionListener
te permite escuchar las conversiones.
Si implementas y registras AppsFlyerConversionListener
Al llamar a init
, su devolución de llamada onConversionDataSuccess
se invoca siempre que:
- Un usuario abre la aplicación.
- Un usuario mueve la aplicación al primer plano.
Si por alguna razón el SDK no logra obtener los datos de conversión, onConversionDataFail
is invoked.
Acceso a los datos de atribución
Cuando se invoca, onConversionDataSuccess
devuelve un Map
(llamado conversionDataMap
en el ejemplo) que contiene los datos de conversión para esa instalación. Los datos de conversión se almacenan en caché la primera vez que onConversionDataSuccess
se llama y serán idénticos en llamadas consecutivas.
Organic vs. Non-organic conversions
Una conversión puede ser orgánica o no orgánica:
- Una conversión orgánica es aquella no atribuida que normalmente es el resultado de una instalación directa desde una tienda de aplicaciones.
- Una conversión no orgánica es aquella que se atribuye a una fuente de medios.
Puedes obtener el tipo de conversión comprobando el valor de af_status
en la carga útil de onConversionDataSuccess
. Puede ser uno de los siguientes valores:
Organic
Non-organic
Ejemplo
import com.appsflyer.AppsFlyerConversionListener;
import com.appsflyer.AppsFlyerLib;
import com.appsflyer.AppsFlyerLibCore.LOG_TAG;
AppsFlyerConversionListener conversionListener = new AppsFlyerConversionListener() {
@Override
public void onConversionDataSuccess(Map<String, Object> conversionDataMap) {
for (String attrName : conversionDataMap.keySet())
Log.d(LOG_TAG, "Conversion attribute: " + attrName + " = " + conversionDataMap.get(attrName));
String status = Objects.requireNonNull(conversionDataMap.get("af_status")).toString();
if(status.equals("Organic")){
// Business logic for Organic conversion goes here.
}
else {
// Business logic for Non-organic conversion goes here.
}
}
@Override
public void onConversionDataFail(String errorMessage) {
Log.d(LOG_TAG, "error getting conversion data: " + errorMessage);
}
@Override
public void onAppOpenAttribution(Map<String, String> attributionData) {
// Must be overriden to satisfy the AppsFlyerConversionListener interface.
// Business logic goes here when UDL is not implemented.
}
@Override
public void onAttributionFailure(String errorMessage) {
// Must be overriden to satisfy the AppsFlyerConversionListener interface.
// Business logic goes here when UDL is not implemented.
Log.d(LOG_TAG, "error onAttributionFailure : " + errorMessage);
}
};
import com.appsflyer.AppsFlyerConversionListener
import com.appsflyer.AppsFlyerLib
import com.appsflyer.AppsFlyerLibCore.LOG_TAG
class AFApplication : Application() {
// ...
override fun onCreate() {
super.onCreate()
val conversionDataListener = object : AppsFlyerConversionListener{
override fun onConversionDataSuccess(data: MutableMap<String, Any>?) {
// ...
}
override fun onConversionDataFail(error: String?) {
Log.e(LOG_TAG, "error onAttributionFailure : $error")
}
override fun onAppOpenAttribution(data: MutableMap<String, String>?) {
// Must be overriden to satisfy the AppsFlyerConversionListener interface.
// Business logic goes here when UDL is not implemented.
data?.map {
Log.d(LOG_TAG, "onAppOpen_attribute: ${it.key} = ${it.value}")
}
}
override fun onAttributionFailure(error: String?) {
// Must be overriden to satisfy the AppsFlyerConversionListener interface.
// Business logic goes here when UDL is not implemented.
Log.e(LOG_TAG, "error onAttributionFailure : $error")
}
}
AppsFlyerLib.getInstance().init(devKey, conversionDataListener, applicationContext)
AppsFlyerLib.getInstance().start(this)
}
}
Deferred Deep Linking (método heredado)
Cuando la aplicación se abre a través de enlaces profundos diferidos, la carga útil de onConversionDataSuccess
devuelve datos de enlaces profundos, así como datos de atribución.
- La práctica recomendada es implementar los enlaces profundos con enlaces profundos unificados (UDL).
- Para clientes existentes y referencia, aquí está nuestra guía heredada de enlaces profundos para Android, usando
AppsFlyerConversionListener
.
Actualizado hace 8 meses