De un vistazo: Integra e instala el SDK de AppsFlyer en aplicaciones de Android o iOS desarrolladas con Unity. Una vez completadas las tareas básicas de integración, tu aplicación estará lista para la atribución de instalaciones y la medición de eventos in-app.
Lectura relacionada:
Para obtener una imagen completa de la integración del plugin de Unity con tus aplicaciones, asegúrate de leer estos artículos:
- Guía de integración del plugin de Unity V6: descripción general
- Guía de integración del plugin de Unity V6: integración básica del SDK (este artículo)
- Guía de integración del plugin de Unity V6: integración adicional del SDK
- Guía de integración del plugin de Unity V6: referencia de API
Agregar el plugin a tu aplicación
¡Importante!
El SDK de Unity de AppsFlyer no es compatible con Unity Internal Build System.
Descargar el plugin de Unity de AppsFlyer
Descarga el último plugin de Unity de GitHub.
Instalar el plugin
Usa uno de los siguientes métodos de instalación.
El External DependencyManager for Unity (EDM4U) se distribuye de forma predeterminada por el plugin Unity de AppsFlyer. Esto facilita el proceso de integración resolviendo conflictos de dependencia entre tu plugin y otros plugins de tu proyecto.
Para instalar el plugin:
Agrega appsflyer-unity-plugin.v*.unitypackage para importar automáticamente todos los activos necesarios tanto para el plugin de AppsFlyer como para el EDM4U.
Para instalar el plugin sin el EDM4U:
- Importa appsflyer-unity-plugin.v*.unitypackage en tu proyecto, pero asegúrate de desactivar la selección de las dependencias de EDM4U.
- Descarga y agrega las dependencias de Android necesarias a la carpeta Assets/Plugins/Android:
- Descarga y agrega las dependencias requeridas de iOS a la carpeta Assets/Plugins/iOS/AppsFlyer:
Configurar Android
Para configurar los permisos necesarios para Android:
Configura los siguientes permisos a AndroidManifest.xml
:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
Las aplicaciones dirigidas al nivel 31 de la API (Android 12) deben agregar el siguiente permiso a AndroidManifest.xml
para acceder al Identificador de publicidad de Android:
<uses-permission android:name="com.google.android.gms.permission.AD_ID" />
Inicializar el plugin
Esta sección describe cómo implementar e inicializar el plugin.
Recuperar la clave de desarrollador
- La clave es única e identifica la cuenta. En algunos casos hay una clave a nivel de aplicación.
- La clave de desarrollador es obligatoria.
Para obtener la clave de desarrollador:
- En AppsFlyer, ve a Configuración > Configuración de la aplicación.
- Obtener la clave de desarrollador.
Inicializar el plugin
Para inicializar el plugin usando prefab:
- Ve a Assets >AppsFlyer.
- Arrastra AppsFlyerObject.prefab a tu escena.
- Configura los siguientes campos:
Configuración Observaciones Clave de desarrollador Pega la clave de desarrollador que obtuviste anteriormente. ID de aplicación iOS: ingresa el ID de aplicación de iOS (sin prefijo de
id
).Android: déjalo en blanco.
Obtener datos de conversión Si la aplicación implementa los enlaces profundos de AppsFlyer, configúralo como "true" (verdadero). El valor predeterminado es "false" (falso), lo que significa que los enlaces profundos NO están implementados de forma predeterminada. Es depurado Para ver los registros de depuración durante el desarrollo: configúralo como true.
Nota: Asegúrate de desactivar (configurar en false) antes de lanzar la aplicación a producción.
- Actualiza el código en Assets > AppsFlyer > AppsFlyerObjectScript.cs con otras APIs disponibles.
Para integrarla manualmente:
Crea un objeto de juego y agrega el siguiente código de inicio:
using AppsFlyerSDK;
public class AppsFlyerObjectScript : MonoBehaviour , IAppsFlyerConversionData
{
void Start()
{
/* AppsFlyer.setDebugLog(true); */
AppsFlyer.initSDK("devkey", "appID", this);
AppsFlyer.startSDK();
}
public void onConversionDataSuccess(string conversionData)
{
AppsFlyer.AFLog("onConversionDataSuccess", conversionData);
Dictionary<string, object> conversionDataDictionary = AppsFlyer.CallbackStringToDictionary(conversionData);
// add deferred deeplink logic here
}
public void onConversionDataFail(string error)
{
AppsFlyer.AFLog("onConversionDataFail", error);
}
public void onAppOpenAttribution(string attributionData)
{
AppsFlyer.AFLog("onAppOpenAttribution", attributionData);
Dictionary<string, object> attributionDataDictionary = AppsFlyer.CallbackStringToDictionary(attributionData);
// add direct deeplink logic here
}
public void onAppOpenAttributionFailure(string error)
{
AppsFlyer.AFLog("onAppOpenAttributionFailure", error);
}
}
Nota: Asegúrate de no eliminar el objeto de juego.
Atribuir eventos in-app
Atribuye eventos in-app para medir KPI como los ingresos, el ROI y el valor de vida útil (LTV).
Los eventos in-app deben implementarse para atribuir los eventos del usuario. Los eventos pueden enviarse de varias maneras:
- [Práctica recomendada] Enviar eventos a través de la aplicación como se describe en este artículo.
- Para conocer métodos adicionales consulta la guía general sobre eventos in-app.
Para las aplicaciones que pertenecen a una vertical, por ejemplo, viajes, gaming, comercio electrónico, consulta la lista de eventos in-app recomendados por vertical.
Parámetros y nombres de eventos in-app
Para enviar eventos:
- Especifica el nombre y los parámetros del evento.
- Ver listas relacionadas:
- Lista de estructuras y nombres de eventos recomendados.
- Lista encontrada en la clase
AFInAppEvents
.
[Práctica recomendada] Usa nombres y parámetros de eventos por los siguientes motivos:
- Nomenclatura estándar: AppsFlyer puede asignar automáticamente eventos a redes de autorreporte (SRN) como Facebook, Google y Twitter.
- Compatibilidad con versiones anteriores: no tendrás problemas si AppsFlyer decide cambiar el nombre o parámetro del evento. La implementación es compatible con versiones anteriores.
Cómo registrar los ingresos
Reporta ingresos agregando el parámetro af_revenue
a los eventos in-app.
- Completa
af_revenue
con valores numéricos. Se permiten valores negativos. - El parámetro
af_revenue
completa los contadores de ingresos y los campos de raw data de AppsFlyer. Esto permite a los marketers ver los ingresos en el panel de control. - Los ingresos pueden enviarse usando otros parámetros, pero la plataforma de AppsFlyer no los reconocerá como ingresos. Haz clic aquí para obtener más detalles.
- Los valores de los ingresos no pueden contener comas para separar, signos de divisas ni texto.
Ejemplo de evento de ingresos: 1234.56
Práctica recomendada: Obtén información sobre la configuración, visualización y conversión de divisas.
Requisitos de código de divisa al enviar eventos generadores de ingresos
- Divisa predeterminada: USD
- Usa un código ISO 4217 de 3 caracteres (a continuación se muestra un ejemplo).
- Configura el código de divisa llamando a esta API:
AppsFlyer.setCurrencyCode("ZZZ")
Ejemplo: evento de compra in-app con ingresos
Este evento de compra es por 200.12 euros. Para que los ingresos se reflejen en el panel de control, usa lo siguiente.
System.Collections.Generic.Dictionary<string, string> purchaseEvent = new
System.Collections.Generic.Dictionary<string, string> ();
purchaseEvent.Add(AFInAppEvents.CURRENCY, "EUR");
purchaseEvent.Add(AFInAppEvents.REVENUE, "200.12");
purchaseEvent.Add(AFInAppEvents.QUANTITY, "1");
purchaseEvent.Add(AFInAppEvents.CONTENT_TYPE, "category_a",);
AppsFlyer.sendEvent ("af_purchase", purchaseEvent);
Registro de ingresos negativos
Registra los ingresos negativos usando el signo menos.
- El valor de ingresos está precedido por un signo menos.
- El nombre del evento tiene un valor único, "cancel_purchase". Esto te permite identificar los eventos con ingresos negativos en los reportes de raw data y en el panel de control.
Ejemplo: un usuario de la aplicación recibe un reembolso o cancela una suscripción.
System.Collections.Generic.Dictionary<string, string> purchaseEvent = new
System.Collections.Generic.Dictionary<string, string> ();
purchaseEvent.Add(AFInAppEvents.CURRENCY, "USD");
purchaseEvent.Add(AFInAppEvents.REVENUE, "-200");
purchaseEvent.Add(AFInAppEvents.QUANTITY, "1");
purchaseEvent.Add(AFInAppEvents.CONTENT_TYPE, "category_a");
AppsFlyer.sendEvent ("cancel_purchase", purchaseEvent);
Validación de compras in-app
El plugin proporciona verificación de servidor para las compras in-app.
Para validar una compra, instrucciones específicas del sistema operativo:
#if UNITY_ANDROID && !UNITY_EDITOR
AppsFlyerAndroid.validateAndSendInAppPurchase(
"publicKey",
"signature",
"purchaseData",
"price",
"currency",
null,
this);
#endif
Asegúrate de realizar una prueba contra la llamada del servidor de entorno de pruebas de Apple:
#if UNITY_IOS && !UNITY_EDITOR
AppsFlyeriOS.validateAndSendInAppPurchase(
"productIdentifier",
"price",
"currency",
"tranactionId",
null,
this);
#endif
Parámetros de método
Parámetro | Descripción |
---|---|
String publicKey | Clave pública de Google Developer Console. |
String signature |
Firma de transacción, devuelta por la API de Google cuando se finaliza la compra. |
String purchaseData |
Producto comprado en formato JSON, devuelto por la API de Google cuando se finaliza la compra. |
String revenue | Ingresos del evento in-app que deben notificarse a AppsFlyer. |
String currency | Divisa del evento in-app que debe notificarse a AppsFlyer. |
Dictionary<String, String> additionalParameters |
Parámetros adicionales de eventos in-app que aparecen en el campo event_value en el raw data del evento in-app. |
Parámetro | Descripción |
---|---|
String productIdentifier | Identificador de producto |
String price | Ingresos del evento in-app que deben notificarse a AppsFlyer. |
String currency | Divisa del evento in-app que debe notificarse a AppsFlyer. |
Dictionary<String, String> additionalParameters |
Parámetros adicionales de eventos in-app que aparecen en el campo event_value en el raw data del evento in-app. |
Nota
Llama a validateReceipt
para generar automáticamente un evento in-app af_purchase.
No envíes un evento de compra después de validar la compra. Al hacerlo, se duplica la información sobre los eventos.
Consideraciones de los eventos in-app
- Nombre del evento: máximo de 45 caracteres.
- El Valor del evento: no debe superar los 1000 caracteres; si es más largo, puede que lo trunquemos.
- Admite caracteres no ingleses para eventos in-app (y otras API)
- Precios e ingresos:
- Solo usa números y decimales como 5 o 5.2.
- Se permiten hasta 5 números después del decimal. Por ejemplo, 5.12345
Ejemplos de atribución de eventos in-app
Puedes atribuir eventos in-app al llamar a sendEvent
e incluir los parámetros de valor y nombre del evento.
Para más detalles, consulta Eventos in-app.
Ejemplo: cómo atribuir un evento de compra in-app.
Para ver una lista completa de fragmentos de código listos por segmento vertical, consulta nuestras guías de eventos in-app enriquecidos por segmento vertical.
System.Collections.Generic.Dictionary<string, string> purchaseEvent = new
System.Collections.Generic.Dictionary<string, string> ();
purchaseEvent.Add(AFInAppEvents.CURRENCY, "USD");
purchaseEvent.Add(AFInAppEvents.REVENUE, "200");
purchaseEvent.Add(AFInAppEvents.QUANTITY, "2");
purchaseEvent.Add(AFInAppEvents.CONTENT_TYPE, "category_a");
purchaseEvent.Add(AFInAppEvents.CONTENT_ID, "092");
AppsFlyer.sendEvent (AFInAppEvents.PURCHASE, purchaseEvent);
Atribuir eventos in-app sin conexión
En ocasiones, los usuarios generan eventos in-app cuando no están conectados a Internet. AppsFlyer almacena en caché el evento y lo reporta cuando es posible.
- El plugin envía los eventos a los servidores de AppsFlyer y espera una respuesta.
- Si el plugin no recibe una respuesta 200, el evento se almacena en el caché.
- Una vez recibida la respuesta 200, el evento almacenado en el caché se vuelve a enviar al servidor.
- Si hay múltiples eventos en el caché, se envían al servidor uno tras otro.
Nota
El caché puede almacenar hasta 40 eventos.
- Solo se guardan los primeros 40 eventos sin conexión.
- Todo los eventos siguientes sin conexión se descartarán hasta la próxima respuesta 200.
- En el reporte de raw data:
- Hora del evento = cuando se envió un evento a AppsFlyer después de que el dispositivo vuelve a estar en línea.
- No es la hora en que ocurrió el evento.
Enlaces profundos con OneLink
OneLink de AppsFlyer es la solución para la atribución multiplataforma: redireccionamiento y enlaces profundos.
Detección y redireccionamiento de dispositivos
OneLink:
- Detecta el tipo de dispositivo (iOS y Android, escritorio, etc.) cuando un usuario hace clic.
- Redirige al usuario al destino correspondiente: Google Play, tienda de aplicaciones de iOS, mercados fuera de la tienda o páginas web.
Para implementar enlaces de atribución multiplataforma y revisar los conceptos básicos de deep linking, consulta la guía de redireccionamiento de OneLink.
Enlaces profundos
Usa enlaces profundos para dirigir a los usuarios existentes a actividades específicas y contenido personalizado.
El propietario y desarrollador de una aplicación deben trabajar juntos para configurar enlaces profundos con OneLink:
- El propietario de la aplicación debe acceder al panel de control de AppsFlyer.
- El desarrollador debe acceder a la aplicación.
Consulta nuestra guía sobre configuración de enlaces profundos con OneLink.
Enlaces profundos diferidos
Los enlaces profundos diferidos te permiten establecer enlaces profundos con usuarios nuevos y ofrecerles actividades específicas y contenido personalizado después del primer inicio de una instalación de la aplicación.
Los enlaces profundos estándar también dirigen a los usuarios a actividades específicas y contenido personalizado, pero una aplicación ya debe estar instalada en el dispositivo del usuario.
Para configurar los enlaces profundos diferidos con OneLink:
- El desarrollador debe acceder a la plataforma de AppsFlyer.
- La configuración de la plataforma de AppsFlyer para enlaces profundos diferidos y estándar es la misma.
- Se necesita implementar una lógica adicional en la aplicación a fin de establecer enlaces profundos con los usuarios y ofrecerles contenido personalizado después de que instalen e inicien la aplicación.
Consulta enlaces profundos diferidos para obtener más información.
Obtener datos de enlaces profundos
El plugin proporciona los datos de conversión o engagement después de cada evento de enlaces profundos o instalación. Puedes usar estos datos para personalizar el contenido o el comportamiento de la aplicación de manera programática.
Para recibir datos de enlaces profundos:
- Implementa el callback
onAppOpenAttribution
(que aparece en la claseIAppsFlyerConversionData
), solicitado por el plugin de AppsFlyer. - Los parámetros en el enlace de atribución/Onelink devueltos activan la apertura de la aplicación.
- Analiza los valores y aplica la lógica para abrir la página de la aplicación pertinente.
public void onAppOpenAttribution(string attributionData)
{
AppsFlyer.AFLog("onAppOpenAttribution", attributionData);
Dictionary<string, object> attributionDataDictionary = AppsFlyer.CallbackStringToDictionary(attributionData);
// add direct deeplink logic here
}
Consulta datos de enlaces profundos para obtener más información.
Obtener datos de conversión
Para cada instalación se dispone de acceso a datos de atribución de usuarios en tiempo real. Úsalos para mejorar el engagement con el usuario proporcionando:
- Contenido personalizado.
- Enviar usuarios a actividades específicas dentro de una aplicación. Consulta Deferred Deep Linking en este artículo.
Obtener datos de conversión de AppsFlyer
Para obtener datos de conversión de AppsFlyer:
- Implementa
IAppsFlyerConversionDatabase
. - Llama al método
initSDK
con esto como el último parámetro. - Usa el método
onConversionDataSuccess
para redirigir al usuario.
Consulta la referencia de API para onConversionDataSuccess.
using AppsFlyerSDK;
public class AppsFlyerObjectScript : MonoBehaviour , IAppsFlyerConversionData
{
void Start()
{
/* AppsFlyer.setDebugLog(true); */
AppsFlyer.initSDK("devkey", "appID", this);
AppsFlyer.startSDK();
}
public void onConversionDataSuccess(string conversionData)
{
AppsFlyer.AFLog("onConversionDataSuccess", conversionData);
Dictionary<string, object> conversionDataDictionary = AppsFlyer.CallbackStringToDictionary(conversionData);
// add deferred deeplink logic here
}
public void onConversionDataFail(string error)
{
AppsFlyer.AFLog("onConversionDataFail", error);
}
public void onAppOpenAttribution(string attributionData)
{
AppsFlyer.AFLog("onAppOpenAttribution", attributionData);
Dictionary<string, object> attributionDataDictionary = AppsFlyer.CallbackStringToDictionary(attributionData);
// add direct deeplink logic here
}
public void onAppOpenAttributionFailure(string error)
{
AppsFlyer.AFLog("onAppOpenAttributionFailure", error);
}
}
Probar las instalaciones
Agregar a la lista de permitidos el dispositivo de prueba
Agrega a la lista de permitidos el dispositivo de prueba.
Simular instalaciones
Simula instalaciones orgánicas y no orgánicas.
Simular una instalación orgánica
Las instalaciones orgánicas son instalaciones sin atribuir que, por lo general, son instalaciones que se hacen directamente desde las tiendas de aplicaciones. Para simular una instalación orgánica, sigue estas instrucciones.
Simular una instalación no orgánica
Las instalaciones no orgánicas son instalaciones atribuidas que, por lo general, son el resultado del engagement de un anuncio. Para simular una instalación no orgánica, sigue estas instrucciones.