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
. - Implementa el método
sendHitsInBackground
. - Anula el método
applicationDidEnterBackground
. - Anula el método
applicationWillEnterForeground
.
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; }