Dyspozycje – pakiet SDK na iOS

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ść 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;
}