Integración del SDK de AppsFlyer - Android

Versión actual: 4.7.1

NOTAeste es un cambio importante de versión, es muy importante leer este documento con cuidado para estar informado sobre todos los cambios.   Para más detalles de la migración de V.3.3.x a 4.6.0 haz clic aquí.

El SDK de AppsFlyer entrega funcionalidad para la instalación de la app y trackeo de eventos. Hemos desarrollado un SDK muy sólido (+ de 7.000 millones de instalaciones de SDK a la fecha), seguro, ligero y muy sencillo de incrustar.

Puedes trackear instalaciones, actualizaciones y sesiones (siguiendo los pasos obligatorios a continuación), así como también trackear eventos in-app adicionales más allá de las instalaciones de la app (incluyendo compras in-app, niveles de juegos, etc.) para evaluar el ROI y el nivel de participación de los usuarios.

Los pasos obligatorios están detallados en las secciones 2 y 3 a continuación, seguidos de características adicionales opcionales en las secciones 4 y 5

El SDK de AppsFlyer para Android es compatible desde Android 2.3 en adelante.

 Descarga del SDK para Android

Para descargar el Android SDK jar, haz clic aquí.

Para más detalles de la App de muestra de AppsFlyer, haz clic aquí.

1.  ¿Cuáles son las novedades de esta versión?

  • Arreglamos la alerta presentada por ProGuard.
  • Paramétros para Eventos adicionales.
  • Soporte para las medición de desinstalaciones via Firebase.
  • Varios bug fixes y mantenimiento.

2.  Integración del SDK en tu aplicación (obligatorio)

Los siguientes pasos son obligatorios para medir las instalaciones y sesiones.

Puedes integrar el SDK de AppsFlyer automáticamente via Gradle's Dependency Management o manualmente como un SDK.jar.

2.1 Agrega el SDK de AppsFlyer a tu Proyecto

La manera más sencilla de integrar el SDK dentro de tu proyecto, es usando Gradle's Dependency Management. 

Añadiendo la Dependencia del SDK de Android:

1.  Abre tu proyecto (o crea uno nuevo), y luego abre your_app | build.gradle

2.  Añade lo siguiente a Module-level /app/build.gradle antes de las dependencias:

repositories {
	mavenCentral() 
}

3.  Añade la dependencia compilada con la versión más reciente del SDK de Appsflyer en el archivo build.gradle:

dependencies {
 compile 'com.appsflyer:af-android-sdk:4+@aar'
}

Puedes encontrar información sobre la versión más reciente aquí

Ahora puedes importar el SDK de AppsFlyer a tu proyecto e integrarlo cómo se describe en esta guía:

import com.appsflyer.AppsFlyerLib

Si no estás utilizando Gradle, descarga y añade el AF-Android-SDK.jar al class path del proyecto.

2.2 Configura los permisos requeridos

El AndroidManifest.xml debe incluir los siguientes permisos:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

*Los permisos ACCESS_WIFI_STATE y READ_PHONE_STATE son opcionales.

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />

Agregar estos permisos habilita el trackeo de IMEI del proveedor (requerido para el trackeo de apps fuera del Google Play - APKs).

2.3 Configura un Install Referrer Broadcast Receiver en AndroidManifest.xml

Las apps de Android no pueden tener múltiples receptores con la misma intent-filtered action.  

Las siguientes dos opciones están disponibles para implementar el install referrer broadcast reciever:

2.3.1  Usando un Multiple Broadcast Receiver

AppsFlyer provee una solucion que emite el INSTALL_REFERRER a todos los otros receptores automáticamente. En el AndroidManifest.xml, sume el siguiente receptor como el PRIMER receptor para INSTALL_REFERRER, y asegúrese de que el tag del receptor esté dentro del tag de la aplicación:

<receiver android:name="com.appsflyer.MultipleInstallBroadcastReceiver" android:exported="true">
  <intent-filter>
     <action android:name="com.android.vending.INSTALL_REFERRER" />
  </intent-filter>
</receiver>

Si quiere usar receptores múltiples, el Manifest.xml, debe aparecer de la siguiente manera:

<!—The AppsFlyer Install Receiver is first and will broadcast to all receivers placed below it -->
<receiver android:name="com.appsflyer.MultipleInstallBroadcastReceiver" android:exported="true">
  <intent-filter>
     <action android:name="com.android.vending.INSTALL_REFERRER" />
  </intent-filter>
