Integración del SDK de AppsFlyer - iOS

Versión actual: 4.7.1

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 8.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.

A continuación se explican los pasos obligatorios, seguidos de las características adicionales opcionales.

El SDK de iOS es compatible con todos los dispositivos iOS (iPhone, iPod, iPad) con iOS versión 6 en adelante (incluyendo la 9).

NOTAS:  

  • El SDK de AppsFlyer soporta las IPv6 DNS64/NAT64 Networks de Apple. Para mayor información haz clic aquí.
  • El SDK De AppsFlyer hace uso de la clase NSUserDefaults. Borrar los valores de NSUserDefaultes puede causar problemas de atribución.

  Descarga de SDK para iOS

  • Para descargar el SDK para iOS como librería estática haga clic aquí.
  • Para descargar el SDK para iOS como framework haga clic aquí

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

  • La versión 4.7.0 presentaba un bug en la herramienta de deeplinking. Si estabas usando esta versión, asegúrate de actualizar el SDK.

2. Incrustando el SDK en tu aplicación (paso obligatorio)

El SDK de AppsFlyer está disponible tanto como framework y como librería estática.

2.1 Framework del SDK de AppsFlyer

La manera más simple de integrar el framework es usando cocoapods:

  • Agrega la siguiente línea a tu pod file:
pod ‘AppsFlyerFramework’

Si no usas cocoapods, sigue estos pasos:

  • En Xcode, ve a Build Phases>> Link Binary with Libraries >> Clic + para agregar una nueva librería

  • Haz clic en Add Other y añade el AppsFlyerLib.framework

  • Incluye el siguiente título:
#import "AppsFlyerLib/AppsFlyerTracker.h"

2.2  AppsFlyer SDK Static Library

Sigue los siguientes pasos:

  • Añade los archivos header y lib a tu proyecto.
  • Añade el AppsFlyer header import:
  • #import "AppsFlyerTracker.h"
  • Añade el AdSupport.framework a tu proyecto y configúralo como Opcional. Puedes encontrar las instrucciones paraAdd the AdSupport.framework to your project and set it as Optional. Puedes encontrar más información aquí.

 

2.3  IDFA y Apple Search Ads

  • Añade el AdSupport.framework - AppsFlyer solo podrá recolectar el IDFA si incluyes este framework. 
    Si no añades este framework, no podrás medir campañas de Facebook, Twitter y la mayoría de las demás ad networks.
  • Añade el iAd.framework a tu proyecto. - Se recomienda encarecidamente incluir este framework en la app ya que es obligatorio para medir Apple Search Ads. 

3.  Evento de inicio 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.

Deber iniciar el SDK en el primer lanzamiento de la app.  Asegúrate de que el SDK se inicie antes de enviar el trackeo del siguiente evento.

3.1 Inicializando el SDK

Para inicializar el SDK, agrega el siguiente código a la función “didFinishLaunchingWithOptions”:

[AppsFlyerTracker sharedTracker].appsFlyerDevKey = @"REEMPLAZA ESTO POR TU Dev_Key";
[AppsFlyerTracker sharedTracker].appleAppID = @"REEMPLAZA ESTO POR TU App_ID";

NOTADebes digitar el número únicamente y no el prefijo "ID".  Por ejemplo, si tu App ID es id123456789 este debe aparecer así:

[AppsFlyerTracker sharedTracker].appleAppID = @"123456789";

Reemplaza [Dev_Key] con tu propia  Dev_Key (accesible desde tu cuenta, ver Settings >> SDK Integration en el panel de control de AppsFlyer).  Por ejemplo: a4kGpVyxm8iGgzvzT8NPaV

3.2 Agregando código

Agrega el siguiente código a tu archivo fuente AppDelegate.m en la función “applicationDidBecomeActive”:

#import "AppsFlyerTracker.h"
-(void)applicationDidBecomeActive:(UIApplication *)application
{
     // Track Installs, updates & sessions(app opens) (You must include this API to
 enable tracking)
     [[AppsFlyerTracker sharedTracker] trackAppLaunch];
}

