ارسال - iOS SDK

این سند نحوه مدیریت ارسال داده ها به Google Analytics را با استفاده از Google Analytics SDK برای iOS نسخه 3 توضیح می دهد.

بررسی اجمالی

داده‌های جمع‌آوری‌شده با استفاده از Google Analytics SDK برای iOS، قبل از ارسال در یک رشته جداگانه به Google Analytics، به صورت محلی ذخیره می‌شوند.

داده ها باید تا ساعت 4 صبح روز بعد در منطقه زمانی محلی هر نما ارسال و دریافت شوند. هر داده ای که دیرتر از آن دریافت شود در گزارش ها ظاهر نمی شود. به عنوان مثال، اگر یک ضربه به صورت محلی در ساعت 11:59 شب در صف قرار می گیرد، باید ظرف 4 ساعت، تا ساعت 3:59 صبح، ارسال شود تا در گزارش ها ظاهر شود. از طرف دیگر، ضربه ای که در ساعت 12:00 صبح در صف قرار می گیرد، باید ظرف 28 ساعت، یعنی ساعت 3:59 صبح روز بعد، ارسال شود تا در گزارش ها ظاهر شود.

اعزام دوره ای

به‌طور پیش‌فرض، داده‌ها هر ۲ دقیقه از Google Analytics SDK برای iOS ارسال می‌شوند.

// 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 یک بلوک تکمیل را به عنوان پارامتر می گیرد و هر بار که درخواستی حاوی یک یا چند بیکن Google Analytics تکمیل می شود، بلوک تکمیل را فراخوانی می کند. نتیجه ای را برمی گرداند که نشان می دهد آیا داده های بیشتری برای ارسال وجود دارد و/یا آیا آخرین درخواست موفقیت آمیز بوده است. با استفاده از این روش، زمانی که برنامه به پس‌زمینه می‌رود، می‌توانید به طور موثری بیکن‌ها را مدیریت کنید.

روش 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;
}