Intégration du SDK AppsFlyer - iOS

Version actuelle : 4.7.3

Le SDK AppsFlyer propose des fonctions de suivi des installations d’applications et des évènements.  Nous avons développé un SDK très robuste (plus de 8 milliards d’installations à l’heure actuelle), sécurisé, léger, et très facile à intégrer.

SDK_Integration_pic.jpg

De façon à évaluer le ROI et les degrés d’engagement des utilisateurs. Vous pouvez effectuer un suivi des installations, des mises à jour et des sessions (en suivant les étapes indiquées ci-dessous), mais également suivre les évènements in-app en plus des installations d’applications (y compris les achats in-app, les niveaux de jeux, etc.).

Les étapes indispensables sont détaillées ci-dessous, suivies par les fonctionnalités optionnelles.

Le SDK iOS est compatible avec tous les appareils iOS (iPhone, iPod, iPad) fonctionnant sous iOS 6 ou version ultérieur sur Stativ Lib, ou sur iOS 8 et version ultérieure sur Framework.

NOTES :  

  • Le SDK AppsFlyer est totalement conforme aux réseaux IPv6 DNS64/NAT64 d’Apple.  Pour plus d'informations, cliquez ici.
  • Le SDK AppsFlyer utilise la classe NSUserDefaults. Le nettoyage de valeur de NSUserDefaults peut engendre des erreurs d’attribution.

 Téléchargement du SDK iOS

  • Pour télécharger le SDK iOS comme bibliothèque statique (Static Library) cliquez ici.
  • Pour télécharger le SDK iOS comme framework cliquez ici

 1.  Notes de version

  • Les notes de version du SDK iOS d’AppsFlyer sont consultables ici.

 2.  Intégration du SDK à votre Application (Indispensable)

 Le SDK AppsFlyer est disponible en tant que bibliothèque statique ou framework.

2.1 AppsFlyer SDK Framework

La façon la plus simple d’intégrer le framework et d’utiliser cocoapods:

  • Ajouter à ligne suivante à votre fichier pod :

pod ‘AppsFlyerFramework’

Si vous n’utilisez pas cocoapods, suivez les étapes ci-dessous :

  • Dans Xcode, allez sur Build Phases >> Link Binary with Libraries >> Cliquez sur + pour ajouter une bibliothèque

    Library.png
  • Cliquez sur Add Other et ajouter le AppsFlyerLib.framework

    Library_2.png
  • Ajouter l’en-tête suivant:
#import <AppsFlyerLib/AppsFlyerTracker.h>

2.2 AppsFlyer SDK Static Library (bibliothèque statique)

Dans Cocoapods, la Bibliothèque Statique est obsolète. Téléchargez-la directement depuis cet article (au-dessus).

Suivez les étapes ci-dessous :

  • Ajouter l’en-tête et les fichiers lib à votre projet.
  • Ajouter l’entête importé d’AppsFlyer :
#import "AppsFlyerTracker.h"
  • Ajouter le AdSupport.framework à votre projet et paramétrez-le comme Optional. Vous pouvez consulter les instruction de dépôt ici.

2.3 IDFA et Apple Search Ads

  • Ajoutez le AdSupport.framework - AppsFlyer collecte l’IDFA uniquement si vous ajoutez ce framework.  
    L’échec de l’ajout de ce framework signifie que vous ne pouvez pas effectuer de suivi pour Facebook, Twitter et la plupart des autre ad networks.
  • Ajoutez le iAd.framework à votre projet. Il est vivement recommandé d’inclure ce framework dans l’application, celui-ci étant indispensable au suivi de l’Apple Search Ads.  
  1.  Initialisation du SDK & Évènement d'installation (Minimum requis pour le fonctionnement du suivi)

NOTE :  Ceci est le minimum requis pour pouvoir suivre les installations de votre application.

Vous devez initialiser le SDK lors du premier lancement de l’application.  Assurez-vous que le SDK est initialisé avant d’envoyer l’évènement de suivi ci-dessous.

3.1 Initialisation du SDK

Pour initialiser le SDK, ajouter les lignes suivantes à votre fonction “didFinishLaunchingWithOptions” :

