Distribution - SDK iOS

Ce document explique comment gérer les données de distribution vers Google Analytics à l'aide du SDK Google Analytics pour iOS v3.

Présentation

Les données collectées à l'aide du SDK Google Analytics pour iOS sont stockées localement avant d'être distribuées sur un thread distinct à Google Analytics.

Les données doivent être envoyées et reçues au plus tard à 4h le jour suivant, dans le fuseau horaire local de chaque vue. Les données reçues à une date ultérieure n'apparaîtront pas dans les rapports. Par exemple, si un appel est mis en file d'attente localement à 23h59, il doit être envoyé dans les quatre heures, avant 3h59, pour apparaître dans les rapports. En revanche, un appel mis en file d'attente à minuit doit être envoyé dans un délai de 28 heures, à 3 h 59 le jour suivant, afin d'apparaître dans les rapports.

Distribution périodique

Par défaut, les données sont envoyées depuis le SDK Google Analytics pour iOS toutes les deux minutes.

// Set the dispatch interval in seconds.
// 2 minutes (120 seconds) is the default value.
[GAI sharedInstance].dispatchInterval = 120;

La définition d'une valeur négative désactive l'envoi périodique. Vous devez donc utiliser l'envoi manuel si vous souhaitez envoyer des données à Google Analytics.

// Disable periodic dispatch by setting dispatch interval to a value less than 1.
[GAI sharedInstance].dispatchInterval = 0;

Si un utilisateur perd l'accès au réseau ou quitte votre application alors qu'il reste des appels en attente d'envoi, ceux-ci sont conservés dans l'espace de stockage local. Ils seront envoyés la prochaine fois que votre application sera en cours d'exécution et que la fonction de distribution sera appelée.

Distribution manuelle

Pour distribuer manuellement les appels, par exemple lorsque vous savez que le signal radio de l'appareil est déjà utilisé pour envoyer d'autres données:

[[GAI sharedInstance] dispatch];

Distribution en arrière-plan

Pour activer l'envoi en arrière-plan dans les applications iOS:

Ajoutez une propriété pour dispatchHandler.

Dans le fichier d'implémentation (AppDelegate.m) de la classe AppDelegate, ajoutez la propriété suivante avant @implementation AppDelegate:

@interface AppDelegate ()
@property(nonatomic, copy) void (^dispatchHandler)(GAIDispatchResult result);
@end

@implementation AppDelegate
// ...

Implémenter la méthode sendHitsInBackground

Dans la classe AppDelegate, implémentez la méthode sendHitsInBackground pour envoyer des appels lorsque l'application passe en arrière-plan:

// This method sends any queued hits when the app enters the background.
- (void)sendHitsInBackground {
  __block BOOL taskExpired = NO;

  __block UIBackgroundTaskIdentifier taskId =
  [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
    taskExpired = YES;
  }];

  if (taskId == UIBackgroundTaskInvalid) {
    return;
  }

  __weak AppDelegate *weakSelf = self;
  self.dispatchHandler = ^(GAIDispatchResult result) {
    // Send hits until no hits are left, a dispatch error occurs, or
    // the background task expires.
    if (result == kGAIDispatchGood && !taskExpired) {
      [[GAI sharedInstance] dispatchWithCompletionHandler:weakSelf.dispatchHandler];
    } else {
      [[UIApplication sharedApplication] endBackgroundTask:taskId];
    }
  };

  [[GAI sharedInstance] dispatchWithCompletionHandler:self.dispatchHandler];
}

La méthode dispatchWithCompletionHandler utilise un bloc d'achèvement comme paramètre et appelle ce bloc d'achèvement chaque fois qu'une requête contenant une ou plusieurs balises Google Analytics est terminée. Elle renvoie un résultat indiquant s'il y a plus de données à envoyer et/ou si la dernière requête a abouti. Cette méthode vous permet de gérer efficacement les balises de distribution lorsque l'application passe en arrière-plan.

Ignorez la méthode applicationDidEnterBackground.

Remplacez la méthode applicationDidEnterBackground sur la classe AppDelegate pour appeler la méthode sendHitsInBackground, qui envoie des appels lorsque l'application passe en arrière-plan:

- (void)applicationDidEnterBackground:(UIApplication *)application {
  [self sendHitsInBackground];
}

Ignorez la méthode applicationWillEnterForeground.

Remplacez la méthode applicationWillEnterForeground sur la classe AppDelegate pour restaurer l'intervalle de distribution. Exemple :

- (void)applicationWillEnterForeground:(UIApplication *)application {
  // Restores the dispatch interval because dispatchWithCompletionHandler
  // has disabled automatic dispatching.
  [GAI sharedInstance].dispatchInterval = 120;
}