</receiver>
<!—All other receivers should follow right after -->     
<receiver android:name="com.google.android.apps.analytics.AnalyticsReceiver" android:exported="true">
 <intent-filter>
      <action android:name="com.android.vending.INSTALL_REFERRER" />
 </intent-filter>
</receiver>
<receiver android:name="com.admob.android.ads.analytics.InstallReceiver" android:exported="true">
      <intent-filter>
          <action android:name="com.android.vending.INSTALL_REFERRER" />
      </intent-filter>
</receiver>

2.3.2  Usando un Single Broadcast Receiver

En el AndroidManifest.xml, sume el siguiente receptor como el PRIMER receptor para INSTALL_REFERRER o después de otro receptor multiple, y asegúrese de que el tag del receptor esté dentro del tag de la aplicación:

<receiver android:name="com.appsflyer.SingleInstallBroadcastReceiver" android:exported="true">
           <intent-filter>
               <action android:name="com.android.vending.INSTALL_REFERRER" />
           </intent-filter>
</receiver>

Para más información acerca de cómo añadir un receptor adicional y así poder acceder a los datos de instalación de app desde su contexto, haga clic aquí.

2.4 Incrusta Google Play Services en tu app

Recolectar el Google Advertising ID (GAID) es esencial para trackear campañas a través de distintos canales incluyendo Facebook, Google y Twitter.

Para agregar Google Advertising ID:

  1. Instala el SDK de Google Play Services e impórtalo a tu proyecto. Para detalles de la descarga, haz clic aquí.
  2. Agrega la siguiente entrada al AndroidManifest.xml como la última entrada bajo aplicación (antes de </application>):
<meta-data android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />

NOTAS:

  • AppsFlyer usa la librería de Google Play Services para recuperar el Google Advertising ID.
  • Google Play Services 7.5 es el requerimiento mínimo para obtener GCM Registration Token (el cual es usado para nuestro tracking de Uninstalls). AppsFlyer recomiendo usar siempre la versión más nueva.

Aunque la librería brinda servicios adicionales, si usas ProGuard como parte de tu proceso de construcción, este deja una huella ligera. Únicamente usamos los paquetes de anuncios (ads) de Google Services. Si quieres optimizar el tamaño de tu proyecto, puedes excluir cualquier otro paquete.

Para más detalles visita https://developers.google.com/android/guides/setup.

Fuente: https://developer.android.com/google/play-services/setup.html

2.5  Recolectar Android ID e IMEI

Por defecto, el IMEI y el Android ID no son recolectados por el SDK si la versión del OS es mayor a KitKat (4.4) y la aplicación contiene Google Play Services.

Para enviar explícitamente estos IDs a AppsFlyer, los desarrolladores pueden usar las siguientes APIs:

AppsFlyerLib.getInstance().setImeiData("IMEI_DATA_HERE")
AppsFlyerLib.getInstance().setAndroidIdData("ANDROID_ID_DATA_HERE")

Si la app NO contiene Google Play Services, el IMEI y el Android ID son recolectados por el SDK.

Los desarrolladores pueden elegir no recolectar el IMEI y el Android ID, usando las siguientes APIs:

AppsFlyerLib.getInstance().setCollectIMEI(false)
AppsFlyerLib.getInstance().setCollectAndroidID(false)

NOTA: Al menos uno identificador de dispositivo debería ser recolectado para permitir la correcta atribución de instalaciones.

3.  Evento de Inicialización y de Instalación del SDK (requerimiento mínimo para trackeo)

NOTA:  este es el requerimiento mínimo para empezar el trackeo de las instalaciones de tu app.

3.1  Inicializando el SDK

Para inicializar el SDK, añada el siguiente código a su función onCreate:

public void startTracking(Application application, String key);

Ejemplo:

AppsFlyerLib.getInstance().startTracking(this.getApplication(),"[Dev_Key]");

Reemplace [Dev_Key] con su propia Dev_Key (accesible desde su cuenta, vea Settings >> SDK Integration...en el dashboard de AppsFlyer).

Esta API le permite a AppsFlyer registrar instalaciones, sesiones y actualizaciones.

3.2  Reportando Deeplinks para Atribución de Re-Targeting

Si su app soporta deeplinking o planea correr campañas de re-targeting, debe implementar los pasos descritos en la sección 5.6.

3.3  Reportando Sesiones de Fondo

Si su app es una app de utilidades corriendo en el fondo, puede usar la API descrita en la sección 5.12 para medir sesiones y retención dentro de AppsFlyer.

4.  API de trackeo de eventos in-app (opcional)

