Intégration du SDK AppsFlyer - iOS

  • Annonceurs
  • Développeurs

ios.pngVersion SDK : 4.8.11 (Notes de version)

1. Aperçu

Ce guide détaille la marche à suivre pour intégrer le SDK AppsFlyer dans votre application iOS. Vous pouvez suivre les installations, les mises à jour, les sessions et les évènements in-app, ainsi que les installations d'applications (y compris les achats in-app, les niveaux de jeu, etc.) pour évaluer le ROI et le niveau d'engagement des utilisateurs. Le SDK iOS est compatible avec tous les appareils iOS (iPhone, iPod, iPad) fonctionnant sous iOS version 6 et ultérieures.

 Remarque

Le SDK AppsFlyer est entièrement compatible avec les réseaux DNS64/NAT64 IPv6 d’Apple. Pour plus d'informations, veuillez cliquer ici.

 Important !

Le SDK AppsFlyer utilise la classe NSUserDefaults. Effacer toutes les valeurs de NSUserDefaults peut provoquer des problèmes d’attribution.

 Astuce

  • 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
  • L'implémentation des autres fonctionnalités décrites est OPTIONNELLE, bien que certaines d’entre elles puissent vous être utiles, en fonction de la logique commerciale de votre application. Par exemple, le suivi des revenus ou l'obtention des données de conversion au premier lancement peuvent être essentiels pour le flux de votre application.

2. Démarrage rapide

2.1 Télécharger et ajouter le SDK AppsFlyer à Xcode

CocoaPods Carthage Static Framework Static Lib
  • Assurez-vous que vous avez téléchargé et installé la dernière version de CocoaPods.
  • Ajoutez la ligne suivante à votre Podfile :
    pod 'AppsFlyerFramework'
  • Exécutez pod install
  • Assurez-vous que vous utilisez le fichier .xcworkspace pour ouvrir votre projet dans Xcode, à la place du fichier .xcodeproj à partir de ce stade.

Le SDK AppsFlyer utilise les cadres natifs suivants :

AdSupport.framework
Ce cadre est nécessaire pour collecter l’IDFA des appareils.
Sans IDFA vous ne pouvez pas suivre Facebook Ads, Twitter, Google ads et les autres réseaux.
iAd.framework
Ce cadre est requis pour suivre les Apple Search Ads dans votre application

2.2 Configurer l’intégration dans App Delegate

Ouvrez le fichier AppDelegate.m de votre application et importez le SDK AppsFlyer :

Swift Objective-C
importez AppsFlyerLib

3. Initialisation du SDK

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

Notez que vous devez utiliser des chiffres uniquement, sans le préfixe « id » pour définir l'ID application ici.

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

 Remarque

Si isDebug = true est défini, les journaux du SDK AppsFlyer sont affichés dans la console xCode

  • Ajoutez le code suivant à la fonction 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. Suivi des évènements In-App

Les évènements In-App permettent d'analyser ce qui se passe dans votre application. Il est recommandé de prendre le temps de définir les évènements que vous voulez mesurer pour vous permettre de suivre le ROI (Return On Investment) et la LTV (Lifetime Value).

Le suivi des événements in-app est réalisé en appelant trackEventavec le nom de l'événement et les paramètres de valeur. Consultez la documentation Événement in-app pour plus de détails.

Le nom d’un évènement in-app ne doit pas dépasser 45 caractères. Les noms d’évènements dépassant 45 caractères n’apparaissent pas dans le tableau de bord, mais seulement dans les API de données brutes, Push et Pull.

Exemple : Événement In-App d'achat

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"}

 Remarque

AppsFlyer prend en charge les caractères non anglais dans les évènements in-app ou toute autre API SDK, en commençant par le SDK iOS version 4.8.1.

Ne pas ajouter de symbole monétaire ou de points décimaux aux chiffres, car ils ne sont pas reconnus.

 Exemple d'utilisation

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

5. Suivi du Deep Linking

 Astuce

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 et les versions ultérieures nécessitent que votre application prenne en charge les Universal Links. Pour plus de détails, veuillez cliquer ici.


Pour gérer le deep linking, ajoutez le code suivant dans votre application (dans la classe app delegate). Les méthodes de ce code vous permettent d’obtenir les données de deep linking. Les données de deep linking vous permettent de rediriger les utilisateurs vers l'activité de l'application pertinente et de leur fournir le contenu correspondant.

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
  }
  

 Important !

