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:
- Añadir una propiedad a
dispatchHandler
. - Implementar el método
sendHitsInBackground
. - Anular el método
applicationDidEnterBackground
. - Anular el método
applicationWillEnterForeground
.
Añadir 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; }