Điều phối – SDK iOS

Tài liệu này mô tả cách bạn có thể quản lý việc gửi dữ liệu đến Google Analytics bằng Google Analytics SDK dành cho iOS phiên bản 3.

Tổng quan

Dữ liệu thu thập được bằng Google Analytics SDK dành cho iOS được lưu trữ trên máy trước khi được gửi đến một chuỗi riêng đến Google Analytics.

Dữ liệu phải được gửi và nhận muộn nhất vào 4 giờ sáng ngày hôm sau theo múi giờ địa phương của mỗi chế độ xem. Mọi dữ liệu nhận được sau đó sẽ không xuất hiện trong các báo cáo. Ví dụ: nếu một lượt truy cập được đưa vào hàng đợi cục bộ vào lúc 11:59 đêm, thì lượt truy cập đó phải được gửi đi trong vòng 4 giờ trước 3:59 sáng để xuất hiện trong báo cáo. Mặt khác, một lượt truy cập vào hàng đợi lúc 12:00 sáng phải được gửi trong vòng 28 giờ, tức là 3:59 sáng ngày hôm sau để xuất hiện trong báo cáo.

Gửi thư định kỳ

Theo mặc định, cứ 2 phút một lần dữ liệu sẽ được gửi từ SDK Google Analytics dành cho iOS.

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

Việc đặt giá trị âm sẽ tắt chế độ gửi định kỳ, yêu cầu bạn phải sử dụng tính năng gửi thủ công nếu muốn gửi bất kỳ dữ liệu nào đến Google Analytics.

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

Nếu người dùng mất quyền truy cập mạng hoặc thoát khỏi ứng dụng của bạn trong khi vẫn còn các lượt truy cập đang chờ gửi, thì những lượt truy cập đó sẽ được giữ lại trong bộ nhớ cục bộ. Chúng sẽ được gửi vào lần tiếp theo ứng dụng của bạn chạy và điều phối được gọi.

Điều phối thủ công

Để gửi lượt truy cập theo cách thủ công, chẳng hạn như khi bạn biết đài phát của thiết bị đã được dùng để gửi dữ liệu khác:

[[GAI sharedInstance] dispatch];

Gửi thư ở chế độ nền

Cách bật tính năng điều phối ở chế độ nền trên các ứng dụng iOS:

Thêm một thuộc tính cho dispatchHandler

Trong tệp triển khai (AppDelegate.m) của lớp AppDelegate, hãy thêm thuộc tính sau trước @implementation AppDelegate:

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

@implementation AppDelegate
// ...

Triển khai phương thức sendHitsInBackground

Trong lớp AppDelegate, hãy triển khai phương thức sendHitsInBackground để gửi lượt truy cập khi ứng dụng chuyển sang chạy ở chế độ nền:

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

Phương thức dispatchWithCompletionHandler lấy khối hoàn thành làm thông số và gọi khối hoàn thành đó mỗi khi hoàn tất một yêu cầu chứa một hoặc nhiều beacon Google Analytics. Phương thức này trả về một kết quả cho biết liệu có thêm dữ liệu cần gửi hay không và/hoặc liệu yêu cầu gần đây nhất có thành công hay không. Với phương thức này, bạn có thể quản lý các beacon điều phối một cách hiệu quả khi ứng dụng chuyển sang chạy ở chế độ nền.

Ghi đè phương thức applicationDidEnterBackground

Ghi đè phương thức applicationDidEnterBackground trên lớp AppDelegate để gọi phương thức sendHitsInBackground. Phương thức này sẽ gửi lượt truy cập khi ứng dụng chuyển sang chạy ở chế độ nền:

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

Ghi đè phương thức applicationWillEnterForeground

Ghi đè phương thức applicationWillEnterForeground trên lớp AppDelegate để khôi phục khoảng thời gian điều phối. Ví dụ:

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