Integrar SDK
Aprende a inicializar e iniciar el SDK para iOS.
Antes de comenzar
Get started with our SDK integration wizard
- Antes de la integración, debes instalar el SDK.
- Este documento contiene implementaciones de ejemplo. Asegúrate de reemplazar lo siguiente:
<YOUR_DEV_KEY>
: La clave de desarrollador de AppsFlyer.<APPLE_APP_ID>
: el ID de aplicación de Apple (sin el prefijoid
).- Marcadores de posición adicionales, donde sea necesario.
Inicializar el SDK para iOS
Paso 1: Importar dependencias
Importar AppsFlyerLib
:
// AppDelegate.h
#import <AppsFlyerLib/AppsFlyerLib.h>
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@end
import UIKit
import AppsFlyerLib
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
// ...
}
Paso 2: Inicializar el SDK
In didFinishLaunchingWithOptions
configura tu ID de aplicación de Apple y la clave de desarrollador de AppsFlyer:
[[AppsFlyerLib shared] setAppsFlyerDevKey:@"<YOUR_DEV_KEY>"];
[[AppsFlyerLib shared] setAppleAppID:@"<APPLE_APP_ID>"];
AppsFlyerLib.shared().appsFlyerDevKey = "<YOUR_DEV_KEY>"
AppsFlyerLib.shared().appleAppID = "<APPLE_APP_ID>"
Iniciar el SDK para iOS
In applicationDidBecomeActive
, call start
:
[[AppsFlyerLib shared] start];
func applicationDidBecomeActive(_ application: UIApplication) {
AppsFlyerLib.shared().start()
// ...
}
Add SceneDelegate support
OPCIONAL
Haz lo siguiente solo si usas SceneDelegate
s:
In didFinishLaunchingWithOptions
, añade un observador UIApplicationDidBecomeActiveNotification
y configúralo para que ejecute start
:
@implementation AppDelegate
// SceneDelegate support - start AppsFlyer SDK
- (void)sendLaunch:(UIApplication *)application {
[[AppsFlyerLib shared] start];
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// ...
// SceneDelegate support
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(sendLaunch:)
name:UIApplicationDidBecomeActiveNotification
object:nil];
// ...
return YES;
}
// ...
@end
import UIKit
import AppsFlyerLib
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
...
// SceneDelegate support
NotificationCenter.default.addObserver(self, selector: NSSelectorFromString("sendLaunch"), name: UIApplicationdidBecomeActiveNotification, object: nil)
return true
}
// SceneDelegate support - start AppsFlyer SDK
@objc func sendLaunch() {
AppsFlyerLib.shared().start()
}
// ...
}
Start with completion handler
OPCIONAL
Para confirmar que el SDK se inició correctamente y notificó a los servidores de AppsFlyer, llama a start
con un controlador de finalización. A continuación, puedes aplicar una lógica para manejar el éxito o el fracaso del inicio del SDK.
[[AppsFlyerLib shared] startWithCompletionHandler:^(NSDictionary<NSString *,id> *dictionary, NSError *error) {
if (error) {
NSLog(@"%@", error);
return;
}
if (dictionary) {
NSLog(@"%@", dictionary);
return;
}
}];
AppsFlyerLib.shared()?.start(completionHandler: { (dictionary, error) in
if (error != nil){
print(error ?? "")
return
} else {
print(dictionary ?? "")
return
}
})
Ejemplo completo
#import "AppDelegate.h"
#import <AppsFlyerLib/AppsFlyerLib.h>
#import <UserNotifications/UserNotifications.h>
@interface AppDelegate ()
@end
@implementation AppDelegate
// Start the AppsFlyer SDK
- (void)sendLaunch:(UIApplication *)application {
[[AppsFlyerLib shared] start];
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
/** APPSFLYER INIT **/
[AppsFlyerLib shared].appsFlyerDevKey = @"<YOUR_DEV_KEY>";
[AppsFlyerLib shared].appleAppID = @"<APPLE_APP_ID>";
/* Uncomment the following line to see AppsFlyer debug logs */
// [AppsFlyerLib shared].isDebug = true;
// SceneDelegate support
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(sendLaunch:)
name:UIApplicationDidBecomeActiveNotification
object:nil];
if (@available(iOS 10, *)) {
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
center.delegate = self;
[center requestAuthorizationWithOptions:(UNAuthorizationOptionSound | UNAuthorizationOptionAlert | UNAuthorizationOptionBadge) completionHandler:^(BOOL granted, NSError * _Nullable error) {
}];
}
else {
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes: UIUserNotificationTypeAlert | UIUserNotificationTypeSound | UIUserNotificationTypeBadge categories:nil];
[[UIApplication sharedApplication] registerUserNotificationSettings:settings];
}
[[UIApplication sharedApplication] registerForRemoteNotifications];
return YES;
}
@end
import UIKit
import AppsFlyerLib
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
AppsFlyerLib.shared().appsFlyerDevKey = "<YOUR_DEV_KEY>"
AppsFlyerLib.shared().appleAppID = "<APPLE_APP_ID>"
/* Uncomment the following line to see AppsFlyer debug logs */
// AppsFlyerLib.shared().isDebug = true
// SceneDelegate support
NotificationCenter.default.addObserver(self, selector: NSSelectorFromString("sendLaunch"), name: UIApplication.didBecomeActiveNotification, object: nil)
return true
}
// SceneDelegate support
@objc func sendLaunch() {
AppsFlyerLib.shared().start()
}
// ...
}
Configuración del ID de usuario de cliente
OPCIONAL
El ID de usuario de cliente (CUID) es un identificador de usuario único creado fuera del SDK por el propietario de la aplicación. Si se pone a disposición del SDK, se puede asociar con las instalaciones y otros eventos in-app. Se pueden crear referencias cruzadas entre estos eventos etiquetados con el CUID y los datos de usuario de otros dispositivos y aplicaciones.
Set the CUID
Para establecer el CUID:
[AppsFlyerLib shared].customerUserID = @"my user id";
AppsFlyerLib.shared().customerUserID = "my user id"
Nota
The Customer User ID must be set with every app launch.
Associate the CUID with the install event
If it’s important for you to associate the install event with the CUID, you should set to set the customerUserId
antes de llamar al método start
. Esto se debe a que start
envía el evento de instalación a AppsFlyer. Si el CUID se establece después de llamar a start
, no se asociará con el evento de instalación.
- (void)applicationDidBecomeActive:(UIApplication *)application {
// Your custom logic of retrieving CUID
NSString *customUserId = [[NSUserDefaults standardUserDefaults] stringForKey:@"customerUserId"];
if (customUserId != nil && ![customUserId isEqual: @""]) {
// Set CUID in AppsFlyer SDK for this session
[AppsFlyerLib shared].customerUserID = customUserId;
// Start
[[AppsFlyerLib shared] start];
}
}
func applicationDidBecomeActive(_ application: UIApplication) {
// your logic to retrieve CUID
let customUserId = UserDefaults.standard.string(forKey: "customUserId")
if(customUserId != nil && customUserId != ""){
// Set CUID in AppsFlyer SDK for this session
AppsFlyerLib.shared().customerUserID = customUserId
AppsFlyerLib.shared().start() // Start
}
}
Log sessions
The SDK sends an af_app_opened
message whenever the app is opened or brought to the foreground, providing that start
is called in the didBecomeActive
lifecycle event method. Before the message is sent, the SDK makes sure that the time passed since sending the last message is not smaller than a predefined interval.
Setting the time interval between app launches
Establecido minTimeBetweenSessions
to the minimal time interval that must lapse between two af_app_opened
messages. The default interval is 5 seconds.
Soporte para iOS 14
A continuación encontrarás guías sobre cómo configurar la compatibilidad con las funciones de iOS 14+.
Enabling App Tracking Transparency (ATT) support
A partir de iOS 14.5, el acceso al IDFA se rige por el marco ATT.
La habilitación del soporte de ATT en el SDK maneja la recopilación del IDFA en dispositivos con iOS 14.5
+ instalado.
Atención
Llama a
waitForATTUserAuthorization
solo si tienes la intención de llamar arequestTrackingAuthorization
en algún lugar de tu aplicación.
Paso 1: Configuración waitForATTUserAuthorization
Al inicializar el SDK, antes de llamar start
In applicationDidBecomeActive
, call waitForATTUserAuthorization
:
[[AppsFlyerLib shared] waitForATTUserAuthorizationWithTimeoutInterval:60];
AppsFlyerLib.shared().waitForATTUserAuthorization(timeoutInterval: 60)
Establecido timeoutInterval
para que los usuarios de la aplicación tengan tiempo suficiente para ver e interactuar con el aviso de ATT. Algunos ejemplos:
- Si aparece el aviso de la ATT en el inicio de la aplicación, un intervalo de 60 segundos debería ser suficiente.
- Si aparece el aviso de la ATT después de un tutorial que tarda aproximadamente 2 minutos en completarse, un intervalo de 120 segundos debería ser suficiente.
Paso 2: Llamar requestTrackingAuthorization
Llama a requestTrackingAuthorization
donde desees que se muestre el mensaje:
- (void)didBecomeActiveNotification {
// start is usually called here:
// [[AppsFlyerLib shared] start];
if @available(iOS 14, *) {
[ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {
NSLog(@"Status: %lu", (unsigned long)status);
}];
}
}
@objc func didBecomeActiveNotification() {
// start is usually called here:
// AppsFlyerLib.shared().start()
if #available(iOS 14, *) {
ATTrackingManager.requestTrackingAuthorization { (status) in
switch status {
case .denied:
print("AuthorizationSatus is denied")
case .notDetermined:
print("AuthorizationSatus is notDetermined")
case .restricted:
print("AuthorizationSatus is restricted")
case .authorized:
print("AuthorizationSatus is authorized")
@unknown default:
fatalError("Invalid authorization status")
}
}
}
}
Nota
- Es necesario importar el marco
AppTrackingTransparency
para llamar arequestTrackingAuthorization
.- Según la documentación de Apple:
requestTrackingAuthorization
solo se invoca si la aplicación está en el estadoUIApplicationStateActive
estado.requestTrackingAuthorization
no se puede invocar desde las extensiones de aplicación.
Customizing the ATT consent dialog
El cuadro de diálogo de consentimiento de ATT se puede personalizar en tu proyecto de Xcode modificando info.plist
:
Para más información, consulta la documentación de Apple.
Attributing App Clips
La atribución de App Clips de Apple se introdujo en el SDK para iOS V6.0.8
Consulta nuestra guía de integración de App Clips para obtener instrucciones detalladas.
Sending SKAN postback copies to AppsFlyer
iOS 15
Configura tu aplicación para enviar copias de postbacks a AppsFlyer.
Para registrar el punto de conexión de AppsFlyer:
- Agrega
NSAdvertisingAttributionReportEndpoint
como clave de tu app parainfo.plist
. - Establece el valor de la clave en
https://appsflyer-skadnetwork.com/
.
Según Apple, solo puedes establecer un punto de conexión. Las copias de los postbacks recibidos están disponibles en el reporte de copias de postbacks.
Cómo habilitar el modo de depuración
Puedes habilitar los registros de depuración configurando isDebug en true
:
[AppsFlyerLib shared].isDebug = true;
AppsFlyerLib.shared().isDebug = true
Nota
Para ver los registros de depuración completos, asegúrate de configurar
isDebug
antes de invocar otros métodos SDK.Ver ejemplo.
Advertencia
Para evitar la filtración de información confidencial, asegúrate de que los registros de depuración estén deshabilitados antes de distribuir la aplicación.
Pruebas de integración
Para obtener instrucciones detalladas sobre las pruebas de integración, consulta la guía de pruebas de integración del SDK para iOS.
Actualizado Hace 3 meses