Current Unity SDK Version: v4.17.0
Compatible with Android SDK v4.8.18 and iOS SDK v4.8.10
1. Resumen
El SDK de AppsFlyer proporciona la instalación de aplicaciones móviles y la funcionalidad de rastreo de eventos para Android, iOS, Windows Phone y muchas otras plataformas de desarrollo móvil.
Puedes realizar un rastreo de las instalaciones, actualizaciones y sesiones, y también rastrear eventos posteriores a la instalación (incluidas las compras in-app, los niveles de juegos, etc.) para evaluar el ROI y los niveles de engagement del usuario.
Las aplicaciones móviles, que se desarrollan en la plataforma Unity, pueden disfrutar de la integración del SDK de AppsFlyer una vez y rastrear las aplicaciones generadas tanto para Android como para iOS. La siguiente guía detalla cómo integrar el SDK de AppsFlyer en tu código de Unity para tus aplicaciones de iOS y Android.
Nota
AppsFlyer supports integration with Unity version 5 and above
¡Importante!
La API de referencia de instalación de Google Play es compatible a partir del plugin de Unity versión 4.16.0. Si deseas usar la nueva API de referencia, actualiza el plugin a la versión 4.16.0 o superior.
Tip
- Chapters 2 and 3 are MANDATORY to implement BASIC SDK integration, i.e. install attribution only
- Tracking in-app events chapter is HIGHLY RECOMMENDED to implement
- The rest of the described features are OPTIONAL to implement, although some of them may be necessary for you, depending on your app's business logic. For example, tracking revenue or getting the conversion data on first launch may be vital for your app's flow
2. Inicio Rápido
2.1 Descarga el plugin de Unity de AppsFlyer
Puedes encontrar el plugin sobre Github aquí: https://github.com/AppsFlyerSDK/Unity
A continuación se detallan las instrucciones de integración para usar el plugin de Unity de AppsFlyer.
Instalar el plugin
A continuación se detallan las instrucciones de instalación para usar el plugin de AppsFlyer.
- Importa AppsFlyerUnityPlugin.unitypackage a tu proyecto de Unity.
- Ve al Assets >> Import Package >> Custom Package
- Selecciona el archivo AppsFlyerUnityPlugin.unitypackage.
2.3 Configuración obligatoria para Android y iOS
Configuración de Android
Configuración del receptor AF y permisos en AndroidManifest.xml:
<!-- receiver should be inside the <application> tag -->
<receiver android:name="com.appsflyer.MultipleInstallBroadcastReceiver" android:exported="true">
<intent-filter>
<action android:name="com.android.vending.INSTALL_REFERRER" />
</intent-filter>
</receiver>
<!-- Mandatory permission: -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
Configuración de los permisos requeridos
El AndroidManifest.xml incluye el siguiente permiso:
<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" />
<!-- Optional : -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
Configuración del BroadcastReceiver en AndroidManifest.xml
Las siguientes dos opciones están disponibles para implementar el receptor de transmisión de referencia de instalación:
Si no tienes un receptor escuchando en el INSTALL_REFERRER
, en el AndroidManifest.xml, agrega el siguiente receptor dentro de la etiqueta 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>
<receiver android:name="com.appsflyer.MultipleInstallBroadcastReceiver" android:exported="true">
<intent-filter>
<action android:name="com.android.vending.INSTALL_REFERRER" />
</intent-filter>
</receiver>
Configuración de iOS
Marcos y librerías enlazados
Tras crear el proyecto en Unity para xCode, deberás agregar Security.Framework a los Marcos y librerías enlazados de xCode si antes no se agregó ya el marco.
Apple Search Ads de iOS
Agrega lo siguiente:
- AdSupport.framework
- AppsFlyer recopila el IDFA solo si incluyes este marco. Si no agregas este marco, no podrás rastrear Facebook, Twitter ni la mayoría de las demás redes de publicidad.
- iAd.framework
-
Se recomienda encarecidamente agregar este marco a tu proyecto de aplicación, ya que es obligatorio para el rastreo de anuncios de búsqueda de Apple.
3. Inicialización del SDK
En tus métodos de Start / Init, debes configurar la clave de desarrollador (dev key) de AppsFlyer y los ID de aplicación únicos usados por iTunes y Google Play. Ten en cuenta que aquí debes configurar el ID de aplicación de iOS únicamente con dígitos, sin el prefijo "id".
Agrega el siguiente código:
void Start () {
/* Mandatory - set your AppsFlyer’s Developer key. */
AppsFlyer.setAppsFlyerKey ("YOUR_APPSFLYER_DEV_KEY");
/* For detailed logging */
/* AppsFlyer.setIsDebug (true); */
#if UNITY_IOS
/* Mandatory - set your apple app ID
NOTE: You should enter the number only and not the "ID" prefix */
AppsFlyer.setAppID ("YOUR_APP_ID_HERE");
AppsFlyer.trackAppLaunch ();
#elif UNITY_ANDROID
/* Mandatory - set your Android package name */
AppsFlyer.setAppID ("YOUR_ANDROID_PACKAGE_NAME_HERE");
/* For getting the conversion data in Android, you need to add the "AppsFlyerTrackerCallbacks" listener.*/
AppsFlyer.init ("YOUR_APPSFLYER_DEV_KEY","AppsFlyerTrackerCallbacks");
#endif
}
void Start () {
/* Mandatory - set your AppsFlyer’s Developer key. */
AppsFlyer.setAppsFlyerKey ("YOUR_APPSFLYER_DEV_KEY");
/* For detailed logging */
/* AppsFlyer.setIsDebug (true); */
#if UNITY_IOS
/* Mandatory - set your apple app ID
NOTE: You should enter the number only and not the "ID" prefix */
AppsFlyer.setAppID ("YOUR_APP_ID_HERE");
AppsFlyer.trackAppLaunch ();
#elif UNITY_ANDROID
/* Mandatory - set your Android package name */
AppsFlyer.setAppID ("YOUR_ANDROID_PACKAGE_NAME_HERE");
AppsFlyer.init ("YOUR_APPSFLYER_DEV_KEY");
#endif
}
¡Importante!
- Para Android, AppsFlyer.init incluye llamar a trackAppLaunch. Por lo tanto, no llames a trackAppLaunch en la versión para Android del plugin de Unity.
- En iOS, la respuesta de los datos de conversion se activa en la clase AppsFlyerTrackerCallbacks.cs.
4. Rastreando Eventos In-App
Los eventos In-App brindan insights sobre lo que está sucediendo en tu aplicación. Se recomienda tomarse el tiempo y definir los eventos que deseas medir para que puedas rastrear el ROI (Retorno de la Inversión) y el LTV (Valor del Tiempo de Vida).
Tracking in-app events is performed by calling trackRichEvent
with event name and value parameters. See In-App Events documentation for more details.
Nota
El nombre para el 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, sino solo en las API de pull y push y de raw data.
Ejemplo de evento de rastreo:
System.Collections.Generic.Dictionary<string, string> purchaseEvent = new
System.Collections.Generic.Dictionary<string, string> ();
purchaseEvent.Add ("af_currency", "USD");
purchaseEvent.Add ("af_revenue", "0.99");
purchaseEvent.Add ("af_quantity", "1");
AppsFlyer.trackRichEvent ("af_purchase", purchaseEvent);
Nota
AppsFlyer admite caracteres no ingleses con eventos in-app o con cualquier otra API de SDK a partir de la versión 4.15.1 del SDK de Unity.
5. Tracking Deep Linking
For deep linking, follow the instructions according to your operating system.
<activity android:name="com.appsflyer.GetDeepLinkingActivity" android:exported="true">
<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_scheme" />
</intent-filter>
</activity>
Follow the native iOS Integration Guide.
NOTA:
El plugin de Unity utiliza un AppController con el indicador IMPL_APP_CONTROLLER_SUBCLASS. Si tu proyecto contiene plugins adicionales que usan ese indicador, deberías fusionar todos los códigos en un AppController.
6. Rastreando los Ingresos
Utiliza el parámetro de evento AFInAppEvents.REVENUE
para contar los ingresos como parte de un evento in-app. Puedes llenarlo con cualquier valor numérico, positivo o negativo.
Nota
AFInAppEvents.REVENUE
(equivalente a usar af_revenue
) es el ÚNICO parámetro de evento que se contabiliza en AppsFlyer como ingreso actual en los raw data y en el panel de control. Para obtener más detalles, haz clic aquí.
Ejemplo
evento in-app de ingresosAppsFlyer.trackRichEvent(AFInAppEvents.LEVEL_ACHIEVED, new Dictionary<string, string>(){
{AFInAppEvents.CONTENT_ID, "1234567"},
{AFInAppEvents.CONTENT_TYPE, "category_a"},
{AFInAppEvents.REVENUE, "1.99"},
{AFInAppEvents.CURRENCY, "USD"}
});
¡Importante!
Do NOT format the revenue value in any way. It should not contain comma separators, currency sign, or text. A revenue event should be similar to 1234.56, for example.
7. Obtener datos de conversión
AppsFlyer te permite acceder a los datos de conversión del usuario en tiempo actual directamente a nivel del SDK. Te permite personalizar la página de destino de las vistas de un usuario en la primera aplicación abierta después de una nueva instalación de la aplicación.
Para cargar los datos de conversión de AppsFlyer desde sus servidores:
- Agregar un
GameObject
vacío - Adjunta el AppsFlyerTrackerCallbacks.cs que se incluye en el proyecto (debes darle nombre a este gameobject AppsFlyerTrackerCallbacks).
/*For getting the conversion data in Android, you need to add this listener. to the init() method*/
AppsFlyer.init ("YOUR_DEV_KEY","AppsFlyerTrackerCallbacks");
En Android puedes mover los métodos de AppsFlyerTrackerCallbacks.cs a otra clase y llamar a esa clase en tu oyente.
Debes usar exactamente los mismos espacios de nombres de métodos que aparecen en AppsFlyerTrackerCallbacks
.
/*For getting the conversion data in Android, you need to add this listener.*/
AppsFlyer.loadConversionData("AppsFlyerTrackerCallbacks");
En Android puedes mover los métodos de AppsFlyerTrackerCallbacks.cs a otra clase y llamar a esa clase en tu oyente.
Debes usar exactamente los mismos espacios de nombres de métodos que aparecen en AppsFlyerTrackerCallbacks
.
/* For getting the conversion data. This is triggered on AppsFlyerTrackerCallbacks.cs file */
AppsFlyer.getConversionData ();
Ejemplo de la clase AppsFlyerTrackerCallbacks.cs (implementa tu lógica en este método) -
public void didReceiveConversionData(string conversionData) {
print ("AppsFlyerTrackerCallbacks:: got conversion data = " + conversionData);
}
8. Identificadores de Usuario
Obtener el ID del dispositivo de AppsFlyer
El ID de dispositivo único de AppsFlyer se crea por cada nueva instalación de una aplicación. Usa el siguiente API para obtener el ID único de AppsFlyer:
public String getAppsFlyerId();
Ejemplo de uso:
string AppsFlyerUID = AppsFlyer.getAppsFlyerId();
Establece el ID de usuario de cliente
Establece el ID del usuario tal como lo usa la aplicación.
Para configurar el ID del usuario, llama al siguiente método:
AppsFlyer.setCustomerUserID("someId");
Nota
El customerUserID
DEBERÍA establecerse antes de trackAppLaunch/init. Se recomienda establecer tu ID de usuario de cliente lo antes posible, ya que solo está asociado a los eventos reportados después de su instalación. El ID de Usuario del Cliente también se puede usar para completar integraciones con plataformas de analíticas como Mixpanel y Swrve.
Para obtener más información sobre el ID de usuario de cliente, haz clic aquí.
Configurar el correo electrónico de usuario
ID de publicidad de Google
Desde la versión 4.8.0 del SDK, AppsFlyer recopila automáticamente el google_advertising_id
. El requisito de recopilar el ID de Publicidad de Google solo es relevante para SDK versiones 4.7.X e inferiores.
IMEI y ID de Android
De manera predeterminada, el SDK no recopila el IMEI ni el ID de Android si la versión del sistema operativo es superior a KitKat (4.4) y el dispositivo contiene Google Play Services (en versiones del SDK de Unity 4.16.4 o anteriores, la aplicación específica requería GPS).
Para enviar explícitamente estos ID a AppsFlyer, los desarrolladores pueden usar las siguientes API:
AppsFlyer.setAndroidIdData(string)
AppsFlyer.setImeiData(string)
Si la aplicación NO contiene Google Play Services, el SDK recopila el IMEI y el ID de Android. Sin embargo, las aplicaciones con Google Play Services deberían evitar la recopilación del IMEI, ya que esto viola la política de Google Play.
Los desarrolladores pueden optar por no recopilar el IMEI y el ID de Android mediante el uso de estas API:
AppsFlyer.setCollectAndroidID(bool)
AppsFlyer.setCollectIMEI(bool)
Advertencia
Al menos un identificador de dispositivo, ya sea GAID, ID de Android o IMEI, DEBE recopilarse para permitir la atribución adecuada.
IDFA y IDFV
AppsFlyer recopila automáticamente el IDFA (ID para los Anunciantes) y el IDFV (ID para los Vendedores) si se incluye AdSupport.framework en la aplicación.
9. Funciones opcionales
Medición de Desinstalaciones
Para la desinstalación, sigue las instrucciones de acuerdo con tu sistema operativo.
2. Importa FirebaseMessaging.unitypackage al proyecto.
3. Importa google-services.json al proyecto (obtenido en la consola Firebase)
Nota
Los receptores de manifiesto se deberían agregar automáticamente mediante el SDK de Firebase para Unity.
4. En la clase de Unity que maneja el código de AppsFlyer, agrega lo siguiente:
utilizando Firebase.Messaging;
usando Firebase.Unity;
5. Agrega al método Start():
Firebase.Messaging.FirebaseMessaging.TokenReceived += OnTokenReceived;
6. Agrega el siguiente método:
public void OnTokenReceived
(object sender, Firebase.Messaging.TokenReceivedEventArgs token) {
AppsFlyer.updateServerUninstallToken (token.Token);
}
Advertencia
Los usuarios que implementen el SDK de Firebase de Unity no deberían agregar la siguiente llamada a método para enableUninstallTracking(“SenderID”), ya que el SDK de Firebase obtendrá el ID del remitente del archivo google-services.json que hemos agregado antes. Agregar este método podría provocar una advertencia de depuración de Android.
¡Importante!
Firebase Cloud Messaging (FCM) es la nueva versión de GCM: hereda la infraestructura de GCM confiable y escalable, además de nuevas características. Si estás integrando mensajes en una nueva aplicación, comienza con FCM. Se recomienda encarecidamente a los usuarios de GCM actualizar a FCM para beneficiarse de las nuevas funciones de FCM hoy y en el futuro.
Agrega estas líneas a tu manifiesto:
Permisos:
<uses-permission android:name="android.permission.WAKE_LOCK" />
<permission android:name="android.appsflyer.sampleapp.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<uses-permission android:name="android.appsflyer.sampleapp.permission.C2D_MESSAGE" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
Nota
Debes reemplazar android.appsflyer.sampleapp
con el identificador de paquete de tu aplicación.
Receptor:
<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>
Llama a este método:
AppsFlyer.setGCMProjectNumber("Your_GCM_Project_Number");
El número de proyecto de GCM se obtiene a través de la consola del desarrollador de Google.
Para obtener más información, consulta nuestra guía de desinstalación de Android
AppsFlyer.registerUninstall("device_push_notification_token");
Puedes obtener el token de tu dispositivo en: UnityEngine.iOS.NotificationServices.deviceToken.
Ejemplo:
void Start () {
// register to push notifications
UnityEngine.iOS.NotificationServices.RegisterForNotifications(UnityEngine.iOS.NotificationType.Alert | UnityEngine.iOS.NotificationType.Badge | UnityEngine.iOS.NotificationType.Sound);
Screen.orientation = ScreenOrientation.Portrait;
} void Update () {
if (!tokenSent) { // tokenSent needs to be defined somewhere (bool tokenSent = false)
byte[] token = UnityEngine.iOS.NotificationServices.deviceToken;
if (token != null) {
AppsFlyer.registerUninstall (token);
tokenSent = true;
}
}
}
Para obtener más información, consulta nuestraGuía de desinstalación de iOS
Tracking Push Notifications
AppsFlyer te permite medir notificaciones push como parte de una campaña de retargeting.
handlePushNotification(Dictionary<string, string> payload)
La carga de datos debería incluir un objeto: af
con la cadena clave-valor relevante:
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"
}
}
}
Nota
Para obtener más información sobre la medición de notificaciones push, lee aquí.
Cross Promotion Tracking
AppsFlyer allows you to track and attribute installs originating from a cross promotion of one of your apps from within the current app the user has. Cross promoting apps can be a major growth factor in driving additional installs for your apps.
For details, see the Cross Promotion Tracking article, here.
Rastreo de Invitación de Usuario
AppsFlyer allows you to track and attribute installs originating from user invites within your app. Allowing your existing users to invite their friends and contacts as new users to your app can be a key growth factor for your app.
For details, see the User Invite Tracking article, here.
Set Currency Code
AFInAppEvents.CURRENCY
no es enviado como parte de un evento in-app
USD es el valor predeterminado. Puedes encontrar códigos de moneda ISO aceptables aquí .
Usa la siguiente API para configurar el código de moneda:
public void setCurrencyCode(String currencyCode);
Ejemplo de Uso:
setCurrencyCode(string currencyCode)
Validación de compras in-app
Para la validación de recibo de compra in-app, sigue las instrucciones de acuerdo con tu sistema operativo.
//Para obtener los callbacks
//AppsFlyer.createValidateInAppListener ("AppsFlyerTrackerCallbacks",
"onInAppBillingSuccess", "onInAppBillingFailure");
AppsFlyer.validateReceipt(string publicKey, string purchaseData,
string signature, string price, string currency, Dictionary additionalParametes);
AppsFlyer.createValidateInAppListener ("AppsFlyerTrackerCallbacks", "onInAppBillingSuccess", "onInAppBillingFailure");
(La variable purchaseData debería contener el JSON original de la compra).
Para fines de prueba, asegúrate de realizar una prueba contra la llamada del servidor sandbox de Apple:
AppsFlyer.setIsSandbox(true);
AppsFlyer.validateReceipt(string productIdentifier, string price, string currency,
string transactionId, Dictionary additionalParametes);
La respuesta de validación de compra se activa en la clase AppsFlyerTrackerCallbacks.cs
Anonimizar Datos de Usuarios
Usa esta API durante la Inicialización del SDK para anonimizar explícitamente las instalaciones, los eventos y las sesiones de un usuario:
public void setDeviceTrackingDisabled(boolean isDisabled);
Ejemplo de Uso:
AppsFlyer.setDeviceTrackingDisabled(true);
El rastreo se puede reiniciar llamando deviceTrackingDisabled
nuevamente configurado como falso.
Advertencia
Optar por la exclusión de usuarios afecta SEVERAMENTE tu información de atribución.Usa esta opción SOLO para regiones en las que tengas prohibido legalmente recolectar la información de los usuarios.
Tiempo Personalizado Entre Sesiones
However, you can use the following API to set your custom value for the minimum required time between sessions:
setMinTimeBetweenSessions(int seconds)
Usage Example:
AppsFlyer.setMinTimeBetweenSessions(10);
Note that setting a high value to the custom time between launches may badly impact APIs relying on sessions data, such as deep linking.
Sesiones de segundo plano para aplicaciones de utilidad
Actualmente no disponible en Unity.
Track Out-of-Store Apps
Nota
Google Play es la tienda predeterminada. Si publicas tu aplicación solo en Google Play, omite esta sección.
Para rastrear las instalaciones fuera de Google Play, configura el canal/tienda en AndroidManifest.xml de la aplicación con un canal único o cualquier nombre de tienda para cada APK. El valor CANAL distingue entre mayúsculas y minúsculas.
Examples:
<meta-data android:name="CHANNEL" android:value="Amazon" />
<meta-data android:name="CHANNEL" android:value="Standalone"/>
<meta-data android:name="CHANNEL" android:value="Verizon" />
Nota
Debes configurar el valor CANAL en el panel de control de AppsFlyer al configurar la aplicación.
Coloca la etiqueta de metadatos antes de la etiqueta</application>.
Para obtener más detalles sobre cómo rastrear las instalaciones para aplicaciones fuera de la tienda, lea aquí.
Opt-Out
In some extreme cases you might want to shut down all SDK tracking due to legal and privacy compliance. This can be achieved with the isStopTracking API. Once this API is invoked, our SDK no longer communicates with our servers and stops functioning.
AppsFlyer.stopTracking(true);
In any event, the SDK can be reactivated by calling the same API, by passing false.
There are several different scenarios for user opt-out. We highly recommend following the exact instructions for the scenario, that is relevant for your app.
Advertencia
Solo usa esta API en casos en los que quieras ignorar por completo a este usuario de todo rastreo. Usar esta API afecta SEVERAMENTE tus reportes y atribución.
Setting Additional Custom Data
La API setAdditionalData es necesaria para la integración a nivel del SDK con varias plataformas de partners externos, incluidas Segment, Adobe y Urban Airship. Usa esta API solo si el artículo de integración de la plataforma indica específicamente que es necesaria la API setAdditionalData.
A continuación se muestra un ejemplo de código para implementar setAdditionalData en Unity:
Dictionary<string, string> CustomDataMap = new Dictionary<string, string>();
CustomDataMap.Add("custom_param_1", "value_of_param_1");
AppsFlyer.setAdditionalData(CustomDataMap);
Attribution for Pre-Installed Apps
Android Only
You can programatically set a pre-installed media source, from Unity, using the following API:
setPreinstallAttribution(string MediaSource, string Campaign, string Site_Id);
For details on native implementations, click here.
¡Importante!
When using the AppsFlyer Unity SDK, avoid
PlayerPrebs.DeleteAll()
10. Probando tu integración
Para obtener instrucciones sobre cómo probar tus integraciones de acuerdo con tu sistema operativo, haz clic en Pruebas de Android o enPruebas de iOS .
Now you can start tracking the media sources you work with.
11. Known Issues
ProGuard
If you are using ProGuard for Android and you encounter a warning regarding our AFKeystoreWrapper
class, then add the following code to your ProGuard rules file:
-keep class com.appsflyer.** { *; }
IL2CPP
To exclude our SDK from the Managed bytecode stripping with IL2CPP, add the following to the link.xml:
<linker>
<assembly fullname="mscorlib">
<type fullname="AppsFlyer.*" preserve="all"/>
</assembly>
…
</linker>
12. Unity Sample Project
Para ver un proyecto de muestra de Unity, haz clic aquí.
Comentarios
Inicie sesión para dejar un comentario.