Диспетчеризация — iOS SDK

В этом документе описывается, как управлять отправкой данных в Google Analytics с помощью Google Analytics SDK для iOS v3.

Обзор

Данные, собранные с помощью Google Analytics SDK для iOS, хранятся локально, а затем отправляются в отдельный поток в Google Analytics.

Данные должны быть отправлены и получены до 4 часов утра следующего дня в местном часовом поясе каждого просмотра. Любые данные, полученные позже этого срока, не будут отображаться в отчетах. Например, если обращение поставлено в очередь локально в 23:59, оно должно быть отправлено в течение 4 часов, до 3:59 утра, чтобы оно появилось в отчетах. С другой стороны, чтобы обращение появилось в отчетах, обращение, поставленное в очередь в 12:00, должно быть отправлено в течение 28 часов, т. е. в 3:59 следующего дня.

Периодическая отправка

По умолчанию данные отправляются из Google Analytics SDK для iOS каждые 2 минуты.

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

Установка отрицательного значения отключит периодическую отправку, и вам придется использовать отправку вручную, если вы хотите отправлять какие-либо данные в Google Analytics.

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

Если пользователь теряет доступ к сети или выходит из вашего приложения, когда еще есть обращения, ожидающие отправки, эти обращения сохраняются в локальном хранилище. Они будут отправлены при следующем запуске вашего приложения и вызове отправки.

Ручная диспетчеризация

Чтобы вручную отправлять обращения, например, если вы знаете, что радиоустройство устройства уже используется для отправки других данных:

[[GAI sharedInstance] dispatch];

Фоновая диспетчеризация

Чтобы включить фоновую диспетчеризацию в приложениях iOS:

Добавьте свойство для dispatchHandler

В файле реализации ( AppDelegate.m ) класса AppDelegate добавьте следующее свойство перед @implementation AppDelegate :

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

@implementation AppDelegate
// ...

Реализуйте метод sendHitsInBackground

В классе AppDelegate реализуйте метод sendHitsInBackground для отправки обращений, когда приложение переходит в фоновый режим:

// 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];
}

Метод dispatchWithCompletionHandler принимает блок завершения в качестве параметра и вызывает этот блок завершения каждый раз, когда завершается запрос, содержащий один или несколько маяков Google Analytics. Он возвращает результат, указывающий, есть ли еще данные для отправки и/или успешен ли последний запрос. С помощью этого метода вы можете эффективно управлять отправкой маяков, когда приложение переходит в фоновый режим.

Переопределить метод applicationDidEnterBackground .

Переопределите метод applicationDidEnterBackground в классе AppDelegate , чтобы вызвать метод sendHitsInBackground , который отправляет обращения, когда приложение переходит в фоновый режим:

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

Переопределить метод applicationWillEnterForeground .

Переопределите метод applicationWillEnterForeground в классе AppDelegate , чтобы восстановить интервал отправки. Например:

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