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 despacharse en un subproceso independiente a Google Analytics.
Los datos deben enviarse y recibirse a más tardar las 4 a.m. del día siguiente, en la zona horaria local de cada vista. Los datos que se reciban después de ese período no aparecerán en los informes. Por ejemplo, si un hit se pone en cola de forma local a las 11:59 p.m., debe despacharse 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. debe enviarse en un plazo de 28 horas, es decir, 3:59 a.m. del día siguiente para que aparezcan en los informes.
Envíos periódicos
De forma predeterminada, los datos se envían 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 estableces un valor negativo, se inhabilitarán los envíos periódicos, por lo que deberás usar el envío manual si deseas 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 sale de tu app mientras aún hay hits en espera de despacho, esos hits persisten en el almacenamiento local. Se enviarán la próxima vez que se ejecute tu app y se llame al despacho.
Envío manual
Para enviar hits de forma manual, por ejemplo, cuando sabes que la radio del dispositivo ya se está usando para enviar otros datos:
[[GAI sharedInstance] dispatch];
Envío en segundo plano
Sigue estos pasos para habilitar el envío en segundo plano en apps para iOS:
- Agrega una propiedad para
dispatchHandler
. - Implementa el método
sendHitsInBackground
. -
Anula el método
applicationDidEnterBackground
. - Anula el método
applicationWillEnterForeground
.
Cómo agregar 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 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
toma un bloque de finalización como parámetro y llama a ese bloque de finalización cada vez que se completa una solicitud que contiene uno o más píxeles contadores de Google Analytics.
Muestra un resultado que indica si hay más datos para enviar o si la última solicitud se realizó correctamente. Con este método, puedes administrar el envío de 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; }