В этом документе описывается, как управлять отправкой данных в 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
. - Реализовать метод
sendHitsInBackground
. - Переопределить метод
applicationDidEnterBackground
. - Переопределить метод
applicationWillEnterForeground
.
Добавьте свойство для 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; }