Integración de SDK de AppsFlyer - iOS

  • Los anunciantes
  • Desarrolladores

ios.pngSDK Version: 4.8.11(Release notes)

1. Resumen

Esta guía detalla cómo integrar el SDK de AppsFlyer en tu aplicación de iOS. Puedes realizar un rastreo de las instalaciones, las actualizaciones, las sesiones y de los eventos in-app adicionales, así como las instalaciones de la aplicación (incluidas las compras in-app, los niveles del juego, etc.) para evaluar el ROI y los niveles de engagement del usuario. El SDK de iOS es compatible con todos los dispositivos iOS (iPhone, iPod, iPad) con iOS versión 6 y superior.

 Nota

El SDK de AppsFlyer cumple totalmente con las redes IPv6 DNS64 / NAT64 de Apple. Para obtener más información, haz clic aquí.

 ¡Importante!

El SDK de AppsFlyer hace uso de la clase NSUserDefaults. Borrar todos los valores de NSUserDefaults puede causar problemas de atribución.

 Consejo

  • 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 y agrega el SDK de AppsFlyer a Xcode

CocoaPods Carthage Static Framework Static Lib
  • Asegúrate de haber descargado e instalado la última versión de CocoaPods.
  • Agrega la siguiente fila a tu Podfile:
    pod 'AppsFlyerFramework'
  • ejecuta la instalación pod
  • Asegúrate de usar el archivo .xcworkspace para abrir tu proyecto en Xcode, en lugar del archivo .xcodeproj, de aquí en adelante.

El SDK de AppsFlyer usa los siguientes marcos nativos:

AdSupport.framework
Para recolectar el IDFA de los dispositivos, necesitarás este marco.
Sin el IDFA no podrás rastrear anuncios de Facebook, Twitter, Google y otras redes.
iAd.framework
Este marco es necesario para rastrear Anuncios de Búsqueda de Apple en tu aplicación

2.2 Configurar la Integración en el Delegado de la Aplicación

Abre el archivo AppDelegate.m de tu aplicación e importa el SDK de AppsFlyer:

Swift Objective-C
importa AppsFlyerLib

3. Inicialización del SDK

Initialize the SDK in the didFinishLaunchingWithOptions method with your app ID taken from iTunes Connect and your AppsFlyer dev key.

Ten en cuenta que aquí debes configurar el ID de aplicación únicamente con dígitos, sin el prefijo "id".

Swift Objective-C
AppsFlyerTracker.shared().appsFlyerDevKey = "<your-appsflyer-dev-key>";
AppsFlyerTracker.shared().appleAppID = "123456789"
AppsFlyerTracker.shared().delegate = self
#ifdef DEBUG AppsFlyerTracker.shared().isDebug = true
#endif

 Nota

Si se establece isDebug = true, los registros del SDK de AppsFlyer se muestran en la Consola xCode.

  • Agrega el siguiente código en la función applicationDidBecomeActive:
