Envio — SDK para iOS

Este documento descreve como você pode gerenciar dados de envio para o Google Analytics por meio do SDK do Google Analytics para iOS v3.

Visão geral

Os dados coletados por meio do SDK do Google Analytics para iOS são armazenados localmente antes de serem enviados em uma sequência diferente ao Google Analytics.

Os dados precisam ser enviados e recebidos até as 4h do dia seguinte, no fuso horário local de cada Vista. Todos os dados recebidos após esse horário não serão exibidos nos relatórios. Por exemplo, se um hit entrar na fila localmente às 23h59, ele precisará ser enviado em até 4 horas, até às 3h59, para ser exibido nos relatórios. Por outro lado, um hit que entrar na fila às 12h precisará ser enviado em até 28 horas, ou seja, até às 3h59 do dia seguinte para ser exibido nos relatórios.

Envios periódicos

Por padrão, os dados são enviados do SDK do Google Analytics para iOS a cada 2 minutos.

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

Definir um valor negativo desativa o envio periódico, o que exige que você use o envio manual se quiser enviar dados ao Google Analytics.

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

Se um usuário perder acesso à rede ou sair do aplicativo enquanto ainda houver hits aguardando o envio, esses hits permanecerão no armazenamento local. Eles serão enviados na próxima vez que seu aplicativo for executado e que o envio for chamado.

Envios manuais

Para enviar hits manualmente, por exemplo, quando você sabe que o rádio do dispositivo já está sendo usado para enviar outros dados:

[[GAI sharedInstance] dispatch];

Envios em segundo plano

Para ativar os envios em segundo plano nos aplicativos para iOS:

Adicione uma propriedade para o dispatchHandler

No arquivo de implementação (AppDelegate.m) da classe AppDelegate, adicione a propriedade a seguir antes de @implementation AppDelegate:

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

@implementation AppDelegate
// ...

Implemente o método sendHitsInBackground

Na classe AppDelegate, implemente o método sendHitsInBackground para enviar hits quando o aplicativo vai para 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];
}

O método dispatchWithCompletionHandler usa um bloco de conclusões como um parâmetro e chama esse bloco de conclusões sempre que uma solicitação que contém um ou mais beacons do Google Analytics é concluída. Ele retorna um resultado que indica se há mais dados a serem enviados e/ou se a última solicitação foi bem-sucedida. Com esse método, você pode gerenciar beacons de envio de maneira eficaz quando o aplicativo vai para segundo plano.

Substitua o método applicationDidEnterBackground

Substitua o método applicationDidEnterBackground na classe AppDelegate para chamar o método sendHitsInBackground, que envia hits quando o aplicativo vai para segundo plano:

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

Substitua o método applicationWillEnterForeground

Substitua o método applicationWillEnterForeground na classe AppDelegate para restaurar o intervalo de envios. Por exemplo:

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