Esta API habilita a AppsFlyer a trackear eventos posteriores a la instalación.  Estos eventos son definidos por el anunciante e incluyen el nombre del evento, además de otros valores opcionales del evento.

El trackeo de los eventos in-app ayuda a medir y a analizar cómo los usuarios leales descubren tu app, y se los puede atribuir a campañas/fuentes de medios específicos.  Se recomienda tomar el tiempo necesario para definir lo eventos que quieres medir para permitir trackear el ROI (retorno de la inversión) y LTV (Lifetime Value)

Sintaxis:

public static void trackEvent(Context context, String eventName, Map eventValues)

contexto - usa getApplicationContext()

eventName es cualquier string para definir el nombre del evento

eventValues es un mapa de los parámetros del evento que componen un evento rico.  

Contando rentas/ingresos como parte de un evento rico in-app: Usa af_revenue (constante)

AFInAppEventParameterName.REVENUE

Parámetro del evento para contar rentas como parte de un evento rico in-app: Puedes ingresar datos con cualquier valor numérico, positivo o negativo.

NOTA:  af_price 

AFInAppEventParameterName.PRICE

NO se cuenta como ingreso y es un parámetro descriptivo que no afecta los ingresos y mediciones de LTV.

Ejemplo 1: evento in-app de nivel logrado en un videojuego  

Map<String, Object> eventValue = new HashMap<String, Object>();
eventValue.put(AFInAppEventParameterName.LEVEL,9);
eventValue.put(AFInAppEventParameterName.SCORE,100);
AppsFlyerLib.getInstance().trackEvent(content,AFInAppEventType.LEVEL_ACHIEVED,eventValue);

Esto genera un evento tipo af_level_achieved con los siguientes valores de evento:

{af_level: 9, af_score: 100}

Ejemplo 2: evento de compra

Map<String, Object> eventValue = new HashMap<String, Object>();
eventValue.put(AFInAppEventParameterName.REVENUE,200);
eventValue.put(AFInAppEventParameterName.CONTENT_TYPE,"category_a");
eventValue.put(AFInAppEventParameterName.CONTENT_ID,"1234567");
eventValue.put(AFInAppEventParameterName.CURRENCY,"USD");
AppsFlyerLib.getInstance().trackEvent(content,AFInAppEventType.PURCHASE,eventValue);

Esto genera un evento tipo type af_purchase con los siguientes valores de evento:

{af_content_id: “1234567”, af_content_type: “category_a”, af_revenue: 200, af_currency: “USD”}

Este evento de compra contiene un ingreso de $200 y este aparecerá como renta en el panel de control.

NOTA: El nombre de un evento in-app no debe tener más de 45 caracteres.  Los nombres de eventos con más de 45 caracteres no aparecerán en el panel de control, solo en los reportes de Datos sin procesar, APIs Pull y Push.

Para más detalles de los eventos ricos in-app de AppsFlyer para Android, haz clic aquí.

5.  Integraciones avanzadas

Las APIs a continuación son opcionales y hacen parte de la integración avanzada con el SDK de AppsFlyer.

5.1 Configura el código de moneda (opcional)

Puedes configurar un código global de moneda usando la API a continuación, adicionalmente a los códigos de moneda que pueden ser usados como parte de cada evento in-app enviado a AppsFlyer  El código global de moneda se usa cuando af_currency 

AFInAppEventParameterName.CURRENCY

no se envía como parte de un evento in-app.

USD es el valor predeterminado. Encontrarás los códigos de moneda ISO aceptables aquí.

Usa la siguiente API para configurar el código de moneda:

public void setCurrencyCode(String currencyCode);

Ejemplo:

AppsFlyerLib.getInstance().setCurrencyCode("GBP");

5.2 Obtén unique ID de AppsFlyer (opcional)

Por cada nueva instalación de una app, se crea un unique ID propietario de AppsFlyer. El unique ID de AppsFlyer es la ID principal usada por AppsFlyer en los Reportes y las APIs.

Usa la siguiente API para obtener el unique ID de AppsFlyer:

public String getAppsFlyerUID(Context context);

Ejemplo:

String appsFlyerId = AppsFlyerLib.getInstance().getAppsFlyerUID(this);

5.3 Configura la ID de usuario-cliente (opcional)

Configurar tu propia ID de cliente te habilita a hacer cross-reference a tu propia ID con el ID únicos de AppsFlyer y los IDs de los otros dispositivos. Esta ID está disponible en los reportes CSV de AppsFlyer, junto con APIs Postback para cross-reference con tus IDs internas.

Para configurar tu ID de usuario-cliente:

