Envío: SDK para iOS

En este documento se describe cómo administrar el envío de datos a Google Analytics con la versión 3 del SDK de Google Analytics para iOS.

Descripción general

Los datos recopilados con el SDK de Google Analytics para iOS se guardan en el dispositivo antes de enviarlos a Google Analytics en un subproceso independiente.

Los datos se deben enviar y recibir antes de las 4 de la madrugada del día siguiente, en la zona horaria local de cada vista. Los datos que se reciban más tarde no se mostrarán en los informes. Por ejemplo, si se pone en cola un hit en el dispositivo a las 23:59, se debe enviar en un plazo de cuatro horas, antes de las 3:59 de la madrugada, para que aparezca en los informes. Por otro lado, si se pone en cola un hit a medianoche, se debe enviar antes de 28 horas, es decir, antes de las 3:59 del día siguiente, para que se muestre en los informes.

Envío periódico

De forma predeterminada, los datos se envían desde el SDK de Google Analytics para iOS cada dos minutos.

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

Si se configura un valor negativo, se inhabilita el envío periódico, de modo que si quieres enviar los datos a Google Analytics tienes que utilizar el envío manual.

// 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 aplicación mientras todavía tiene hits pendientes de envío, los hits se conservan en el almacenamiento local. Se envían la siguiente vez que la aplicación se ejecuta y se activa un envío.

Envío manual

Para enviar los hits manualmente, por ejemplo, si sabes que la radio del dispositivo ya se utiliza para enviar otros datos:

[[GAI sharedInstance] dispatch];

Envío en segundo plano

Para habilitar el envío en segundo plano en las aplicaciones para iOS se debe hacer lo siguiente:

Agregar una propiedad a dispatchHandler

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

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

@implementation AppDelegate
// ...

Implementar el método sendHitsInBackground

En la clase AppDelegate, implementa el método sendHitsInBackground para enviar hits cuando la aplicación pase 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 acepta un bloque de realización como parámetro y llama a dicho bloque cada vez que se completa una solicitud que contiene uno o varios beacons de Google Analytics. Devuelve un resultado que indica si hay más datos para enviar o si la última solicitud se ha realizado correctamente. Con este método, puedes administrar el envío de beacons de un modo eficaz cuando la aplicación pasa a segundo plano.

Anular el método applicationDidEnterBackground

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

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

Anular el método applicationWillEnterForeground

Anula el método applicationWillEnterForeground en la clase AppDelegate para restaurar 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;
}