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)
    }

}

Enlace de Github

Deferred Deep Linking (método heredado)

Cuando la aplicación se abre a través de enlaces profundos diferidos, la carga útil de onConversionDataSuccessdevuelve datos de enlaces profundos, así como datos de atribución.