שליחה – iOS SDK

במאמר הזה נסביר איך לנהל את שליחת הנתונים ל-Google Analytics באמצעות Google Analytics SDK עבור iOS v3.

סקירה

נתונים שנאספים באמצעות Google Analytics SDK ל-iOS מאוחסנים באופן מקומי לפני שהם נשלחים בשרשור נפרד אל Google Analytics.

יש לשלוח ולקבל את הנתונים עד 4:00 ביום המחרת, באזור הזמן המקומי של כל תצוגה מפורטת. נתונים שיתקבלו מאוחר יותר לא יופיעו בדוחות. לדוגמה, אם התאמה נמצאת בתור מקומית בשעה 23:59, יש לשלוח אותה בתוך 4 שעות, עד 3:59, כדי שהיא תופיע בדוחות. מצד שני, היט שנמצא בתור ב-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;

אם משתמש מאבד את הגישה לרשת או סוגר את האפליקציה בזמן שעדיין יש היטים שממתינים לשליחה, האותות האלה נשמרים באחסון המקומי. הם יישלחו בפעם הבאה שהאפליקציה תפעל ובפעם הבאה שתתבצע קריאה.

שליחה ידנית

כדי לשלוח היטים באופן ידני, לדוגמה, כשאתם יודעים שהרדיו של המכשיר כבר משמש לשליחת נתונים אחרים:

[[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 כדי לשלוח היטים כשהאפליקציה עוברת לרקע:

// 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 משתמשת בבלוק השלמה כפרמטר וקוראת לחסימה להשלמה בכל פעם שבקשה שמכילה משואת רשת (beacon) אחת או יותר של Google Analytics הושלמה. היא מחזירה תוצאה שמציינת אם יש עוד נתונים לשליחה ו/או אם הבקשה האחרונה הצליחה. כך אפשר לנהל את השליחה של משׂואות רשת (beacons) ביעילות כשהאפליקציה עוברת לרקע.

שינוי השיטה applicationDidEnterBackground

משנים את השיטה applicationDidEnterBackground במחלקה AppDelegate כדי להפעיל את השיטה sendHitsInBackground, ששולחת היטים כשהאפליקציה עוברת לרקע:

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