این سند نحوه مدیریت ارسال داده ها به 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
اضافه کنید . - متد
sendHitsInBackground
را پیاده سازی کنید . - روش
applicationDidEnterBackground
لغو کنید . - روش
applicationWillEnterForeground
را لغو کنید .
یک ویژگی برای 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; }