Pour Swift 4.2 et versions ultérieures, utilisez le code suivant pour la méthode continue userActivity :

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

6. Suivi des revenus

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.

 Remarque

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.


Exemple : Évènement In-App de revenu

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

 Important !

Veillez à ne PAS formater la valeur de revenu. Elle ne doit pas contenir de séparateurs sous forme de virgules, de symbole monétaire ou de texte. Un événement de revenu doit être similaire à 1234.56, par exemple.

Suivi des revenus négatifs

Si vous devez effectuer le suivi de revenus négatifs, par exemple lorsqu'un utilisateur annule un achat ou reçoit un remboursement, vous pouvez envoyer un revenu négatif.

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

 Remarque

Veuillez remarquer les éléments suivants dans le code ci-dessus :

  1. La valeur de revenu est précédée du signe moins
  2. Le nom de l'événement a la valeur unique "cancel_purchase" pour vous permettre d'identifier les événements de revenus négatifs dans le tableau de bord et les rapports de données brutes.

7. Obtenir les données de conversion

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.

Pour plus d’informations au sujet de cette fonctionnalité avancée, cliquez ici.

8. Identifiants utilisateur

Il existe plusieurs options pour récupérer les identifiants utilisateur :

Obtenez le DeviceID AppsFlyer

Le DeviceID unique d'AppsFlyer est créé pour chaque nouvelle installation d’une application. Vous pouvez l’obtenir en utilisant le code suivant :

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

Définir l'ID Utilisateur-Client

Définir votre propre ID client vous permet de croiser votre propre ID unique avec l'ID unique d'AppsFlyer et les ID des autres appareils. Cet ID est disponible dans les rapports CSV d'AppsFlyer, avec les API de postback, vous permettant de les croiser avec vos ID internes.

Pour définir votre ID Utilisateur-Client :

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

 Remarque importante

Il est recommandé de définir votre ID utilisateur-client dès que possible, car il n'est associé qu'aux événements signalés après son installation. Si setCustomerUserId est appelé avant de faire appel à trackAppLaunch, l'ID utilisateur-client sera visible dans l'exportation brute en ce qui concerne les installations et les événements. S'il est défini après, seule la valeur pour les événements suivis sera visible après l'appel de cette méthode.

L'ID Utilisateur-Client peut également être utilisé pour compléter les intégrations avec des plate-formes d'analyse, telles que Mixpanel et Swrve.

Obtenir l'ID Utilisateur-Client :

Pour obtenir l'ID utilisateur-client, récupérez-le à partir de sharedTracker.

[AppsFlyerTracker sharedTracker].customerUserID

 Important !

Assurez-vous de définir l'ID utilisateur-client à chaque lancement de l'application, avant d'appeler la méthode trackAppLaunch</code.

Pour plus d’informations sur l’ID Utilisateur-Client, cliquez ici.

Définir l'E-mail Utilisateur

AppsFlyer vous permet de reporter une ou plusieurs adresses e-mail utilisateur, si vous les collectez dans votre application. Les valeurs d'e-mail peuvent être cryptées par les méthodes de chiffrement suivantes : Sha1 et MD5 et en clair.

Exemple : Collecter l'e-mail utilisateur

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

 Remarque

Les renseignements personnels (PII) tels que les adresses e-mail ne sont pas conservés par AppsFlyer et ces informations ne sont pas présentées dans les rapports. Le but de la collecte de ces informations est uniquement à des fins de postback vers la source média.

IDFA et IDFV

AppsFlyer recueille automatiquement l’IDFA (ID pour les annonceurs) et IDFV (ID pour les vendeurs) si AdSupport.framework est inclus dans l’application.

9. Fonctionnalités facultatives

Mesure des désinstallations

Pour la mesure de désinstallation, activez la notification push distante sur votre application. Consultez le Remote Notification Programming Guide d'Apple pour plus de détails.

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

Suivi des Notifications Push

Pour activer le suivi des lancements d'application par les notifications push, ajoutez le code suivant à votre app delegate :

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

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

Exemple de message :

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

Suivi des Promotions Croisées

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.

Suivi des invitations utilisateur

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.

Configuration du Code Devise

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.

La valeur par défaut est USD. Vous pouvez trouver les codes devise ISO acceptables ici.

Utilisez l'API suivante pour configurer le code de devise :

public void currencyCode(String currencyCode);

Exemple d'utilisation :

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

Validation des achats in-app

 Remarque