public void setCustomerUserId(String id);

Ejemplo:

AppsFlyerLib.getInstance().setCustomerUserId("myId");

NOTAS IMPORTANTES:

  • Se recomienda configurar tu ID de usuario-cliente tan pronto sea posible, ya que se asociará únicamente a eventos reportados después de haber configurado este atributo.
  • Debes configurar tu ID de usuario-cliente usando esta API para usar las integraciones de AppsFlyer con las plataformas de analíticas, tales como Mixpanel y Swrve.

5.4 Obtén datos de conversión (opcional)

AppsFlyer te permite acceder a los datos de atribución de usuario en tiempo real diractamente en el nivel del SDK. Esto te habilita a personalizar la página de inicio que el usuario ve en la primera apertura de la app después de una instalación fresca de app. 

Para más información de esta funcionalidad avanzada, consulta aquí.

5.5 Configura el correo electrónico (opcional)

AppsFlyer te habilita a reportar una o más de las direcciones de correo electrónico asociadas del dispositivo. Debes recopilar las direcciones y reportarlas a AppsFlyer según tu método de codificación requerido.

Los siguientes son los métodos de codificación disponibles: Sha1, MD5 y plain.

Ejemplo:

public void setUserEmails(String... emails);

Ejemplo 2:

AppsFlyerLib.getInstance().setUserEmails(AppsFlyerProperties.EmailsCryptType.MD5, "email1@domain.com","email2@domain.com", ….);

NOTA: La Información Personal Identificable (PII) como el correo electrónico, no es retenida por AppsFlyer, ni presentada en ninguno de los reportes. Se recolecta esta información solamente con fines de uso en postbacks hacia fuentes de medios.

5.6 Reportando deeplinks para la atribución de re-targeting (opcional)

El Deeplinking es una parte crucial de las campañas de retargeting. Se recomienda fuertemente su uso en este tipo de campañas.

Para cada actividad que se use para deeplinking*, además de la actividad principal, se debe añadir la siguiente línea de codigo en el onCreate()

AppsFlyerLib.getInstance().sendDeepLinkData(this);

*Las actividades que sean abiertas por medio de deeplinking deberían tener el siguiente intent filter en las definiciones de actividad dentro del archivo de manifest.

<intent-filter>
               <action   android:name="android.intent.action.VIEW" />
               <category android:name="android.intent.category.DEFAULT" />
               <category android:name="android.intent.category.BROWSABLE" />
               <data     android:scheme="your unique scheme" />
</intent-filter>

5.7 Validación de compra in-app (opcional)

El SDK de AppsFlyer brinda verificación de servidor para compras in-app. Para configurar el trackeo de validación de compras, llama el método validateAndTrackInAppPurchase dentro de la función onActivityResult.

Esta llamada genera automáticamente un evento in-app af_purchase.

public static void validateAndTrackInAppPurchase(Context context,
String publicKey, String signature, String purchaseData, String price,
String currency, HashMap<String, String> additionalParameters);

Esta llamada tiene dos bloques callback, uno para ‘Exitoso’y otro para ‘Fallido’ (para cualquier razón, incluyendo una falla en la validación)

AppsFlyerLib.getInstance().registerValidatorListener(this,new AppsFlyerInAppPurchaseValidatorListener() {
          public void onValidateInApp() {
              Log.d(TAG, "Purchase validated successfully");
          }
          public void onValidateInAppFailure(String error) {
              Log.d(TAG, "onValidateInAppFailure called: " + error);
          }
      });

Usage Example:

AppsFlyerLib.getInstance().validateAndTrackInAppPurchase(context,publicKey, signature, purchaseData, price,currency, null;

5.8 Exclusión de Usuario, “opt-out” (opcional)

AppsFlyer te brinda un método de opción de exclusión para usuarios específicos de analíticas de AppsFlyer. Este método da cumplimiento a los últimos requerimientos de privacidad y a las políticas de privacidad y datos de Facebook.  Lo predeterminado es NO, lo que significa que el trackeo está habilitado.

Usa esta API durante el inicio del SDK en la Sección 4 para la opción explícita de exclusión:

public void setDeviceTrackingDisabled(boolean isDisabled);

Ejemplo:

AppsFlyerLib.getInstance().setDeviceTrackingDisabled(true);

5.9 Trackear las instalaciones de la app hechas fuera de la tienda de Google Play (opcional)

NOTA IMPORTANTE: Google Play es la tienda predeterminada. Si estás publicando tu app únicamente en Google Play, puedes obviar esta sección.

Para rastrear las instalaciones hechas por fuera de Google Play, configura el canal / tienda en appAndroidManifest.xml con un canal único o cualquier nombre de tienda por cada APK. El valor del CANAL es sensible a mayúsculas.

Ejemplos:

Amazon:

<meta-data android:name="CHANNEL" android:value="Amazon" />

Standalone:

<meta-data android:name="CHANNEL" android:value="Standalone"/>

Verizon (Pre-Installed):

<meta-data android:name="CHANNEL" android:value="Amazon" />

NOTA: debes configurar el valor del CANAL en el panel de control de AppsFlyer al configurar la app.

Ubica la meta-data tag antes de </application> tag.

Para más detalles de cómo trackear instalaciones para aplicaciones fuera de Google Play, haz clic aquí.

5.10 Trackea desinstalaciones de la app

AppsFlyer te habilita a trackear la desinstalación de apps.

Añada los siguientes permisos al manifest (Las aplicaciones que usan push notifications ya deberían tener estos permisos)

<uses-permission android:name="android.permission.WAKE_LOCK" />

    <permission android:name="YOUR-PACKAGE-NAME.permission.C2D_MESSAGE"
        android:protectionLevel="signature" />
    <uses-permission android:name="<your-package-name>.permission.C2D_MESSAGE" /> <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
NOTA: Verifique que el nombre de su package es correcto.
 
Añada el siguiente receptor antes del tag </application>:
<receiver
android:name="com.google.android.gms.gcm.GcmReceiver"
android:exported="true">
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
</intent-filter>
</receiver>
<service android:name="com.appsflyer.InstanceIDListener" android:exported="false">
<intent-filter>
<action android:name="com.google.android.gms.iid.InstanceID"/>
</intent-filter>
</service>
Configure su GCM Project Number dentro de su actividad principal. Sume esta línea inmediatamente antes del llamado a startTracking():
 
public void setGCMProjectNumber(Context context, String id);
 
Ejemplo:
AppsFlyerLib.getInstance().setGCMProjectNumber(this, '1234567890');

Para completar este proceso de la manera correcta, debe también leer aquí.

5.11 Implementar Deeplinking on OneLink (Opcional)

OneLink permite a una app abrir en la ubicación del deeplink, mencionando al scheme debajo del parámetro af_dp.

El callback onAppOpenAttribution debe ser implementado de manera que sea llamado por el SDK de AppsFlyer. Este retornará los parámetros de Onelink que serán utilizados para disparar la apertura de la app. Despues, puede  analizar los valores y aplicar la lógica para disparar la página de la app relevante.

void onAppOpenAttribution(Map<String,String> attributionData); //android
Para más información, haga clic aquí.
 

5.12 Reportar Sesiones de Fondo (Opcional) 

Esta es la API recomendada para apps de utilidad que quieren medir la retención de sus usuarios mientras corren en el fondo.
public void reportTrackSession(Context context);
Ejemplo:
AppsFlyerLib.getInstance().reportTrackSession(context);

5.13  Medición de Push Notifications (Opcional)

AppsFlyer le permite medir push notifications que hagan parte de una campaña de re-targeting.
 
Para activar esta función, llame al siguiente método dentro del método onCreate de cada Actividad que sea lanzada al hacer click en la notifiación:
 
AppsFlyerLib.getInstance().sendPushNotificationData(this);
 
La carga de los datos debería incluir un objeto "af" con el string de valores clave relevante: 
\"af\" : { \"c\" : \"test_campaign\" , \"is_retargeting\" : \"true\" , \"pid\" : \"push_provider_int\" })
 
Ejemplo:
\"data\": { \"score\": \"5x1\", \"time\": \"15:10\" , \"af\" : { \"c\" : \"test_campaign\" , \"is_retargeting\" : \"true\" , \"pid\" : \"push_provider_int\" } } }"[with deep-linking] \"data\": { \"score\": \"5x1\", \"time\": \"15:10\", \"click_action\" : \"com.example.someAction\" , \"af\" : { \"c\" : \"test_campaign\" , \"is_retargeting\" : \"true\" , \"pid\" : \"push_provider_int\" } } }"

 

6.  Probando la integración del SDK – IMPORTANTE!

Para aprender cómo probar la integración del SDK antes de enviarla a la tienda Google Play haz clic aquídespués de enviarla a la tienda Google Play, haz clic aquí.

¿Fue útil este artículo?
Usuarios a los que les pareció útil: 0 de 0
¿Tiene más preguntas? Enviar una solicitud
Tecnología de Zendesk