3.3  Configurar Deeplinks para Atribución de Re-Targeting

Si tu aplicación soporta deeplinking (Universal links o Standard) o si planeas correr campañas de re-targeting, debes implementar los pasos de la sección 5.7.

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.

La medición de los eventos in-app ayuda a analizar cómo los usuarios leales utilizan tu app, y puedes relacionarlos a campañas y/o 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 (valor de vida)

Sintaxis:

- (void) trackEvent:(NSString *)eventName withValues:(NSDictionary*)values

eventName es cualquier “string” para definir el nombre del evento.

values es un diccionario de los parámetros del evento que componen un evento rico.

Contando rentas como parte de un evento rico in-app: Usa el parámetro de evento “af_revenue” (constante)

AFEventParamRevenue

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” 

AFEventParamPrice

NO se cuenta como renta y es un parámetro descriptivo que no afecta las rentas y mediciones de LTV.

Ejemplo 1: evento in-app con nivel logrado en app de videojuegos

[[AppsFlyerTracker sharedTracker] trackAppLaunch];
} AFEventLevelAchieved withValues:@{        
    AFEventParamLevel: @9,
    AFEventParamScore : 100}

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

[[AppsFlyerTracker sharedTracker] trackEvent:AFEventPurchase withValues: @{
    AFEventParamContentId:@"1234567",
    AFEventParamContentType : @"category_a",
    AFEventParamRevenue: 200}
    AFEventParamCurrency:@"USD"}];

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 una renta de $200 y esta 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 iOS, 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” (AFEventParamCurrency) no es enviado 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:

[[AppsFlyerTracker sharedTracker].currencyCode = @"GBP"];

5.2 Obtén unique ID de AppsFlyer (opcional)

Por cada nueva instalación de una app, se crea un ID único 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:

(NSString *) [AppsFlyerTracker sharedTracker] getAppsFlyerUID

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 unique ID de AppsFlyer y las 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:

[[AppsFlyerTracker sharedTracker].customerUserID = @"YOUR_CUSTOM_DEVICE_ID"];

NOTAS IMPORTANTES:

  • La configuración de la ID usuario-cliente debe ser llamada antes del “trackAppLaunch”.
  • 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.

Para más información respecto al ID de usuario cliente, haz clic aquí.

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

AppsFlyer te permite acceder a los datos de atribución de usuario en tiempo real directamente 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 Habilitando el soporte de la extensión de la app (App Extensions)

La extensión de la app requiere permisos para usar Internet:

  1. Ve a plist file de la extensión de tu app
  2. En NSExtension / NSExtensionAttributes configura la bandera de RequestsOpenAccess a SÍ

En el ViewController ViewDidLoad de la extensión de la app inicia AppsFlyerLib:

[AppsFlyerTracker sharedTracker].appsFlyerDevKey = @"YOUR_DEV_KEY_HERE";
[AppsFlyerTracker sharedTracker].appleAppID = @"APP_ID_HERE"; 
[AppsFlyerTracker sharedTracker].delegate = self;
[[AppsFlyerTracker sharedTracker] trackAppLaunch];

Para recibir los datos de conversión:

  1. Ve a ViewController.h de la extensión de la app
  2. Importa el archivo del título (header) de Appsflyer
#import "AppsFlyerTracker.h"
  1. Agrega <AppsFlyerTrackerDelegate> en la declaración de la interfaz

En el ViewController.m de la extensión, agrega los siguientes métodos:

-(void)onConversionDataReceived:(NSDictionary*) installData {
    id status = [installData objectForKey:@"af_status"];
   if([status isEqualToString:@"Non-organic"]) {     
      id sourceID = [installData objectForKey:@"media_source"];      
      id campaign = [installData objectForKey:@"campaign"];      
      NSLog(@"This is a none organic install. Media source: %@  Campaign: %@",sourceID,campaign);      
  } else if([status isEqualToString:@"Organic"]) {      
      NSLog(@"This is an organic install.");      
  }
 }
