فهم تسليم الرسائل

لتحرّي المشاكل المتعلّقة بفشل تسليم الرسائل المستمر وإصلاحها، استخدِم أداة حلّ المشاكل في FCM واطّلِع على منشور المدونة هذا للتعرّف على الأسباب المختلفة التي قد تؤدي إلى عدم ظهور رسالتك. يمكنك أيضًا الانتقال إلى لوحة بيانات حالة FCM لتحديد ما إذا كان هناك أي انقطاعات حالية في الخدمة تؤثر في FCM.

توفّر خدمة FCM أيضًا ثلاث مجموعات من الأدوات لمساعدتك في الحصول على إحصاءات حول التقييم الشامل لنجاح الرسائل واستراتيجيتها:

  • Firebase تقارير تسليم الرسائل في وحدة التحكّم
  • مقاييس تسليم حِزم تطوير البرامج (SDK) المجمّعة على Android من Firebase Cloud Messaging Data API
  • تصدير البيانات الشامل إلى Google BigQuery

تتطلّب ميزة تصدير البيانات في BigQuery وعلامة التبويب التقارير في وحدة تحكّم Firebase توفّر Google Analytics لكي تعمل. إذا لم يتم تفعيل Google Analytics لمشروعك، يمكنك إعداده في علامة التبويب عمليات الدمج ضمن إعدادات مشروعك على Firebase. لا تتطلّب بيانات التسليم المجمّعة توفّر Google Analytics لكي تعمل.

يُرجى العِلم أنّ إعداد التقارير عن العديد من الإحصاءات الواردة في هذه الصفحة قد يتأخر لمدة تصل إلى 24 ساعة بسبب تجميع بيانات الإحصاءات.

تقارير تسليم الرسائل

في علامة التبويب التقارير في وحدة تحكّم Firebase، يمكنك الاطّلاع على البيانات التالية للرسائل المُرسَلة إلى حِزم تطوير البرامج (SDK) الخاصة بمنصتَي Android أو Apple في "المراسلة عبر السحابة الإلكترونية من Firebase"، بما في ذلك الرسائل المُرسَلة من خلال أداة إنشاء الإشعارات وواجهات برمجة التطبيقات الخاصة بـ "المراسلة عبر السحابة الإلكترونية من Firebase":

  • إرسال: تم وضع رسالة البيانات أو رسالة الإشعار في قائمة الانتظار لتسليمها أو تم تمريرها بنجاح إلى خدمة تابعة لجهة خارجية، مثل APNs، لتسليمها. يُرجى العِلم أنّ إحصاءات "عمليات الإرسال" قد تتأخّر لبضع ساعات. يمكنك الاطّلاع على مدة بقاء الرسالة لمزيد من المعلومات.
  • تم الاستلام (متاحة فقط على أجهزة Android): تم استلام رسالة البيانات أو رسالة الإشعار من خلال التطبيق. تتوفّر هذه البيانات عندما يكون جهاز Android المستلِم مثبّتًا عليه الإصدار 18.0.1 من حزمة تطوير البرامج (SDK) أو إصدار أحدث.FCM
  • مرات الظهور (متاحة فقط لرسائل الإشعارات على أجهزة Android): تم عرض إشعار العرض على الجهاز أثناء عمل التطبيق في الخلفية.
  • عمليات الفتح: فتح المستخدم رسالة الإشعار. يتم تسجيلها فقط للإشعارات التي يتم تلقّيها عندما يكون التطبيق يعمل في الخلفية.

تتوفّر هذه البيانات لجميع الرسائل التي تتضمّن حمولة إشعار وجميع رسائل البيانات المصنّفة. لمزيد من المعلومات عن التصنيفات، راجِع مقالة إضافة تصنيفات إحصائية إلى الرسائل.

عند عرض تقارير الرسائل، يمكنك ضبط نطاق زمني للبيانات المعروضة، مع خيار التصدير إلى ملف CSV. يمكنك أيضًا إجراء فلترة حسب المعايير التالية:

  • النظام الأساسي (iOS أو Android)
  • التطبيق
  • تصنيفات الإحصاءات المخصّصة

إضافة تصنيفات إحصائية إلى الرسائل

يُعدّ تصنيف الرسائل مفيدًا جدًا لإجراء تحليل مخصّص، إذ يتيح لك فلترة إحصاءات التسليم حسب التصنيفات أو مجموعات التصنيفات. يمكنك إضافة تصنيف إلى أي رسالة يتم إرسالها عبر HTTP v1 API من خلال ضبط الحقل fcmOptions.analyticsLabel في عنصر الرسالة أو في الحقلَين AndroidFcmOptions أو ApnsFcmOptions الخاصَين بالنظام الأساسي.

تكون تصنيفات "إحصاءات Google" عبارة عن سلاسل نصية بالتنسيق ^[a-zA-Z0-9-_.~%]{1,50}$. يمكن أن تتضمّن التصنيفات أحرفًا لاتينية صغيرة وكبيرة وأرقامًا والرموز التالية:

  • -
  • ~
  • %

الحد الأقصى للطول هو 50 حرفًا. يمكنك تحديد ما يصل إلى 100 تصنيف فريد في اليوم، ولا يتم تسجيل الرسائل التي تتضمّن تصنيفات تتجاوز هذا الحد.

في علامة التبويب التقارير ضمن Firebase رسائل وحدة التحكّم ، يمكنك البحث في قائمة تضم جميع التصنيفات الحالية وتطبيقها بشكل فردي أو مجمّع لفلترة الإحصاءات المعروضة.

بيانات التسليم المجمّعة باستخدام FCM Data API

تتيح لك واجهة برمجة التطبيقات Data API لخدمة "المراسلة عبر السحابة الإلكترونية من Firebase" استرداد معلومات يمكن أن تساعدك في فهم نتائج طلبات الرسائل الموجّهة إلى تطبيقات Android. توفّر واجهة برمجة التطبيقات بيانات مجمّعة من جميع أجهزة Android التي تم تفعيل ميزة جمع البيانات فيها ضمن أحد المشاريع. ويشمل ذلك تفاصيل حول النسبة المئوية للرسائل التي تم تسليمها بدون تأخير، بالإضافة إلى عدد الرسائل التي تم تأخيرها أو إسقاطها ضمن طبقة النقل في Android. يمكن أن يكشف تقييم هذه البيانات عن مؤشرات عامة في عملية تسليم الرسائل ويساعدك في العثور على طرق فعّالة لتحسين أداء طلبات الإرسال. راجِع المخططات الزمنية للبيانات المجمّعة للحصول على معلومات حول توفّر النطاق الزمني في التقارير.

توفّر واجهة برمجة التطبيقات جميع البيانات المتاحة لتطبيق معيّن. اطّلِع على مستندات مرجع واجهة برمجة التطبيقات.

كيف يتم تقسيم البيانات؟

يتم تقسيم بيانات التسليم حسب التطبيق والتاريخ وتصنيف الإحصاءات. سيؤدي طلب إلى واجهة برمجة التطبيقات إلى عرض بيانات لكل مجموعة من التاريخ والتطبيق وتصنيف الإحصاءات. على سبيل المثال، سيبدو عنصر androidDeliveryData JSON واحد على النحو التالي:

 {
  "appId": "1:23456789:android:a93a5mb1234efe56",
  "date": {
    "year": 2021,
    "month": 1,
    "day": 1
  },
  "analyticsLabel": "foo",
  "data": {
    "countMessagesAccepted": "314159",
    "messageOutcomePercents": {
      "delivered": 71,
      "pending": 15
    },
   "deliveryPerformancePercents": {
      "deliveredNoDelay": 45,
      "delayedDeviceOffline": 11
    }
  }

كيفية تفسير المقاييس

توضّح بيانات التسليم نسبة الرسائل التي تتوافق مع كل مقياس من المقاييس التالية. من المحتمل أن تتوافق رسالة واحدة مع مقاييس متعددة. بسبب القيود المفروضة على طريقة جمع البيانات ومستوى التفصيل الذي جمعنا فيه المقاييس، لا يتم تمثيل بعض نتائج الرسائل في المقاييس على الإطلاق، وبالتالي لن تصل نسبة المجموعات أدناه إلى %100.

Count Messages Accepted

إنّ العدد الوحيد المضمّن في مجموعة البيانات هو عدد الرسائل التي قبلتها خدمة "المراسلة عبر السحابة الإلكترونية من Firebase" لتسليمها إلى أجهزة Android. تستخدِم جميع النسب المئوية هذه القيمة كمقام. يُرجى العِلم أنّ هذا العدد لن يتضمّن الرسائل المستهدِفة للمستخدمين الذين أوقفوا جمع معلومات الاستخدام والتشخيص على أجهزتهم.

النسب المئوية لنتائج الرسائل

توفّر الحقول المضمّنة في الكائن MessageOutcomePercents معلومات عن نتائج طلبات الرسائل. جميع الفئات لا تتداخل مع بعضها. يمكنه الإجابة عن أسئلة مثل "هل يتم تسليم رسائلي؟" و "ما هو سبب عدم تسليم الرسائل؟".

على سبيل المثال، قد تشير القيمة المرتفعة للحقل droppedTooManyPendingMessages إلى أنّ مثيلات التطبيق تتلقّى عددًا من الرسائل غير القابلة للتصغير يتجاوز الحدّ الأقصى البالغ 100 رسالة معلّقة في FCM. للتخفيف من حدة هذه المشكلة، تأكَّد من أنّ تطبيقك يتعامل مع طلبات onDeletedMessages، وفكِّر في إرسال رسائل قابلة للتصغير. وبالمثل، قد تشير النسب المئوية المرتفعة لـ droppedDeviceInactive إلى ضرورة تعديل رموز التسجيل على الخادم، وإزالة الرموز القديمة وإلغاء اشتراكها في المواضيع. يمكنك الاطّلاع على إدارة رموز التسجيل FCM لمعرفة أفضل الممارسات في هذا المجال.

نسب أداء التسليم

تقدّم الحقول في العنصر DeliveryPerformancePercents معلومات عن الرسائل التي تم تسليمها بنجاح. يمكنه الإجابة عن أسئلة مثل "هل تأخّرت رسائلي؟" و"لماذا تتأخّر الرسائل؟". على سبيل المثال، تشير القيمة المرتفعة لـ delayedMessageThrottled بوضوح إلى أنّك تتجاوز الحدود القصوى لكل جهاز، ويجب تعديل معدّل إرسال الرسائل.

النسب المئوية لإحصاءات الرسائل

يوفّر هذا العنصر معلومات إضافية عن جميع عمليات إرسال الرسائل. يعبّر الحقل priorityLowered عن النسبة المئوية للرسائل المقبولة التي تم تخفيض أولويتها من HIGH إلى NORMAL. إذا كانت هذه القيمة مرتفعة، حاوِل إرسال عدد أقل من الرسائل ذات الأولوية العالية أو تأكَّد من عرض إشعار دائمًا عند إرسال رسالة ذات أولوية عالية. مزيد من المعلومات حول أولوية الرسائل

كيف تختلف هذه البيانات عن البيانات التي يتم تصديرها إلى BigQuery؟

توفّر خدمة BigQuery Export سجلّات الرسائل الفردية حول قبول الرسائل من خلال الخلفية الإدارية لخدمة FCM وتسليم الرسائل في حزمة SDK على الجهاز (الخطوتان 2 و4 من بنية FCM). هذه البيانات مفيدة لضمان قبول الرسائل الفردية وتسليمها. يمكنك الاطّلاع على مزيد من المعلومات حول تصدير بيانات BigQuery في القسم التالي.

في المقابل، توفّر واجهة برمجة التطبيقات Data API لخدمة المراسلة عبر السحابة الإلكترونية من Firebase تفاصيل مجمّعة حول ما يحدث تحديدًا في طبقة النقل على Android (أو الخطوة 3 من بنية FCM). توفّر هذه البيانات تحديدًا إحصاءات حول عملية تسليم الرسائل من الخلفيات الإدارية لخدمة FCM إلى حزمة تطوير البرامج (SDK) لنظام التشغيل Android. وهي مفيدة بشكل خاص لعرض المؤشرات التي توضّح سبب تأخّر الرسائل أو عدم تسليمها أثناء عملية النقل هذه.

في بعض الحالات، من المحتمل ألا تتطابق مجموعتا البيانات بدقة للأسباب التالية:

  • لا تتضمّن المقاييس المجمَّعة سوى عيّنة من جميع الرسائل
  • يتم تقريب المقاييس المجمَّعة
  • لا نعرض المقاييس التي تقلّ عن حدّ الخصوصية
  • بعض نتائج الرسائل غير متوفّرة بسبب التحسينات التي أجريناها على طريقة إدارة عدد الزيارات الكبير.

قيود واجهة برمجة التطبيقات

المخططات الزمنية للبيانات المجمّعة

ستعرض واجهة برمجة التطبيقات بيانات سابقة لمدّة 7 أيام، ولكن سيتم تأخير البيانات التي تعرضها هذه الواجهة لمدة تصل إلى 5 أيام. على سبيل المثال، في 20 يناير، ستتوفّر البيانات الخاصة بالفترة من 9 يناير إلى 15 يناير، ولكن لن تتوفّر البيانات الخاصة بالفترة من 16 يناير أو بعد ذلك. بالإضافة إلى ذلك، يتم تقديم البيانات بأقصى جهد ممكن. في حال حدوث انقطاع في البيانات، سيعمل FCM على إصلاح المشكلة في المستقبل ولن يعيد ملء البيانات بعد إصلاحها. في حالات الانقطاع الأكبر، قد لا تتوفّر البيانات لمدة أسبوع أو أكثر.

تغطية البيانات

تهدف المقاييس التي توفّرها واجهة برمجة التطبيقات Data API الخاصة بخدمة "المراسلة عبر السحابة الإلكترونية من Firebase" إلى تقديم إحصاءات حول المؤشرات العامة لعملية تسليم الرسائل. ومع ذلك، لا تغطي هذه الرسائل جميع سيناريوهات الرسائل بنسبة% 100. السيناريوهات التالية هي نتائج معروفة لا تنعكس في المقاييس.

الرسائل منتهية الصلاحية

إذا انتهت صلاحية مدة البقاء (TTL) بعد نهاية تاريخ السجلّ المحدّد، لن يتم احتساب الرسالة على أنّها droppedTtlExpired في هذا التاريخ.

الرسائل إلى الأجهزة غير النشطة

قد تظهر الرسائل المُرسَلة إلى الأجهزة غير النشطة في مجموعة البيانات أو لا تظهر، وذلك حسب مسار البيانات الذي تسلكه. قد يؤدي ذلك إلى بعض الأخطاء في احتساب القيم في الحقلين droppedDeviceInactive وpending.

الرسائل إلى الأجهزة التي تتضمّن إعدادات مفضّلة معيّنة للمستخدم

لن يتم تضمين رسائل المستخدمين الذين أوقفوا خيار جمع معلومات الاستخدام والتشخيص على أجهزتهم في عملية الإحصاء، وذلك بما يتوافق مع إعداداتهم المفضّلة.

التقريب والحدود الدنيا

تعمل خدمة FCM على تقريب الأعداد واستبعادها عمدًا عندما لا تكون الكميات كبيرة بما يكفي.

تصدير البيانات في BigQuery

يمكنك تصدير بيانات الرسائل إلى BigQuery لإجراء المزيد من التحليلات. تتيح لك BigQuery تحليل البيانات باستخدام لغة SQL في BigQuery، أو تصديرها إلى مقدّم خدمة سحابية آخر، أو استخدام البيانات لنماذج تعلُّم الآلة المخصّصة. يتضمّن التصدير إلى BigQuery جميع البيانات المتاحة للرسائل، بغض النظر عن نوع الرسالة أو ما إذا تم إرسال الرسالة عبر واجهة برمجة التطبيقات أو أداة إنشاء الإشعارات.

بالنسبة إلى الرسائل المُرسَلة إلى الأجهزة التي تعمل بإصدارات FCM SDK الأدنى التالية، يتوفّر لك خيار إضافي يتيح تصدير بيانات تسليم الرسائل لتطبيقك:

  • الإصدار 20.1.0 من نظام التشغيل Android أو إصدار أحدث
  • ‫iOS 8.6.0 أو إصدار أحدث
  • الإصدار 9.0.0 أو إصدار أحدث من حزمة تطوير البرامج (SDK) على الإنترنت لبرنامج Firebase

يمكنك الاطّلاع أدناه على تفاصيل حول تفعيل ميزة تصدير البيانات على أجهزة Android و iOS.

للبدء، اربط مشروعك بأداة BigQuery باتّباع الخطوات التالية:

  1. اختَر أحد الخيارات التالية:

    • افتح أداة إنشاء الإشعارات، ثم انقر على الوصول إلى BigQuery في أسفل الصفحة.

    • من صفحة عمليات الدمج في وحدة تحكّم Firebase، انقر على ربط في بطاقة BigQuery.

      تعرض هذه الصفحة خيارات التصدير FCM لجميع التطبيقات المفعّلة التي تتضمّن FCM في المشروع.

  2. اتّبِع التعليمات الظاهرة على الشاشة لتفعيل BigQuery.

يمكنك الاطّلاع على مقالة ربط Firebase بأداة BigQuery للحصول على مزيد من المعلومات.

عند تفعيل تصدير BigQuery إلى Cloud Messaging:

  • تُصدِّر Firebase بياناتك إلى BigQuery. يُرجى العِلم أنّ عملية نشر البيانات الأوّلية للتصدير قد تستغرق مدة تصل إلى 48 ساعة حتى تكتمل.

  • بعد إنشاء مجموعة البيانات، لا يمكن تغيير الموقع الجغرافي، ولكن يمكنك نسخ مجموعة البيانات إلى موقع جغرافي آخر أو نقلها (إعادة إنشائها) يدويًا في موقع جغرافي آخر. لمزيد من المعلومات، يُرجى الاطّلاع على تغيير موقع مجموعة البيانات.

  • يُعدّ Firebase عمليات مزامنة منتظمة لبياناتك من مشروعك على Firebase إلى BigQuery. تبدأ عمليات التصدير اليومية هذه في الساعة 4:00 صباحًا بتوقيت المحيط الهادئ وتنتهي عادةً خلال 24 ساعة.

  • يتم تلقائيًا ربط جميع التطبيقات الموجودة ضمن مشروعك بـ BigQuery، وبالنسبة إلى أية تطبيقات تتم إضافتها إلى المشروع لاحقًا، يتم أيضًا ربطها تلقائيًا بـ BigQuery. يمكنك إدارة عمليات اختيار التطبيقات التي ترسل البيانات إلى BigQuery.

لإيقاف تصدير BigQuery، ألغِ ربط مشروعك في وحدة تحكّم Firebase.

تفعيل تصدير بيانات تسليم الرسائل

يمكن لأجهزة iOS التي تعمل بالإصدار 8.6.0 أو الإصدارات الأحدث من حزمة تطوير البرامج (SDK) FCM تفعيل تصدير بيانات تسليم الرسائل في التطبيق. FCM تتيح تصدير البيانات لكلّ من الإشعارات التنبيهية وإشعارات الخلفية. قبل تفعيل هذه الخيارات، عليك أولاً إنشاء رابط FCM-BiqQuery لمشروعك كما هو موضّح في تصدير بيانات BigQuery.

تفعيل تصدير بيانات التسليم لإشعارات التنبيه

بما أنّه لا يمكن إلا لإشعارات التنبيهات تشغيل إضافات تطبيق خدمة الإشعارات، يجب إضافة إضافة خدمة إشعارات إلى تطبيقك واستدعاء واجهة برمجة التطبيقات هذه داخل إضافة خدمة لتفعيل تتبُّع الرسائل المعروضة. يمكنك الاطّلاع على مستندات Apple حول تعديل المحتوى في الإشعارات التي تم تسليمها حديثًا.

يجب إجراء المكالمة التالية لكل إشعار يتم تلقّيه:

Swift

// For alert notifications, call the API inside the service extension:
class NotificationService: UNNotificationServiceExtension {
  override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
  Messaging.extensionHelper()
      .exportDeliveryMetricsToBigQuery(withMessageInfo:request.content.userInfo)
  }
}

Objective-C

// For alert notifications, call the API inside the service extension:
@implementation NotificationService
- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request
                   withContentHandler:(void (^)(UNNotificationContent *_Nonnull))contentHandler {
  [[FIRMessaging extensionHelper] exportDeliveryMetricsToBigQueryWithMessageInfo:request.content.userInfo];
}
@end

إذا كنت بصدد إنشاء طلبات إرسال باستخدام HTTP v1 API، احرص على تحديد mutable-content = 1 في عنصر الحمولة.

تفعيل تصدير بيانات التسليم للإشعارات التي تظهر في الخلفية

بالنسبة إلى الرسائل التي يتم تلقّيها في الخلفية عندما يكون التطبيق في المقدّمة أو الخلفية، يمكنك طلب البيانات من واجهة برمجة التطبيقات الخاصة بتصدير البيانات داخل معالج رسائل البيانات في التطبيق الرئيسي. يجب إجراء هذه المكالمة لكل إشعار يتم تلقّيه:

Swift

// For background notifications, call the API inside the UIApplicationDelegate or NSApplicationDelegate method:
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any]) {
  Messaging.extensionHelper().exportDeliveryMetricsToBigQuery(withMessageInfo:userInfo)
}

Objective-C

// For background notifications, call the API inside the UIApplicationDelegate or NSApplicationDelegate method:
@implementation AppDelegate
- (void)application:(UIApplication *)application
    didReceiveRemoteNotification:(NSDictionary *)userInfo
          fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
  [[FIRMessaging extensionHelper] exportDeliveryMetricsToBigQueryWithMessageInfo:userInfo];
}
@end

ما هي البيانات التي يتم تصديرها إلى BigQuery؟

يُرجى العِلم أنّ استهداف الرموز المميزة القديمة أو عمليات التسجيل غير النشطة قد يؤدي إلى تضخيم بعض هذه الإحصاءات.

مخطط الجدول الذي تم تصديره هو:

_PARTITIONTIME الطابع الزمني يحتوي هذا العمود الزائف على طابع زمني لبداية اليوم (بتوقيت غرينتش) الذي تم تحميل البيانات فيه. بالنسبة إلى قسم YYYYMMDD، يحتوي هذا العمود الزائف على القيمة TIMESTAMP('YYYY-MM-DD').
event_timestamp الطابع الزمني الطابع الزمني للحدث كما سجّله الخادم
project_number عدد صحيح يحدّد رقم المشروع المشروع الذي أرسل الرسالة
message_id سلسلة يحدّد معرّف الرسالة رسالة معيّنة. قد لا يكون معرّف الرسالة فريدًا على مستوى العالم في بعض الحالات، وذلك لأنّه يتم إنشاؤه من معرّف التطبيق والطابع الزمني.
instance_id سلسلة المعرّف الفريد للتطبيق الذي تم إرسال الرسالة إليه (عند توفّره) يمكن أن يكون معرّفًا للمثيل أو معرّفًا لتثبيت Firebase.
message_type سلسلة نوع الرسالة يمكن أن تكون رسالة إشعار أو رسالة بيانات. يُستخدَم الموضوع لتحديد الرسالة الأصلية لموضوع أو إرسال حملة، وتكون الرسائل اللاحقة إما إشعارًا أو رسالة بيانات.
sdk_platform سلسلة النظام الأساسي لتطبيق المستلِم
app_name سلسلة اسم الحزمة لتطبيقات Android أو رقم تعريف الحزمة لتطبيقات iOS
collapse_key سلسلة يحدّد مفتاح التصغير مجموعة من الرسائل التي يمكن تصغيرها. عندما لا يكون الجهاز متصلاً، يتم وضع آخر رسالة تتضمّن مفتاح دمج معيّن في قائمة الانتظار لتسليمها في النهاية.
الأولوية عدد صحيح أولوية الرسالة القيم الصالحة هي "عادية" و "عالية". على أجهزة iOS، تتوافق هذه القيم مع الأولوية 5 والأولوية 10 في خدمة APNs.
ttl عدد صحيح تحدّد هذه المَعلمة المدة (بالثواني) التي يجب الاحتفاظ فيها بالرسالة في مساحة تخزين FCM إذا كان الجهاز غير متصل بالإنترنت.
موضوع سلسلة اسم الموضوع الذي تم إرسال رسالة إليه (عند الاقتضاء)
bulk_id عدد صحيح يحدّد رقم التعريف المجمّع مجموعة من الرسائل ذات الصلة، مثل رسالة معيّنة تم إرسالها إلى موضوع معيّن.
حدث سلسلة تمثّل هذه السمة نوع الفعالية. القيم المحتمَلة هي:
  • MESSAGE_ACCEPTED: تلقّى خادم FCM الرسالة والطلب صالح.
  • MESSAGE_DELIVERED: تم تسليم الرسالة إلى حزمة تطوير البرامج (SDK) الخاصة بخدمة "المراسلة عبر السحابة الإلكترونية من Firebase" في التطبيق على الجهاز. لا يتم نشر هذا الحقل تلقائيًا. لتفعيل هذه الميزة، اتّبِع التعليمات الواردة في setDeliveryMetricsExportToBigQuery(boolean).
  • MISSING_REGISTRATIONS: تم رفض الطلب بسبب عدم توفّر تسجيل.
  • UNAUTHORIZED_REGISTRATION: تم رفض الرسالة لأنّ المُرسِل غير مصرّح له بالإرسال إلى التسجيل.
  • MESSAGE_RECEIVED_INTERNAL_ERROR: حدث خطأ غير محدّد أثناء معالجة طلب الرسالة.
  • MISMATCH_SENDER_ID: تم رفض طلب إرسال رسالة بسبب عدم تطابق بين معرّف المُرسِل الذي أرسل الرسالة والمعرّف المحدّد لنقطة النهاية.
  • QUOTA_EXCEEDED: تم رفض طلب إرسال رسالة بسبب عدم توفّر حصة كافية.
  • INVALID_REGISTRATION: تم رفض طلب إرسال رسالة بسبب تسجيل غير صالح.
  • INVALID_PACKAGE_NAME: تم رفض طلب إرسال رسالة بسبب اسم حزمة غير صالح.
  • INVALID_APNS_CREDENTIAL: تم رفض طلب إرسال رسالة بسبب شهادة APNS غير صالحة.
  • INVALID_PARAMETERS: تم رفض طلب إرسال رسالة بسبب مَعلمات غير صالحة.
  • PAYLOAD_TOO_LARGE: تم رفض طلب إرسال رسالة لأنّ حجم الحمولة أكبر من الحدّ المسموح به.
  • ‫AUTHENTICATION_ERROR: تم رفض طلب إرسال رسالة بسبب حدوث خطأ في المصادقة (يُرجى التحقّق من مفتاح واجهة برمجة التطبيقات المستخدَم لإرسال الرسالة).
  • INVALID_TTL: تم رفض طلب إرسال رسالة بسبب قيمة TTL غير صالحة.
analytics_label سلسلة باستخدام HTTP v1 API، يمكن ضبط تصنيف الإحصاءات عند إرسال الرسالة، وذلك لتحديد الرسالة لأغراض إحصائية.

ما هي الإجراءات التي يمكنك اتّخاذها بشأن البيانات التي تم تصديرها؟

تقدّم الأقسام التالية أمثلة على طلبات البحث التي يمكنك تنفيذها في BigQuery مقابل بيانات FCM التي تم تصديرها.

عدد الرسائل المُرسَلة حسب التطبيق

SELECT app_name, COUNT(1)
FROM `project ID.firebase_messaging.data`
WHERE
  _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
  AND event = 'MESSAGE_ACCEPTED'
  AND message_id != ''
GROUP BY 1;

عدد مثيلات التطبيق الفريدة التي تستهدفها الرسائل

SELECT COUNT(DISTINCT instance_id)
FROM `project ID.firebase_messaging.data`
WHERE
  _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
  AND event = 'MESSAGE_ACCEPTED';

عدد رسائل الإشعارات التي تم إرسالها

SELECT COUNT(1)
FROM `project ID.firebase_messaging.data`
WHERE
  _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
  AND event = 'MESSAGE_ACCEPTED'
  AND message_type = 'DISPLAY_NOTIFICATION';

عدد رسائل البيانات المُرسَلة

SELECT COUNT(1)
FROM `project ID.firebase_messaging.data`
WHERE
  _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
  AND event = 'MESSAGE_ACCEPTED'
  AND message_type = 'DATA_MESSAGE';

عدد الرسائل المُرسَلة إلى موضوع أو حملة

SELECT COUNT(1)
FROM `project ID.firebase_messaging.data`
WHERE
  _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
  AND event = 'MESSAGE_ACCEPTED'
  AND bulk_id = your bulk id AND message_id != '';

لتتبُّع أحداث رسالة تم إرسالها إلى موضوع معيّن، عدِّل هذا الطلب لاستبدال AND message_id != '' بـ AND message_id = <your message id>;.

احتساب مدة التوزيع على نطاق واسع لموضوع أو حملة معيّنة

وقت بدء التوزيع هو وقت تلقّي الطلب الأصلي، ووقت الانتهاء هو وقت إنشاء آخر رسالة فردية تستهدف مثيلاً واحدًا.

SELECT
  TIMESTAMP_DIFF(
    end_timestamp, start_timestamp, MILLISECOND
  ) AS fanout_duration_ms,
  end_timestamp,
  start_timestamp
FROM (
    SELECT MAX(event_timestamp) AS end_timestamp
    FROM `project ID.firebase_messaging.data`
    WHERE
      _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
      AND event = 'MESSAGE_ACCEPTED'
      AND bulk_id = your bulk id
  ) sent
  CROSS JOIN (
    SELECT event_timestamp AS start_timestamp
    FROM `project ID.firebase_messaging.data`
    WHERE
      _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
      AND event = 'MESSAGE_ACCEPTED'
      AND bulk_id = your bulk id
      AND message_type = 'TOPIC'
  ) initial_message;