[AppsFlyerTracker sharedTracker].appsFlyerDevKey = @"REPLACE THIS WITH YOUR Dev_Key";
[AppsFlyerTracker sharedTracker].appleAppID = @"REPLACE THIS WITH YOUR App_ID";

NOTE : Entrez uniquement le numéro sans le préfixe « ID ».  Par exemple, si votre App ID est id123456789, la ligne ci-dessus serait alors :

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

Remplacez [Dev_Key] avec votre propre Dev_Key (accessible dans votre compte, sous App Settings du tableau de bord AppsFlyer).  

Par exemple: a4kGpVyxm8iGgzvzT8NPaV

App_Settings_dev_key.png

3.2 Ajout de Code

Ajoutez le code suivant à votre fichier source AppDelegate.m à la fonction “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 Rapports de liens profonds pour l’attribution sur le reciblage

Si votre application est compatible avec les liens profonds (liens Universel ou Standard) ou si vous prévoyez de lancer des campagnes de reciblage, vous devez suivre les étape de la section 5.7.

4.  API de suivi des évènements in-app (Optionnel)

Cet API permet à AppsFlyer de suivre les évènements post-installation. Ces évènements sont définis par l’annonceur et contiennent un nom d’évènements en plus des valeur optionnelles d’évènements.

Effectuer un suivi des événements in-app vous aide à mesurer et analyser comment les utilisateurs fidèles découvrent votre application, et à les attribuer à des campagnes et source médias précises. Il est vivement recommandé de prendre le temps de définir les évènements que vous souhaitez mesurer pour suivre votre ROI (retour sur investissement) et votre LTV (valeur vie client).

Syntaxe :

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

eventName représente n’importe quel chaîne pour définir le nom de l’évènement.

values est un dictionnaire de paramètres d’évènements qui composent un évènement riche.

Comptabiliser les revenus dans le cadre d’un évènement in-app riche : Utilisez ‘af_revenue” (constante)

AFEventParamRevenue

Paramètre d’évènement pour comptabiliser les revenus dans le cadre d’un évènement in-app : Vous pouvez la compléter avec n’importe quelle valeur numérique, positive ou négative.

NOTE:  “af_price” 

AFEventParamPrice

n’es pas comptabilisé comme revenu. C’est un paramètre descriptif n’intervenant pas dans les mesures de revenus et de LTV.

Exemple 1 : Evènement in-app pour la complétion de niveau

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

Cela génère un évènement du type « af_level_achieved », avec les valeurs d’évènement suivantes :

{af_level: 9 , af_score: 100}

Exemple 2 : Évènements d’achats

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

Cela génère un évènement du type « af_purchase », avec les valeurs d’évènement suivantes :

{af_content_id: “1234567” , af_content_type: “category_a”, af_revenue: 200, af_currency: “USD”}

L’évènement d’achat ci-dessus comporte un revenu de 200 dollars, et apparaît comme revenu dans le tableau de bord.

NOTES:

  • Le nom d'un évènement in-app doit être de 45 caractères maximum.  Les noms d’èvements de plus de 45 caratères n’apparaissent pas dans le tableau de bord, mais uniquement dans les API de données brutes, et les API Push et Pull.
  • Le nombre d’évènements in-app pouvant être définis dans une application est limité à 128.

Pour plus de détails concernant les évènements in-app riches AppsFlyer sur iOS, cliquez ici.

5.  Intégration avancée

Les API ci-dessous sont facultatifs et font partie de l’intégration avancée avec le SDK AppsFlyer.

5.1 Paramétrage du code de devises (optionnel)

En plus des codes de devises spécifiques pouvant être utilisés au sein de chaque évènement in-app envoyés à AppsFlyer, vous avez également la possibilité de définir un code international de devises en utilisant l’API ci-dessous. Le code de devises international est utilisé lorsque « af_currency » (AFEventParamCurrency) n’est pas envoyé dans le cadre d’un évènement in-app.

USD est la valeur par défaut.  Consultez ici les codes de devises ISO compatibles.

Utilisez l’API suivant pour définir le code de devises :

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

5.2 Paramétrage de l’Unique AppsFlyer (optionnel)

Un ID unique propriétaire AppsFlyer est créé à chaque nouvelle installation d’une application. L’ID unique d’AppsFlyer est l’ID principal utilisé par AppsFlyer dans les rapports et les API.

