Pengiriman - iOS SDK

Dokumen ini menjelaskan cara mengelola pengiriman data ke Google Analytics menggunakan Google Analytics SDK untuk iOS v3.

Ringkasan

Data yang dikumpulkan menggunakan Google Analytics SDK untuk iOS disimpan secara lokal sebelum dikirim di thread terpisah ke Google Analytics.

Data harus dikirim dan diterima paling lambat 04.00 di hari berikutnya, dalam zona waktu lokal setiap tampilan. Data apa pun yang diterima setelah tanggal tersebut tidak akan muncul dalam laporan. Misalnya, jika hit dimasukkan ke dalam antrean lokal pada pukul 23.59, hit harus dikirim dalam waktu 4 jam, sebelum pukul 03.59, agar muncul dalam laporan. Di sisi lain, hit dalam antrean pada pukul 00.00 harus dikirim dalam waktu 28 jam, yaitu 03.59 di hari berikutnya agar dapat muncul dalam laporan.

Pengiriman berkala

Secara default, data dikirim dari Google Analytics SDK untuk iOS setiap 2 menit.

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

Menetapkan nilai negatif akan menonaktifkan pengiriman berkala, sehingga Anda harus menggunakan pengiriman manual jika ingin mengirim data apa pun ke Google Analytics.

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

Jika pengguna kehilangan akses jaringan atau keluar dari aplikasi Anda saat masih ada hit yang menunggu dikirim, hit tersebut akan dipertahankan di penyimpanan lokal. Fungsi ini akan dikirim pada saat berikutnya aplikasi Anda berjalan dan pengiriman dipanggil.

Pengiriman manual

Untuk mengirim hit secara manual, misalnya saat Anda mengetahui bahwa radio perangkat sudah digunakan untuk mengirim data lain:

[[GAI sharedInstance] dispatch];

Pengiriman latar belakang

Untuk mengaktifkan pengiriman latar belakang di aplikasi iOS:

Tambahkan properti untuk dispatchHandler

Dalam file implementasi (AppDelegate.m) class AppDelegate, tambahkan properti berikut sebelum @implementation AppDelegate:

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

@implementation AppDelegate
// ...

Mengimplementasikan metode sendHitsInBackground

Di class AppDelegate, implementasikan metode sendHitsInBackground untuk mengirim hit saat aplikasi beralih ke latar belakang:

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

Metode dispatchWithCompletionHandler mengambil blok penyelesaian sebagai parameter dan memanggil pemblokiran penyelesaian setiap kali permintaan yang berisi satu atau beberapa beacon Google Analytics selesai. Metode ini menampilkan hasil yang menunjukkan apakah ada lebih banyak data untuk dikirim dan/atau jika permintaan terakhir berhasil. Dengan metode ini, Anda dapat mengelola pengiriman beacon secara efektif saat aplikasi beralih ke latar belakang.

Ganti metode applicationDidEnterBackground

Ganti metode applicationDidEnterBackground pada class AppDelegate untuk memanggil metode sendHitsInBackground, yang mengirimkan hit saat aplikasi beralih ke latar belakang:

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

Ganti metode applicationWillEnterForeground

Ganti metode applicationWillEnterForeground pada class AppDelegate untuk memulihkan interval pengiriman. Contoh:

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