Отправка данных: SDK для iOS

Этот документ посвящен отправке данных в Google Analytics с помощью SDK Google Analytics для iOS версии 3.

Обзор

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

Данные должны быть отправлены и получены до 4:00 следующего дня по часовому поясу, установленному в представлении. Информация, поступившая позже, не будет занесена в отчеты. Например, если обращение было поставлено в очередь в 23:59, то оно должно быть доставлено в течение 4 часов, то есть до 4: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;

Периодическую отправку можно отключить, указав отрицательное значение. В этом случае вам нужно будет отправлять данные вручную.

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