Intégration du SDK AppsFlyer - iOS

  • Annonceurs
  • Développeurs

ios.pngVersion SDK : 4.10.4 (Notes de version)

1. Aperçu

This guide details how to integrate AppsFlyer's SDK into your iOS app. You can record installs, updates, sessions, and additional in-app events as well as app installs (including in-app purchases, game levels, etc.) to evaluate ROI and user engagement levels. The iOS SDK is compatible with all iOS devices (iPhone, iPod, iPad) with iOS version 6 and later.

 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

  • In order to implement basic SDK integration that is, install attribution only, it is mandatory to complete the procedures in sections 2 and 3 in this document. 
  • It is recommended that you read the Recording in-app events section as an aid to implementation
  • The rest of the described features described, are optional and implementing them will depend on your app's business logic. For example, recording revenue or getting the conversion data on first launch may be vital for your app's flow

2. Démarrage rapide

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

CocoaPodsCarthageStatic FrameworkStatic Lib
  1. Assurez-vous que vous avez téléchargé et installé la dernière version de CocoaPods.
  2. Ajoutez la ligne suivante à votre Podfile :
    pod 'AppsFlyerFramework'
  3. Exécutez pod install
  4. 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 attribuer d'installations à Facebook Ads, Twitter, Google Ads et aux autres réseaux.
iAd.framework
Ce cadre est nécessaire pour enregistrer et mesurer les performances des Apple Search Ads dans votre application.

2.2 Configurer l’intégration dans App Delegate

SwiftObjective-C

Dans AppDelegate.swift, procédez comme suit :

  1. importez AppsFlyerLib
  2. Ajoutez AppsFlyerTrackerDelegate à la déclaration de classe
import AppsFlyerLib
class AppDelegate: UIResponder, UIApplicationDelegate, AppsFlyerTrackerDelegate {
   // your code here
}

3. Initialisation du SDK

Initialisez le SDK dans la méthode didFinishLaunchingWithOptions en utilisant votre ID application extrait de iTunes Connect et votre DevKey AppsFlyer

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

SwiftObjective-C
AppsFlyerTracker.shared().appsFlyerDevKey = "<your-appsflyer-dev-key>";
AppsFlyerTracker.shared().appleAppID = "123456789"
AppsFlyerTracker.shared().delegate = self
#if 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 :
SwiftObjective-C
func applicationDidBecomeActive(application: UIApplication) { 
// attribute Installs, updates & sessions(app opens) 
// (You must include this API to enable SDK functions) 
AppsFlyerTracker.shared().trackAppLaunch() 
// your other code here.... }

Vérifier que le suivi des lancements d'application est un succès

Vous pouvez vérifier que la demande de suivi du lancement d'application est un succès en implémentant trackAppLaunchWithCompletionHandler. Vous pouvez ensuite appliquer la logique pour gérer le succès ou l'échec du suivi des lancements d'application.

Exemple

[[AppsFlyerTracker sharedTracker] trackAppLaunchWithCompletionHandler:^(NSDictionary<NSString *,id> *dictionary, NSError *error) {
        if (error) {
            NSLog(@"%@", error);
            return;
        }
        if (dictionary) {
            NSLog(@"%@", dictionary);
            return;
        }
        [NSException exceptionWithName:@"fatalError" reason:nil userInfo:nil];
    }];

4. Enregistrement 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 mesurer le ROI (Return On Investment) et la LTV (Lifetime Value).

L'enregistrement 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

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

swift-record-in-app-events.png

Ceci génère un événement de type af_purchase (utilisant la constante AFEventPurchase) avec les valeurs d'événement suivantes : {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.

Pour les revenus, n'ajoutez pas de symboles monétaires car ils ne sont pas reconnus.

 Exemple d'utilisation

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

Vérification de l'enregistrement d'évènements in-app

Vous pouvez vérifier le succès ou l'échec de l’enregistrement des évènements in-app en implémentant completionHandler . Vous pouvez ensuite appliquer la logique pour gérer le succès ou l'échec de l'enregistrement d'évènements.

Exemple

[[AppsFlyerTracker sharedTracker] trackEventWithEventName:AFEventPurchase
	eventValues:@{AFEventParamRevenue: @"1200",
					AFEventParamContent: @"shoes",
					AFEventParamContentId: @"123"}
	completionHandler:^(NSDictionary<NSString *,id> *dictionary, NSError *error) {
	if (error) {
		NSLog(@"%@", error);
		return;
	}
	if (dictionary) {
		NSLog(@"%@", dictionary);
		return;
	}
	[NSException exceptionWithName:@"fatalError" reason:nil userInfo:nil];

5. Effectuer du Deep Linking

 Astuce

Nous vous recommandons fortement d'intégrer le Deep Linking à votre application. Le Deep Linking est un élément crucial des campagnes de retargeting, et il est fortement recommandé de l'utiliser quand on exécute des campagnes de retargeting.

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.

SwiftObjective-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. Enregistrement des revenus

Utilisez le paramètre d'événement af_revenue (AFEventParamRevenue) pour intégrer le revenu comme élément d'un événement in-app. Vous pouvez lui affecter n'importe quelle valeur numérique, positive comme négative.

 Remarque

AFEventParamRevenue  (équivalent à l’utilisation d’af_revenue) est le SEUL paramètre d’événement qui est compté sur AppsFlyer comme un revenu réel dans les données brutes et le tableau de bord. Pour plus de détails, veuillez cliquer ici.


Exemple : Évènement In-App de revenu

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

Enregistrement de revenus négatifs

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

SwiftObjective-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 vous permet d’accéder aux données d’attribution de l’utilisateur en temps réel pour chaque nouvelle installation, directement au niveau SDK. En faisant cela, vous pouvez offrir aux utilisateurs un contenu personnalisé ou les envoyer vers des activités spécifiques au sein de l’application, ce qui peut considérablement améliorer leur engagement avec votre application.

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 :

SwiftObjective-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 :

SwiftObjective-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 enregistrés 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.

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

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.

Suivez les instructions d’intégration du SDK iOS pour terminer la configuration de la fonctionnalité de mesure de désinstallation.

Enregistrement des notifications push

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

SwiftObjective-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 d'attribution 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"
  }
}

Attribution des promotions croisées

AppsFlyer vous permet d'enregistrer et d'attribuer les installations provenant d'une promotion croisée de l'une de vos applications au sein de l'application actuelle dont dispose l'utilisateur. Les applications de promotion croisée peuvent être un facteur de croissance important en entrainant des installations supplémentaires pour vos applications.

Pour plus d'informations, reportez-vous à l'article concernant l'attribution de promotion croisée, ici.

Attribution des invitations utilisateur

AppsFlyer vous permet d'enregistrer et d'attribuer les installations provenant d'invitations utilisateur au sein de votre application. Le fait de permettre à vos utilisateurs existants d'inviter leurs amis et contacts en tant que nouveaux utilisateurs de votre application peut être un facteur de croissance important pour votre application.
 
Pour obtenir plus d'informations, reportez-vous à l'article concernant l'attribution des invitations utilisateur, disponible ici.

Configuration du Code Devise

Vous pouvez définir un code de devise global en utilisant l'API ci-dessous, en plus des codes de devise spécifiques pouvant être utilisés dans le cadre de chaque événement in-app envoyé à AppsFlyer. Le code de devise global est utilisé lorsque AFEventParamCurrency n'est pas envoyé dans le cadre d'un évènement in-app.

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 :

SwiftObjective-C
AppsFlyerTracker.shared().currencyCode = "USD"

Validation des achats in-app

 Remarque

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

Le SDK AppsFlyer peut fournir une vérification serveur des achat in-app. Pour configurer le suivi de validation de reçu, vous devez appeler la méthode validateAndTrackInAppPurchase dans le callback Transaction finalisée du SKStoreKit. Cet appel génère automatiquement 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;

 Remarque

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


Cet appel contient deux blocs de callback, l'un pour la « réussite » et l'autre pour « l'échec » (quelle qu'en soit la raison, y compris l'échec de validation). En cas de réussite, un dictionnaire est retourné avec les données de validation de reçu fournies par les serveurs d’Apple. 

 Important

À des fins de test, nous vous recommandons de définir l’indicateur useReceiptValidationSandbox sur OUI, car cela redirige les requêtes vers les serveurs sandbox d’Apple.

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

 

 Exemple

Objective-CSwift
[[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.

Pour obtenir la liste des valeurs possibles de retour pour la validation des reçus, veuillez vous reporter à la documentation d’Apple ici.

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 :

SwiftObjective-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

Par défaut, au moins 5 secondes doivent s'écouler entre 2 lancements d'applications pour que cela soit considéré comme 2 sessions distinctes (pour en savoir plus sur le comptage de session).

Toutefois, vous pouvez utiliser l'API suivante pour définir votre valeur personnalisée de durée minimale requise entre les sessions :

SwiftObjective-C
AppsFlyerTracker.shared().minTimeBetweenSessions = <votre_temps_personnalisé_en_secondes>
Notez que définir une valeur élevée à la durée personnalisée entre les lancements peut avoir un impact négatif sur les API qui s'appuient sur les données de session, comme Deep Linking.

Sessions d'arrière-plan pour applications utilitaires

Non disponible pour 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 :

SwiftObjective-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 toute fonction du 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 toute attribution d'installation et de tout enregistrement d’événement. L'utilisation de cette API impacte FORTEMENT votre attribution, votre collecte des données et votre mécanisme de deep linking.

SwiftObjective-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 :

SwiftObjective-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

L'API setAdditionalData est requise pour l'intégration au niveau SDK avec plusieurs plates-formes partenaires externes, dont Segment, Adobe et Urban Airship. Utilisez cette API uniquement si l'article d'intégration de la plate-forme indique spécifiquement que l'API setAdditionalData est requise.
Le code qui suit illustre l'implémentation de setAdditionalData sur iOS pour Objective-C ou Swift

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

Résoudre les URL Deep Link encapsulées

Si vous utilisez les liens OneLink (qui prennent en charge les liens universels) et les encapsulez avec un lien universel tiers, vous pouvez utiliser l'API setResolveDeepLinkURLs pour indiquer au SDK AppsFlyer quels sont les domaines de clic appelant l'application qui doivent être résolus par le SDK et en extraire le lien OneLink sous-jacent. Cela vous permettra de maintenir le deep linking et l'attribution tout en encapsulant le lien OneLink avec un lien universel tiers. Assurez-vous d'appeler cette API avant d'initialiser le SDK.

Objective-CSwift
[AppsFlyerTracker sharedTracker].resolveDeepLinkURLs = @[@"example.com",@"click.example.com"];

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 à mesurer les résultats des 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 : 10 sur 18

Commentaires

0 commentaire

Vous devez vous connecter pour laisser un commentaire.