Cette fonction est prise en charge pour iOS7 et les versions ultérieures

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;

 Remarque

Le paramètre de prix doit contenir le total des revenus associé à l'événement d'achat validé.


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.

 Important

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

 Exemple

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;
      }
  }];

 Important !

Lorsqu'AppsFlyer valide un achat auprès de serveurs Apple, si la réponse contient un tableau in-app vide, AppsFlyer renvoie {"status":"in_app_arr_empty"} au callback d'erreur.

Si vous recevez cet indicateur, vous devez restaurer le produit acheté avec Apple en envoyant une demande d'actualisation de reçu. Pour plus d'informations, consultez la documentation d'Apple.

Après l'actualisation du reçu, appelez de nouveau validateAndTrackInAppPurchase.

Consultez le code ci-dessus pour savoir comment gérer cette erreur.

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

Anonymisation

AppsFlyer vous fournit une méthode permettant d'anonymiser des identifiants utilisateur spécifiques dans les analyses AppsFlyer. Cette méthode est conforme aux dernières exigences de confidentialité ainsi qu'aux politiques de confidentialité des données de Facebook. La valeur par défaut est NON, ce qui signifie qu'aucune anonymisation n'est effectuée par défaut.

Utilisez cette API lors de l'initialisation du SDK pour anonymiser explicitement les installations, les évènements et les sessions d'un utilisateur :

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

Il est possible de reprendre le suivi en appelant de nouveau deviceTrackingDisabled, défini sur false.

 Avertissement

L'anonymisation des utilisateurs impacte FORTEMENT vos informations d'attribution.
Utilisez cette option UNIQUEMENT pour les régions dans lesquelles vous êtes légalement tenu de ne pas collecter les informations de vos utilisateurs.

Personnalisation de la durée entre sessions

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 = <votre_temps_personnalisé_en_secondes>

Note that setting a high value to the custom time between launches may badly impact APIs relying on sessions data, such as deep linking.

Sessions d'arrière-plan pour applications utilitaires

Unavailable in iOS.

Extensions d'application et WatchKit iOS

L’extension de l’application requiert des autorisations pour utiliser internet :

  1. Allez au fichier info.plist de l’extension de votre application
  2. Dans NSExtension / NSExtensionAttributes définissez l'indicateur RequestsOpenAccess sur YES.

Ajoutez le code suivant au UIViewController de l’extension de l’application viewDidLoad :

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()
  }

Pour recevoir les données d’attribution sur l’extension de l’application, suivez les instructions ici et implémentez-les sur le UIViewController de votre application au lieu du AppDelegate.

Exclusion

Dans certains cas extrêmes, vous pouvez vouloir arrêter tout suivi SDK en raison de la conformité aux exigences légales et à la vie privée. L'API isStopTracking le permet. Une fois cette API appelée, notre SDK ne communiquera plus avec nos serveurs et cessera de fonctionner.

Il existe différents scénarios d'exclusion d'utilisateurs. Nous recommandons vivement de suivre les instructions exactes du le scénario qui correspond à votre application.

 Avertissement

Utilisez cette API uniquement lorsque vous souhaitez exclure cet utilisateur de tout suivi. L'utilisation de cette API impacte FORTEMENT votre attribution, votre collecte des données et votre mécanisme de deep linking.

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

 Important

N'appelez pas la méthode trackAppLaunch si l'API isStopTracking est définie sur true

Collecte du nom d'appareil

Le SDK AppsFlyer vous permet de collecter le nom de l'appareil pour votre analyse interne. Cette fonctionnalité est désactivée par défaut. Pour l'activer, utilisez l'API suivante :

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

 Important

Le nom de l'appareil est susceptible d'être considéré comme une donnée personnelle dans certaines régions. Collectez ces informations uniquement si vous savez que vous êtes légalement autorisé à le faire et que vous avez reçu le consentement explicite de l'utilisateur.

Définition des données personnalisées supplémentaires

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. Tester votre intégration

Pour plus de détails sur la manière de tester votre intégration, cliquez ici.

Vous pouvez maintenant commencer à suivre les sources média avec lesquelles vous travaillez.

11. Soumettre une application à l’App Store

Vous pouvez trouver des instructions sur la soumission de votre application à l’App Store ici.

Cet article vous a-t-il été utile ?
Utilisateurs qui ont trouvé cela utile : 9 sur 15

Commentaires

0 commentaire

Veuillez vous connecter pour laisser un commentaire.

Contenu de la page: