الإرسال - حزمة تطوير البرامج (SDK) لنظام التشغيل iOS

يوضّح هذا المستند كيف يمكنك إدارة بيانات الإرسال إلى Google Analytics باستخدام حزمة تطوير البرامج (SDK) لخدمة "إحصاءات Google" لنظام التشغيل iOS.

نظرة عامة

يتم تخزين البيانات التي يتم جمعها باستخدام حزمة تطوير البرامج (SDK) لخدمة "إحصاءات Google" لنظام التشغيل iOS محليًا قبل إرسالها في سلسلة محادثات منفصلة إلى "إحصاءات Google".

يجب إرسال البيانات واستلامها بحلول 4 صباحًا من اليوم التالي، حسب المنطقة الزمنية المحلية لكل ملف شخصي. ولن تظهر في التقارير أي بيانات يتم تلقّيها بعد ذلك التاريخ. على سبيل المثال، إذا كانت النتيجة مُدرَجة في قائمة الانتظار محليًا عند الساعة 11:59 مساءً، يجب إرسالها في غضون 4 ساعات بحلول الساعة 3:59 صباحًا حتى تظهر في التقارير. من ناحية أخرى، يجب إرسال النتيجة المعروضة في قائمة الانتظار عند الساعة 12:00 صباحًا في غضون 28 ساعة، أي 3:59 صباحًا من اليوم التالي، لتظهر في التقارير.

الإرسال الدوري

يتم تلقائيًا إرسال البيانات من حزمة تطوير البرامج (SDK) لخدمة "إحصاءات Google" لنظام التشغيل iOS كل دقيقتين.

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

ويؤدي ضبط قيمة سالبة إلى إيقاف الإرسال الدوري، ما يتطلب منك استخدام الإرسال اليدوي إذا كنت تريد إرسال أي بيانات إلى "إحصاءات Google".

// 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". ويعرض نتيجة تشير إلى ما إذا كان هناك المزيد من البيانات لإرسالها و/أو ما إذا نجح الطلب الأخير. وباستخدام هذه الطريقة، يمكنك إدارة إرسال الإشارات بشكل فعال عندما ينتقل التطبيق إلى الخلفية.

إلغاء طريقة 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;
}