Despacho: SDK de iOS

En este documento, se describe cómo puedes administrar el envío de datos a Google Analytics con el SDK de Google Analytics para iOS v3.

Descripción general

Los datos recopilados con el SDK de Google Analytics para iOS se almacenan de forma local antes de que se envíen a un subproceso independiente en Google Analytics.

Los datos se deben enviar y recibir hasta las 4 a.m. del día siguiente, en la zona horaria local de cada vista. Cualquier dato recibido más adelante no aparecerá en los informes. Por ejemplo, si un hit se pone en cola localmente a las 11:59 p.m., se debe enviar en un plazo de 4 horas, a las 3:59 a.m., para que aparezca en los informes. Por otro lado, un hit en cola a las 12:00 a.m. se debe enviar en un plazo de 28 horas, es decir, 3:59 a.m. del día siguiente para que aparezca en los informes.

Envío periódico

De forma predeterminada, los datos se despachan desde el SDK de Google Analytics para iOS cada 2 minutos.

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

Si configuras un valor negativo, se inhabilitará el envío periódico y deberás usar el envío manual si quieres enviar datos a Google Analytics.

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

Si un usuario pierde el acceso a la red o cierra la app mientras aún hay hits que esperan despacharse, esos hits se conservan en el almacenamiento local. Se enviarán la próxima vez que se ejecute tu app y se llame al envío.

Despacho manual

Para despachar hits manualmente, por ejemplo, cuando sabes que la radio del dispositivo ya se está usando para enviar otros datos, haz lo siguiente:

[[GAI sharedInstance] dispatch];

Envío en segundo plano

Para habilitar el envío en segundo plano en apps para iOS, haz lo siguiente:

Agrega una propiedad para dispatchHandler

En el archivo de implementación (AppDelegate.m) de la clase AppDelegate, agrega la siguiente propiedad antes de @implementation AppDelegate:

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

@implementation AppDelegate
// ...

Implementa el método sendHitsInBackground

En la clase AppDelegate, implementa el método sendHitsInBackground para enviar hits cuando la app pasa a segundo plano:

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

El método dispatchWithCompletionHandler toma un bloque de finalización como parámetro y lo llama cada vez que se completa una solicitud que contiene una o más balizas de Google Analytics. Muestra un resultado que indica si hay más datos para enviar o si la última solicitud tuvo éxito. Con este método, puedes administrar el despacho de las balizas de manera eficaz cuando la app pasa a segundo plano.

Anula el método applicationDidEnterBackground

Anula el método applicationDidEnterBackground en la clase AppDelegate para llamar al método sendHitsInBackground, que envía hits cuando la app pasa a segundo plano:

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

Anula el método applicationWillEnterForeground

Anula el método applicationWillEnterForeground en la clase AppDelegate para restablecer el intervalo de envío. Por ejemplo:

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