Utilisez l’API suivant pour obtenir l’ID unique d’AppsFlyer :

(NSString *) [AppsFlyerTracker sharedTracker] getAppsFlyerUID

5.3 Obtention de l’ID Unique AppsFlyer (optionnel)

Définir votre propre ID client vous permet de d’effectuer un croisement entre votre propre ID unique, l’ID unique AppsFlyer  et les ID des autres appareils. Cet ID est disponible dans les rapports CSV d’AppsFlyer ainsi que dès les API postbacks pour un recoupement avec vos ID internes.

Pour configurer un ID utilisateur client :

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

REMARQUES IMPORTANTES :

  • Le paramétrage d’ID client doit être réalisé avant trackAppLaunch.
  • Il est vivement recommandé de de configurer aussi tôt que possible votre ID utilisateur client car il est uniquement associé aux évènements rapportés après la configuration de ce paramètre.
  • Vous devez configurer l’ID utilisateur client pour pouvoir utiliser les intégrations AppsFlyer avec les plateformes analytiques telles que Mixpanel et Swrve.

Pour plus d’informations concernant l’ID utilisateur client,  cliquez ici.

5.4  Obtenir les données de conversion (optionnelle)

AppsFlyer vous permet d’accéder aux données d’attribution en temps réel, et directement au niveau du SDK. Cela vous permet de personnaliser la page d’accueil s’affichant à l’utilisateur lors de la toute première ouverture de l’application après sa première installation.

Pour plus d'informations sur cette fonctionnalité avancée lire ici.

5.5 Activer la compatibilité avec l’extension d’une application (optionnel)

L’extension d’une application nécessite l’autorisation d’accès à Internet :

  1. Rendez-vous sur le fichier info.plist de l’extension de votre application.
  2. Dans NSExtension / NSExtensionAttributes configurer le RequestsOpenAccess flag sur YES

Dans App Extension ViewController ViewDidLoad initialisez AppsFlyerLib:

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

Pour recevoir les données de conversion :

  1. Allez sur App Extension ViewController.h
  2. Importez le fichier d’en-tête AppsFlyer
#import "AppsFlyerTracker.h"
  1. Ajoutez <AppsFlyerTrackerDelegate> à la déclaration d'interface

Dans Extension ViewController.m, ajoutez les méthodes suivantes:

-(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 Configuration de l’email utilisateur (optionnel)

AppsFlyer vous permet de rapporter une ou plusieurs adresses email d’un utilisateur. Le développeur devrait collecter les adresses emails d’un utilisateur et les communiques à AppsFlyer selon la méthode de cryptage qu’il a choisi. La méthode de cryptages suivantes sont disponibles : SHA1, SHA256, MD5 et plain.

Exemple :

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

NOTE​ : Les Informations Personnelles Identifiables (PII) telles que les adresses email ne sont pas conservées par AppsFlyer, et ces informations n’apparaissent dans aucun rapport. Cette collecte d’information a pour seule finalité l’envoi de postback à la source média.

5.7 Rapports de liens profonds pour l’attribution sur le reciblage (optionnel)

Les liens profonds sont des éléments essentiels des campagnes de reciblage, et il vivement recommandé d’y recourir lors du lancement de campagnes de reciblage.

AppsFlyer vous permet d’effectuer un rapport des lancements effectués par des liens profonds, y compris les Universal Links iOS et analyser les performances de vos campagnes d’attribution sur le reciblage.

A partir d’iOS 9 et des versions ultérieures, les liens profonds sont réalisés par les Universal Links.  Il est donc indispensable d’intégrer Universal Links à votre application.

Click ici pour consulter le guide AppsFlyer d’intégration des Universal Links.

Pour effectuer des rapports de ces lancements, ajoutez le code ci-dessous à l’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;
}

Pour plus d’information consultez, Le guide de configuration OneLink.

5.8 Validation des reçus d’achats in-app (optionnel)

NOTE:  Cette fonction est supportée sur iOS7 et versions ultérieures.

Les SDK AppsFlyer peuvent fournir une vérification des serveurs d’achats in-app. Pour configurer le suivi de validation des reçus, vous devez appeler la méthode validateAndTrackInAppPurchase danscompleteTransaction : callback de SKStoreKit’s.  Cet appel génère automatique un évènement 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;

Cet appel contient deux blocs de callback, l’un pour « success » et l’autre pour « failure » (pour n’importe quelle raison, y compris un échec de validation). Dans « success », un dictionnaire est retourné avec les données de validation des reçus fournies par les serveurs d’Apple.  

IMPORTANT : A des fins de tests, nous recommandons de configurer le drapeauuseReceiptValidationSandbox sur OUI, car cela redirige la requête aux serveurs sandbox d’Apple.

[AppsFlyerTracker sharedTracker].useReceiptValidationSandbox = YES;

Exemple :

[[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 Exclusion d’utilisateur finaux (optionnel)

AppsFlyer propose une méthode pour exclure des utilisateurs spécifiques des analyses AppsFlyer. Cette méthode est conforme aux plus récentes règles de confidentialité ainsi qu’aux politiques de confidentialité et de données de Facebook. Par défaut, ce paramètre est configuré sur NO, et le suivi est donc établit par défaut.  Utilisez cet API lors de l’initialisation du SDK effectuée en Section 4 pour une exclusion totale :

[AppsFlyerTracker sharedTracker].deviceTrackingDisabled = YES;

5.10 Exclusion totale à partir des ID publicitaires – IDFA/IFA (optionnel)

Le SDK AppsFlyer collecte l’IDFA uniquement si bibliothèque AdSupport.framework est inclus dans votre projet. Il n’est pas nécessaire de l’intégrer ou de l’exclure spécifiquement. Cependant, si vous souhaitez exclure totalement l’IDFA, utilisez l’API suivant lors de l’initialisation du SDK effectuée en Section 4 :

[AppsFlyerTracker sharedTracker].disableAppleAdSupportTracking = YES;

L’IDFA n’est pas collecté par les serveurs AppsFlyer lors le suivi disableAppleAdSupport est paramétré sur YES.

5.11 Suivi des désinstallations d’applications (optionnel)

AppsFlyer vous permet d’effectuer un suivi des désinstallations des applications.  Utilisez cette fonction pour vous inscrire à la fonctionnalité de suivi des désinstallations :

Appelez cette fonction :

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {

Appelez ce code pour activer cette fonctionnalité.

// Register for Push Notifications
   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];
}

Exemple d’utilisation

[[AppsFlyerTracker sharedTracker] registerUninstall:deviceToken];

Lorsque vous testez les installations dans l’environnement de développement d’Apple, laissez le paramètre de ce flag par défaut sur NO :

[AppsFlyerTracker sharedTracker].useUninstallSandbox = NO;

Pour le moment, les tests de désinstallation sont compatibles uniquement sur TestFlight et Production.

Pour réaliser et compléter ce processus correctement, cliquez ici.

Pour davantage d’informations sur le suivi de désinstallation iOS d’AppsFlyer, cliquez ici.

5.12 Implémentation des liens profonds avec OneLink (optionnel)

OneLink déclenche l’ouverture d’une application à l’emplacement du lien profond en précisant le mécanisme sous le paramètre af_dp, ou les Universal Links pour iOS9.

Vous pouvez intégrer le callback onAppOpenAttribution appelé par le SDK AppsFlyer. Cela renvoie les paramètres OneLink utilisé pour déclencher l’ouverture de l’application. Vous pouvez ensuite analysez les valeurs et appliquer la logique pour déclencher l’ouverture de la page souhaitée de l’application.

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

Pour plus d'informations, cliquez ici.

5.13 Mesures de notification Push (optionnel)

AppsFlyer vous permet de mesurer les notifications push dans le cadre d’une campagne publicitaire.

Pour intégrer le suivi des notifications push à votre application, ajoutez le code suivant à AppDelegate de votre application.

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

Le message push doit comporter un paramètre « af » avec les paramètres de suivi AppsFlyer.

Exemple d’utilisation

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

6.  Vérification de l’intégration du SDK

Pour découvrir comment tester l’intégration du SDK, cliquez ici.

Cet article vous a-t-il été utile ?
Utilisateurs qui ont trouvé cela utile : 0 sur 0
Vous avez d’autres questions ? Envoyer une demande
Réalisé par Zendesk