النسبة المئوية لعدد الرسائل التي تم تسليمها

SELECT
  messages_sent,
  messages_delivered,
  messages_delivered / messages_sent * 100 AS percent_delivered
FROM (
    SELECT COUNT(DISTINCT CONCAT(message_id, instance_id)) AS messages_sent
    FROM `project ID.firebase_messaging.data`
    WHERE
      _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
      AND event = 'MESSAGE_ACCEPTED'
  ) sent
  CROSS JOIN (
    SELECT COUNT(DISTINCT CONCAT(message_id, instance_id)) AS messages_delivered
    FROM `project ID.firebase_messaging.data`
    WHERE
      _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
      AND (event = 'MESSAGE_DELIVERED'
      AND message_id
      IN (
        SELECT message_id FROM `project ID.firebase_messaging.data`
        WHERE
          _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
          AND event = 'MESSAGE_ACCEPTED'
        GROUP BY 1
      )
  ) delivered;

تتبُّع جميع الأحداث لمعرّف رسالة ومعرّف مثيل معيّنَين

SELECT *
FROM `project ID.firebase_messaging.data`
WHERE
    _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
    AND message_id = 'your message id'
    AND instance_id = 'your instance id'
ORDER BY event_timestamp;

احتساب وقت الاستجابة لمعرّف رسالة ومعرّف مثيل معيّنَين

SELECT
  TIMESTAMP_DIFF(
    MAX(delivered_time), MIN(accepted_time), MILLISECOND
  ) AS latency_ms
FROM (
    SELECT event_timestamp AS accepted_time
    FROM `project ID.firebase_messaging.data`
    WHERE
      _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
      AND message_id = 'your message id'
      AND instance_id = 'your instance id'
      AND event = 'MESSAGE_ACCEPTED'
  ) sent
  CROSS JOIN (
    SELECT event_timestamp AS delivered_time
    FROM `project ID.firebase_messaging.data`
    WHERE
      _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD') AND
      message_id = 'your message id' AND instance_id = 'your instance id'
      AND (event = 'MESSAGE_DELIVERED'
  ) delivered;