-(void)onConversionDataRequestFailure:(NSError *) error {  
  NSLog(@"%@",error);
}
- (void) onAppOpenAttribution:(NSDictionary*) attributionData {  
  NSLog(@"attribution data: %@", attributionData);
}
- (void) onAppOpenAttributionFailure:(NSError *)error {
  NSLog(@"%@",error);
 }

5.6 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. El desarrollador debe recopilar las direcciones del usuario y reportarlas a AppsFlyer según el método de codificación requerido del desarrollador. Los siguientes son los métodos de codificación disponibles: Sha1, MD5 y plain.

Ejemplo:

[[AppsFlyerTracker sharedTracker] setUserEmails:@[@"email1@domain.com",
@"email2@domain.com"] withCryptType:EmailCryptTypeSHA1];

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

El Deeplinking es una parte vital de las campañas de re-targeting y se recomienda su uso al momento de correrlas.

AppsFlyer te permite reportar launches a través de deeplinks, incluyendo Universal links de iOS. Además te permite analizar la performance de tus campañas de re-targeting.

A partir de iOS 9 y en adelante, el deeplinking se realiza por medio de Universal Link. Por lo tanto, debes integrar Universal Links a tu app.

Haz clic aquí para ver la guía de integración de Universal Links de AppsFlyer.

Para reportar estos launches, añade el siguiente código al app delegate:

// Reports app open from a Universal Link for iOS 9
- (BOOL) application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray *_Nullable))restorationHandler
{    
[[AppsFlyerTracker sharedTracker] continueUserActivity:userActivity restorationHandler:restorationHandler];
return YES;
}
// Reports app open from deeplink for iOS 8 or below (DEPRECATED)
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
     sourceApplication:(NSString*)sourceApplication annotation:(id)annotation {
[[AppsFlyerTracker sharedTracker] handleOpenURL:url sourceApplication:sourceApplication withAnnotation:annotation];
return YES;
}

// Reports app open from deeplink for iOS 10 - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
     options:(NSDictionary *) options {
[[AppsFlyerTracker sharedTracker] handleOpenURL:url options:options];
return YES;
}
 

Para más información revisa nuestra Guía de Configuración de OneLink.

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

NOTA: esta función es soportada desde iOS7 en adelante.

El SDK de AppsFlyer puede brindar verificación de servidor de compras in‐app. Para configurar el trackeo de validación de recibo debes llamar el método validateAndTrackInAppPurchase dentro del completeTransaction de SKStoreKit : callback. Esta llamada genera automáticamente un evento in-app "af_purchase".

- (void) validateAndTrackInAppPurchase:(NSString *) productIdentifier
price:(NSString *) price
currency:(NSString *) currency
transactionId:(NSString *) tranactionId
additionalParameters:(NSDictionary *) params
success:(void (^)(NSDictionary *response)) successBlock
failure:(void (^)(NSError *error, id reponse)) failedBlock;

Esta llamada tiene dos bloques callback, uno para ‘Exitoso’ y otro para ‘Fallido’ (para cualquier razón, incluyendo una falla en la validación) En Exitoso, se regresa un diccionario con los datos de validación de recibo suministrado por los servidores de Apple.   

IMPORTANTE: Para propósitos de pruebas, recomendamos configurar la bandera de useReceiptValidationSandbox en SÍ, ya que redirige las solicitudes a los servidores sandbox de Apple.

[AppsFlyerTracker sharedTracker].useReceiptValidationSandbox = YES;

Ejemplo:

[[AppsFlyerTracker sharedTracker] validateAndTrackInAppPurchase:product.productIdentifier price:product.price.stringValue
currency:@"USD"
transactionId:trans.transactionIdentifier
additionalParameters:@{@"test": @"val" , @"test1" : @"val 1"}
success:^(NSDictionary *result){
               NSLog(@"Purcahse succeeded And verified!!! response: %@", result[@"receipt"]);
} failure:^(NSError *error, id response) {
               NSLog(@"response = %@", response);
}];

 

5.9 Opción de exclusión de usuario (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:

[AppsFlyerTracker sharedTracker].deviceTrackingDisabled = YES;

5.10 Opción explícita de salida (exclusión) de la ID para los anunciantes – IDFA/IFA (opcional)

El SDK de AppsFlyer recopila IDFA únicamente su la librería de AdSupport.framework está incluída en tu proyecto. No hay necesidad de optar explícitamente por la entrada o la salida. Sin embargo, si quieres tener la opcipon explícita de salida de IDFA, usa la siguiente API durante el inicio del SDK en la Sección 4:

[AppsFlyerTracker sharedTracker].disableAppleAdSupportTracking = YES;

El IDFA NO está recopilado en los servidores de AppsFlyer cuando la configuración del trackeo de disableAppleAdSupport está en SÍ.

5.11 Trackea desinstalaciones de la app (Opcional)

AppsFlyer te permite medir las desinstalaciones de tu app. Usa la siguiente función para registrar la opción de desinstalaciones:

Debes llamar a esta función:

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
Debes llama al siguiente código para activar esta característica:
// Register for Push Notitications
   UIUserNotificationType userNotificationTypes = (UIUserNotificationTypeAlert |
                                                   UIUserNotificationTypeBadge |
                                                   UIUserNotificationTypeSound);
   UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:userNotificationTypes
                                                                            categories:nil];
   [application registerUserNotificationSettings:settings];
   [application registerForRemoteNotifications];
   
   [application setMinimumBackgroundFetchInterval:UIApplicationBackgroundFetchIntervalMinimum];
   application.applicationIconBadgeNumber = 0;


- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
   [[AppsFlyerTracker sharedTracker] registerUninstall:deviceToken];
}

Ejemplo de Uso

[[AppsFlyerTracker sharedTracker] registerUninstall:deviceToken];

Cuando estés haciendo pruebas de desinstalación en el ambiente de desarrollo de Apple, debes habilitar esta flag:

[AppsFlyerTracker sharedTracker].useUninstallSandbox = YES;

Para completar este proceso, debes leer aquí.

5.12 Implementar Deeplinking con OneLink (Opcional)

La tecnología de OneLink puede hacer que una app se abra en la ubicación del deeplink, mencionando el scheme dentro del parámetro af_dp, o los Universal Links en iOS9.

Puedes implementar el callback onAppOpenAttribution el cual es llamado por el SDK de AppsFlyer. Va a retornar los parámetros de Onelink que utilizaste para disparar la apertura de la app. Luego, puedes analizar los valores y aplicar la lógica para disparar la página de la app relevante.

(void) onAppOpenAttribution:(NSDictionary*) attributionData; ///iOS

Para más información haz clic aquí.

5.13 Mediciones de Push Notifications (opcional)

AppsFlyer te permite medir las notificaciones push como parte de una campaña publicitaria.

Para integrar la medición de Push Notifications , añade el siguiente código al AppDelegate de tu aplicación.

-(void) application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
   [[AppsFlyerTracker sharedTracker] handlePushNotification:userInfo];
}

El mensaje push debería tener un parámetro "af" con todos los parámetros de medición de AppsFlyer.

Ejemplo de Uso

{
   "aps": {
       "alert": "Push text",
       "sound": "default",
       "category": "REMINDER_CATEGORY"
   },
   "_p": 123456,
   "payloadKey": "payloadValue"
   "af": {
       "pid": "swrve_int",
       "is_retargeting": true,
       "c": "test_campaign"
   }
}

6.  Probando la integración del SDK

Para aprender cómo probar la integración del SDK antes de enviarla al App Store haz clic aquídespués de enviarla al App Store, haz clic aquí.




¿Fue útil este artículo?
Usuarios a los que les pareció útil: 0 de 0