W tym dokumencie opisujemy, jak zarządzać przesyłaniem danych do Google Analytics za pomocą pakietu SDK Google Analytics na iOS v3.
Przegląd
Dane zebrane za pomocą pakietu SDK Google Analytics na iOS są przechowywane lokalnie, a następnie wysyłane w osobnym wątku do Google Analytics.
Dane należy wysłać i odebrać do 4:00 następnego dnia według lokalnej strefy czasowej każdego widoku. Dane odebrane później nie będą widoczne w raportach. Jeśli np. działanie jest umieszczone w kolejce o godzinie 23:59, musi zostać wysłane w ciągu 4 godzin, do 3:59, by pojawiło się w raportach. Natomiast działanie ustawione w kolejce o godzinie 00:00 musi zostać wysłane w ciągu 28 godzin, o 3:59 następnego dnia, aby dane mogły być uwzględniane w raportach.
Okresowa dostawa
Domyślnie dane są wysyłane z pakietu SDK Google Analytics na iOS co 2 minuty.
// Set the dispatch interval in seconds. // 2 minutes (120 seconds) is the default value. [GAI sharedInstance].dispatchInterval = 120;
Ustawienie wartości ujemnej spowoduje wyłączenie okresowej wysyłki, co będzie wymagało wysyłki ręcznej, jeśli chcesz wysyłać dane do Google Analytics.
// Disable periodic dispatch by setting dispatch interval to a value less than 1. [GAI sharedInstance].dispatchInterval = 0;
Jeśli użytkownik utraci dostęp do sieci lub zamknie aplikację, gdy są jeszcze działania oczekujące na wysłanie, te działania zostaną zachowane w pamięci lokalnej. Zostaną one wysłane przy następnym uruchomieniu aplikacji i wywołaniu metody wysyłania.
Wysyłanie ręczne
Aby ręcznie wysyłać działania, np. gdy wiesz, że radio urządzenia jest już używane do wysyłania innych danych:
[[GAI sharedInstance] dispatch];
Przesyłanie w tle
Aby włączyć wysyłanie w tle w przypadku aplikacji na iOS:
- Dodaj właściwość
dispatchHandler
. - Zaimplementuj metodę
sendHitsInBackground
. -
Zastąp metodę
applicationDidEnterBackground
. - Zastąp metodę
applicationWillEnterForeground
.
Dodaj właściwość dla pola dispatchHandler
W pliku wdrożenia (AppDelegate.m
) klasy AppDelegate
dodaj tę właściwość przed @implementation AppDelegate
:
@interface AppDelegate () @property(nonatomic, copy) void (^dispatchHandler)(GAIDispatchResult result); @end @implementation AppDelegate // ...
Wdróż metodę sendHitsInBackground
W klasie AppDelegate
zaimplementuj metodę sendHitsInBackground
, aby wysyłać działania, gdy aplikacja działa w tle:
// 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]; }
Metoda dispatchWithCompletionHandler
przyjmuje jako parametr blok ukończenia i wywołuje ten blok za każdym razem, gdy zostanie zrealizowane żądanie zawierające co najmniej 1 obraz typu beacon Google Analytics.
Zwraca wynik wskazujący, czy jest więcej danych do wysłania lub czy ostatnie żądanie zakończyło się powodzeniem. Ta metoda pozwala skutecznie zarządzać
wysyłaniem beaconów, gdy aplikacja działa w tle.
Zastąp metodę applicationDidEnterBackground
Zastąp metodę applicationDidEnterBackground
w klasie AppDelegate
, aby wywołać metodę sendHitsInBackground
, która wysyła działania, gdy aplikacja działa w tle:
- (void)applicationDidEnterBackground:(UIApplication *)application { [self sendHitsInBackground]; }
Zastąp metodę applicationWillEnterForeground
Zastąp metodę applicationWillEnterForeground
w klasie AppDelegate
, aby przywrócić interwał wysyłki. Na przykład:
- (void)applicationWillEnterForeground:(UIApplication *)application { // Restores the dispatch interval because dispatchWithCompletionHandler // has disabled automatic dispatching. [GAI sharedInstance].dispatchInterval = 120; }