Swift Objective-C
func applicationDidBecomeActive (application: UIApplication){ 
// Track Installs, updates & sessions(app opens) (You must include this API to enable tracking) 
AppsFlyerTracker.shared().trackAppLaunch() 
// your other code here.... }

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

El rastreo de eventos in-app se realiza invocando a trackEvent con el nombre del evento y los parámetros de valor. Para más detalles, consulte Eventos in-app.

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.

Example: Purchase In-App Event

Swift Objective-C
AppsFlyerTracker.shared().trackEvent(AFEventPurchase,
  withValues: [
     AFEventParamRevenue: "1200",
     AFEventParamContent: "shoes",
     AFEventParamContentId: "123"
]);

This generates an af_purchase event type (using the AFEventPurchase constant) with the following event values: {af_revenue: 200 , af_currency: "USD", af_quantity: 2, af_content_id: "092" af_receipt_id: "9277"}

 Nota

AppsFlyer admite caracteres no ingleses con eventos in-app o con cualquier otra API de SDK a partir de la versión 4.8.1 del SDK de iOS.

No agregues símbolos de divisas ni decimales a las cifras, ya que estos no se reconocen.

 Ejemplo de Uso

Swift Objective C
AppsFlyerTracker.shared().trackEvent(AFEventPurchase,
withValues: [
  AFEventParamRevenue: @1200,
  AFEventParamCurrency : @"JPY"
]); 

5. Rastrear las Conexiones Profundas

 Consejo

We highly recommend having deep linking integrated in your app. Deep Linking is a crucial part of retargeting campaigns and it is highly recommended to use when running retargeting campaigns.

iOS9 y versiones posteriores requieren que tu aplicación sea compatible con enlaces universales. Para obtener más detalles, haz clic aquí.


To handle deep linking, add the following code in your app (in the app delegate class). The methods in this code allow you to get deep linking data. With deep linking data you can redirect users to the relevant app activity and serve them with the relevant content.

Swift Objective-C

 func onConversionDataReceived(_ installData: [AnyHashable: Any]) {
  //Handle Conversion Data (Deferred Deep Link)
  }
  
  func onConversionDataRequestFailure(_ error: Error?) {
    //    print("\(error)")
  }
  
  func onAppOpenAttribution(_ attributionData: [AnyHashable: Any]) {
    //Handle Deep Link Data
    
  }
  
  func onAppOpenAttributionFailure(_ error: Error?) {
  }
// Reports app open from a Universal Link for iOS 9 or later
  func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool {
    AppsFlyerTracker.shared().continue(userActivity, restorationHandler: restorationHandler)
    return true
  }

  // Reports app open from deep link from apps which do not support Universal Links (Twitter) and for iOS8 and below
  func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
    AppsFlyerTracker.shared().handleOpen(url, sourceApplication: sourceApplication, withAnnotation: annotation)
    return true
  }

  // Reports app open from deep link for iOS 10 or later
  func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
    AppsFlyerTracker.shared().handleOpen(url, options: options)
    return true
  }
  

 ¡Importante!

For Swift 4.2 and above, use the following code for the continue userActivity method:

func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
	AppsFlyerTracker.shared().continue(userActivity, restorationHandler: nil)
	return true
}

6. Rastreando los Ingresos

Use the af_revenue (AFEventParamRevenue) event parameter to count revenue as part of an in-app event. You can populate it with any numeric value, positive or negative.

 Nota

AFEventParamRevenue (equivalent to using af_revenue) is the ONLY event parameter that is counted on AppsFlyer as real revenue on the raw data and dashboard. For more details please click here.


Ejemplo: evento in-app de ingresos

Swift Objective-C
AppsFlyerTracker.shared().trackEvent(AFEventPurchase, 
withValues: [
	AFEventParamContentId:"1234567",
	AFEventParamContentType : "category_a",
	AFEventParamRevenue: 1.99,
	AFEventParamCurrency:"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.

Tracking Negative Revenue

If you need to track negative revenue for example when a user cancels a purchase or receives a refund, you can send negative revenue.

Swift Objective-C
AppsFlyerTracker.shared().trackEvent("cancel_purchase", 
withValues: [
	AFEventParamContentId:"1234567",
	AFEventParamContentType : "category_a",
	AFEventParamRevenue: -1.99,
	AFEventParamCurrency:"USD"
]);

 Nota

Notice the following in the code above:

  1. The revenue value is preceded by a minus sign
  2. The event name has a unique value of "cancel_purchase" - to allow you to identify negative revenue events in the dashboard and raw data reports

7. Obtener Datos de Conversión

AppsFlyer allows you to access the user attribution data in real-time for every new install, directly from the SDK level. By doing this you can serve users with personalized content or send them to specific activities within the app, which can greatly enhance their engagement with your app.

Para obtener más información sobre esta funcionalidad avanzada, haz clic aquí.

8. Identificadores de Usuario

Hay una serie de opciones para recuperar identificadores de usuarios:

Obtener el ID de Dispositivo de AppsFlyer

El ID de dispositivo único de AppsFlyer se crea por cada nueva instalación de una aplicación. Puedes obtenerlo usando el siguiente código:

Swift Objective-C
let appsflyerId = AppsFlyerTracker.shared().getAppsFlyerUID()

Establecer ID de Usuario de Cliente

Establecer tu propio ID de cliente te permite hacer una referencia cruzada de tu propio ID único con el ID único de AppsFlyer y los ID de los otros dispositivos. Este ID está disponible en los reportes de CSV de AppsFlyer junto con las API de Postback para referencias cruzadas con tus ID internos.

Para configurar tu ID de usuario de cliente:

Swift Objective-C
AppsFlyerTracker.shared().customerUserID = "my user id"

  Nota Importante

It is recommended to set your Customer User ID as soon as possible as it is only associated to events reported after its setup. If setCustomerUserId is called before calling trackAppLaunch, the Customer User ID is visible in the raw export for installs and for events. If it is set after, only the value for events tracked is visible after calling this method.

El ID de Usuario de Cliente también puede usarse para completar integraciones con plataformas de analítica como Mixpanel y Swrve.

Cómo obtener un ID de usuario de cliente:

To get the customer user ID retrieve it from the sharedTracker.

[AppsFlyerTracker sharedTracker].customerUserID

 ¡Importante!

Make sure to set the customer user ID each time the app is launched, before calling trackAppLaunch</code.

Para obtener más información sobre el ID de usuario de cliente, haz clic aquí.

Configurar el Correo Electrónico de Usuario

AppsFlyer te permite reportar una o más de las direcciones de correo electrónico del usuario, si las recopilas en tu aplicación. Los valores de la dirección de correo electrónico se pueden encriptar siguiendo los siguientes métodos de encriptación: Sha1, MD5 y plain.

Ejemplo: Recopilar la dirección de correo electrónico del usuario

Swift Objective-C
AppsFlyerTracker.shared().setUserEmails( ["email1@domain.com", "email2@domain.com"], 
with: EmailCryptTypeSHA1)

 Nota

La Información de Identificación Personal (PII) tal como las direcciones de correo electrónica no es retenida por AppsFlyer, ni tampoco se presenta esta información en ningún reporte. El propósito de recopilar esta información es únicamente para propósitos de postbacks para la fuente de medios.

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

Measure Uninstalls

For Uninstall measurement, enable remote push notification on your app. See Apple's Remote Notification Programming Guide for more details.

Follow the iOS SDK integration instructions to complete the uninstall measurement feature setup.

Rastreo de Notificaciones Push

Para habilitar el Rastreo de Inicios de Aplicación desde las notificaciones push, agrega el siguiente código al delegado de tu aplicación:

Swift Objective-C
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any]) {
	AppsFlyerTracker.shared().handlePushNotification(userInfo)
}

