การจ่ายงาน - iOS SDK

เอกสารนี้จะอธิบายวิธีการจัดการข้อมูล การส่งไปยัง Google Analytics โดยใช้ Google Analytics SDK สำหรับ iOS v3

ภาพรวม

ข้อมูลที่รวบรวมโดยใช้ Google Analytics SDK สำหรับ iOS จะจัดเก็บอยู่ภายในเครื่องก่อนที่จะส่งไปยังเทรดแยกต่างหากไปยัง Google Analytics

ระบบจะส่งและรับข้อมูลภายในเวลา 4.00 น. ของวันถัดไปในเขตเวลาท้องถิ่นของข้อมูลพร็อพเพอร์ตี้แต่ละรายการ ข้อมูลที่ได้รับหลังจากนั้นจะไม่ปรากฏในรายงาน ตัวอย่างเช่น หาก Hit อยู่ในคิวในเครื่องในเวลา 23:59 น. Hit จะต้องส่งภายใน 4 ชั่วโมงภายในเวลา 3:59 น. เพื่อให้ปรากฏในรายงาน ในทางกลับกัน Hit ที่เข้าคิวในเวลา 00: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;

หากผู้ใช้สูญเสียสิทธิ์เข้าถึงเครือข่ายหรือออกจากแอปในขณะที่ยังมี Hit ที่รอการส่งอยู่ Hit เหล่านั้นจะยังคงอยู่ในพื้นที่เก็บข้อมูลในเครื่อง เราจะจัดส่งอุปกรณ์ให้คุณในครั้งต่อไปที่แอปทำงานและมีการเรียกการจัดส่ง

การจ่ายงานด้วยตนเอง

หากต้องการส่ง Hit ด้วยตนเอง เช่น เมื่อคุณทราบว่ามีการใช้วิทยุของอุปกรณ์เพื่อส่งข้อมูลอื่นๆ ไปแล้ว ให้ทำดังนี้

[[GAI sharedInstance] dispatch];

การจ่ายงานในพื้นหลัง

วิธีเปิดใช้การส่งงานในเบื้องหลังในแอป iOS

เพิ่มพร็อพเพอร์ตี้สำหรับ dispatchHandler

ในไฟล์การใช้งาน (AppDelegate.m) ของคลาส AppDelegate ให้เพิ่มพร็อพเพอร์ตี้ต่อไปนี้ก่อน @implementation AppDelegate

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

@implementation AppDelegate
// ...

ใช้เมธอด sendHitsInBackground

ในคลาส AppDelegate ให้ใช้เมธอด sendHitsInBackground เพื่อส่ง Hit เมื่อแอปทำงานอยู่เบื้องหลัง ดังนี้

// 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 อย่างน้อย 1 รายการเสร็จสมบูรณ์ โดยจะแสดงผลลัพธ์ที่ระบุว่ามีข้อมูลที่ต้องส่งเพิ่มเติมหรือไม่ และ/หรือระบุว่าคำขอล่าสุดสำเร็จหรือไม่ วิธีนี้จะทำให้คุณจัดการบีคอนได้อย่างมีประสิทธิภาพเมื่อแอปทำงานในเบื้องหลัง

ลบล้างเมธอด applicationDidEnterBackground

ลบล้างเมธอด applicationDidEnterBackground ในคลาส AppDelegate เพื่อเรียกใช้เมธอด sendHitsInBackground ซึ่งจะส่ง Hit เมื่อแอปเข้าสู่เบื้องหลัง

- (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;
}