El mensaje push debe tener un parámetro af con los parámetros de rastreo de AppsFlyer.

Ejemplo de Mensaje:

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

Rastreo cruzado de la promoción

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.

Establecer el código de moneda

You can set a global currency code using the API below, in addition to specific currency codes that can be used as part of each in-app event sent to AppsFlyer. The global currency code is used when AFEventParamCurrency is not sent as part of an in-app event.

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 currencyCode(String currencyCode);

Ejemplo de Uso:

Swift Objective-C
AppsFlyerTracker.shared().currencyCode = "USD"

Validación de compras in-app

 Nota

Esta función es compatible con iOS7 y superior.

AppsFlyer’s SDK can provide in‐app purchase server verification. To set receipt validation tracking you need to call the validateAndTrackInAppPurchase method inside the SKStoreKit’s completeTransaction: callback. This call automatically generates an af_purchase in‐app event.

- (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;

 Nota

The price parameter should contain the total revenue associated with the validated purchase event.


This call has two callback blocks, one for ‘success’ and one for ‘failure’ (for any reason, including validation fail). On success, a dictionary is returned with the receipt validation data provided by Apple’s servers.

 Importante

For testing purposes, we recommend setting the useReceiptValidationSandbox flag to YES, as this redirects the requests to Apple sandbox servers.

#ifdef DEBUG
[AppsFlyerTracker sharedTracker].useReceiptValidationSandbox = YES;
#endif

 Ejemplo

Objective-C Swift
[[AppsFlyerTracker sharedTracker] validateAndTrackInAppPurchase:@"ProductIdentifier" price:@"price"
    currency:@"USD"
    transactionId:@"transactionID"
    additionalParameters:@{@"test": @"val" , @"test1" : @"val 1"}
    success:^(NSDictionary *result){
      NSLog(@"Purchase succeeded And verified!!! response: %@", result[@"receipt"]);
    } failure:^(NSError *error, id response) {
      NSLog(@"response = %@", response);
      if([response isKindOfClass:[NSDictionary class]]) {
        if([response[@"status"] isEqualToString:@"in_app_arr_empty"]){
          // retry with 'SKReceiptRefreshRequest' because
          // Apple has returned an empty response
          // <YOUR CODE HERE>
        }

      } else {
        //handle other errors
        return;
      }
  }];

 ¡Importante!

When AppsFlyer validates a purchase against Apple servers, if the response contains an empty in-app array, AppsFlyer returns {"status":"in_app_arr_empty"} to the error callback.

If you receive this flag, you must restore the purchased product with Apple by sending a receipt refresh request. For more information see Apple's documentation.

After refreshing the receipt, call validateAndTrackInAppPurchase once more.

See the code above to learn how to handle this error.

For a list of possible return values for validating receipts, please refer to Apple's documentation here.

Anonimizar

AppsFlyer provides you with a method to anonymize specific user identifiers in AppsFlyer analytics. This method complies with the latest privacy requirements and complies with Facebook data and privacy policies. Default is NO, meaning no anonymization is performed by default.

Usa esta API durante la Inicialización del SDK para anonimizar explícitamente las instalaciones, los eventos y las sesiones de un usuario:

Swift Objective-C
AppsFlyerTracker.shared().deviceTrackingDisabled = true

El rastreo se puede reiniciar llamando a deviceTrackingDisabled nuevamente configurado como falso.

 Advertencia

Anonimizar a los usuarios afecta SEVERAMENTE tu información de atribución.
Usa esta opción SOLO para regiones donde la ley te impida recopilar información de tus usuarios.

Tiempo Personalizado Entre Sesiones

By default, at least 5 seconds must lapse between 2 app launches to count as separate 2 sessions (more about counting sessions).
However, you can use the following API to set your custom value for the minimum required time between sessions:

Swift Objective-C
AppsFlyerTracker.shared().minTimeBetweenSessions = <your_custom_time_in_seconds>

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

Unavailable in iOS.

Extensiones de aplicaciones de iOS y WatchKit

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

  1. Ve al archivo info.plist de tu extensión de la aplicación
  2. En NSExtension /NSExtensionAttributes, establece el indicadorRequestsOpenAccessen YES.

Agrega el siguiente código a UIViewControlle viewDidLoad de la extensión de la aplicación:

Swift Objective-C
override func viewDidLoad() {  
    super.viewDidLoad()
    AppsFlyerTracker.shared().appsFlyerDevKey = "MY_APPSFLYER_KEY"

    // MY_APP_ID below stands for you app ID on iTunes Connect. Should be 9 or 10 digits.
    AppsFlyerTracker.shared().appleAppID = "MY_APP_ID"
        
    AppsFlyerTracker.sharedTracker().trackAppLaunch()
  }

Para recibirdatos de atribución en la extensión de la aplicación, sigue las instrucciones aquíe impleméntalas en el UIViewController de tu aplicación en lugar de implementarlas en AppDelegate.

Optar por la exclusión

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.

Existen varios casos para que un usuario opte por la exclusión. Es muy recomendable que sigas las instrucciones exactas para la situación correspondiente a tu aplicación.

 Advertencia

Use this API only in cases where you want to fully ignore this user from any and all tracking. Using this API SEVERELY impacts your attribution, data collection and deep linking mechanism.

Swift Objective-C
AppsFlyerTracker.shared().isStopTracking = true

 Importante

No llames a trackAppLaunch si isStopTracking está configurado como verdadero.

Recopilar Nombre del Dispositivo

El SDK de AppsFlyer te permite recopilar el Nombre del Dispositivo para tus análisis internos. Esta función está desactivada de forma predeterminada. Para activarla, usa la siguiente API:

Swift Objective-C
>AppsFlyerTracker.shared().shouldCollectDeviceName = false`

 Importante

El Nombre del Dispositivo podría considerarse información personal en ciertas regiones. Solo recopila esta información si sabes que tienes permiso legal y has recibido el consentimiento explícito del usuario para hacerlo.

Configuración de datos personalizados adicionales

The setAdditionalData API is required to integrate on the SDK level with several external partner platforms, including Segment, Adobe and Urban Airship. Use this API only if the integration article of the platform specifically states setAdditionalData API is needed.
The following is a code example for implementing setAdditionalData on iOS for Objective-C or Swift

Objective-C Swift
NSDictionary* CustomDataMap = [[NSDictionary alloc] initWithObjectsAndKeys:@"value_of_param_1", @"custom_param_1", nil];
  
[[AppsFlyerTracker sharedTracker] setAdditionalData:CustomDataMap];

10. Probando Tu Integración

Para detalles sobre cómo probar tu integración, haz clic aquí.

Now you can start tracking the media sources you work with.

11. Enviando la aplicación a la App Store

Puedes encontrar las instrucciones para enviar tu aplicación a la App Store aquí .

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

Comentarios

0 comentarios

Inicie sesión para dejar un comentario.

Contenido de la página: