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

توفّر خدمة "المراسلة عبر السحابة الإلكترونية من Firebase" ثلاث مجموعات من الأدوات لمساعدتك في الحصول على إحصاءات حول تسليم الرسائل:

  • تقارير تسليم الرسائل في وحدة تحكُّم Firebase
  • مقاييس تسليم حزمة تطوير البرامج (SDK) المجمّعة لنظام التشغيل Android من واجهة برمجة تطبيقات بيانات المراسلة عبر السحابة الإلكترونية من Firebase
  • تصدير شامل للبيانات إلى Google BigQuery

تتطلب جميع أدوات إعداد التقارير الموضحة في هذه الصفحة استخدام Google Analytics لكي تعمل. وإذا لم يتم تفعيل "إحصاءات Google" لمشروعك، يمكنك إعداده في علامة تبويب عمليات الدمج ضمن إعدادات مشروع Firebase.

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

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

في علامة التبويب التقارير في وحدة تحكم Firebase، يمكنك عرض البيانات التالية للرسائل التي تم إرسالها إلى حزم تطوير البرامج (SDK) عبر خدمة "المراسلة عبر السحابة الإلكترونية من Firebase" لنظام التشغيل Android أو Apple، بما في ذلك الرسائل التي تم إرسالها عبر منشئ الإشعارات وواجهات برمجة تطبيقات FCM:

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

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

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

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

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

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

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

  • -
  • ~
  • %

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

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

بيانات التسليم المجمعة عبر واجهة برمجة تطبيقات بيانات FCM

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

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

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

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

 {
  "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%.

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

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

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

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

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

النسب المئوية لأداء التسليم

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

تقرِّب ميزة "المراسلة عبر السحابة الإلكترونية من Firebase" عمدًا الأعداد وتستبعدها عندما لا تكون الأعداد كبيرة بما يكفي.

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

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

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

  • الإصدار 20.1.0 من Android أو إصدار أحدث.
  • iOS 8.6.0 أو أحدث
  • الإصدار 9.0.0 أو إصدار أحدث من حزمة تطوير برامج الويب Firebase على الويب

يمكنك الاطّلاع أدناه على تفاصيل حول تفعيل تصدير البيانات لنظامَي التشغيل Android وiOS.

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

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

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

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

      تعرض هذه الصفحة خيارات تصدير خدمة "المراسلة عبر السحابة الإلكترونية من Firebase" لجميع التطبيقات التي تم تفعيل ميزة "المراسلة عبر السحابة الإلكترونية من Firebase" في المشروع.

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

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

عند تفعيل تصدير BigQuery لخدمة "المراسلة عبر السحابة الإلكترونية":

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

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

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

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

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

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

يمكن لأجهزة iOS التي تحتوي على الإصدار 8.6.0 من حزمة تطوير البرامج (SDK) لخدمة FCM أو الإصدارات الأحدث تفعيل تصدير بيانات تسليم الرسائل في تطبيقاتهم. تتيح خدمة "المراسلة عبر السحابة الإلكترونية من Firebase" تصدير بيانات كل من إشعارات التنبيه والخلفية. قبل تفعيل هذه الخيارات، عليك أولاً إنشاء رابط 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 الطابع الزمني يحتوي هذا العمود الزائف على طابع زمني لبداية اليوم الذي تم تحميل البيانات فيه (بالتوقيت العالمي المنسّق (UTC)). في القسم YYYYMMDD، يحتوي هذا العمود الصوري على القيمة TIMESTAMP('YYYY-MM-DD').
event_timestamp الطابع الزمني الطابع الزمني للحدث كما هو مسجّل من الخادم
رقم_المشروع عدد صحيح يحدد رقم المشروع المشروع الذي أرسل الرسالة
message_id سلسلة ويحدِّد معرِّف الرسالة الرسالة. قد لا يكون رقم تعريف الرسالة فريدًا عالميًا في بعض الحالات، ويتم إنشاؤه من رقم تعريف التطبيق والطابع الزمني.
معرّف_المثيل سلسلة المعرّف الفريد للتطبيق الذي يتم إرسال الرسالة إليه (عندما يكون متوفّرًا). ويمكن أن يكون هذا الرقم رقم تعريف مثيل أو رقم تعريف تثبيت Firebase.
نوع_الرسالة سلسلة نوع الرسالة. يمكن أن تكون رسالة إشعار أو رسالة بيانات. يُستخدم الموضوع لتحديد الرسالة الأصلية لموضوع أو حملة، وتكون الرسائل اللاحقة إما إشعارًا أو رسالة بيانات.
منصة sdk_platform سلسلة النظام الأساسي لتطبيق المستلِم
اسم_التطبيق سلسلة اسم الحزمة لتطبيقات Android أو رقم تعريف الحزمة لتطبيقات iOS
مفتاح_التصغير سلسلة يحدد مفتاح التصغير مجموعة من الرسائل التي يمكن تصغيرها. عند عدم اتصال الجهاز، لا يتم وضع سوى الرسالة الأخيرة التي تحتوي على مفتاح تصغير في قائمة الانتظار للتسليم النهائي
الأولوية عدد صحيح أولوية الرسالة. القيمتان الصالحتان هما "عادي" و "مرتفع". على نظام التشغيل iOS، تتوافق هذه مع الأولويات 5 و10 لأسماء نقاط الوصول
Ttl عدد صحيح تحدد هذه المعلمة المدة (بالثواني) التي يجب الاحتفاظ بالرسالة فيها في مساحة تخزين FCM إذا كان الجهاز غير متصل
topic سلسلة اسم الموضوع الذي تم إرسال رسالة إليه (إن أمكن)
معرّف_مُجمَّع عدد صحيح يحدد معرّف البريد المهمل مجموعة من الرسائل ذات الصلة، مثل رسالة معينة يتم إرسالها إلى موضوع ما
حدث سلسلة نوع الحدث. القيم المتاحة:
  • MESSAGE_RECEIVEED: تم استلام الرسالة من خلال خادم "المراسلة عبر السحابة الإلكترونية من Firebase" وكان الطلب صالحًا.
  • MESSAGE_DELIVERED: تم تسليم الرسالة إلى حزمة تطوير البرامج (SDK) لخدمة FCM الخاصة بالتطبيق على الجهاز. لا يتم نشر هذا الحقل تلقائيًا. لتفعيل هذه الميزة، اتّبِع التعليمات الواردة في setDeliveryMetricsExportToBigQuery(boolean).
  • MISSING_REGISTRATIONS: تم رفض الطلب بسبب عدم توفُّر التسجيل
  • UNAUTHORIZED_REGISTRATION: تم رفض الرسالة لأن المرسل غير مصرح له بإرسالها إلى التسجيل؛
  • MESSAGE_RECEIVED_INTERNAL_ERROR: حدث خطأ غير محدد عند معالجة طلب الرسالة،
  • MISMATCH_SENDER_ID: تم رفض طلب إرسال الرسالة بسبب عدم تطابق معرّف المُرسِل الذي يرسل الرسالة ومعرّف المُرسِل لنقطة النهاية.
  • QUOTA_EXCEEDED: تم رفض طلب إرسال رسالة بسبب عدم كفاية الحصة
  • UTF_REGISTRATION: تم رفض طلب إرسال رسالة بسبب تسجيل غير صالح.
  • nofollow_PACKAGE_NAME: تم رفض طلب إرسال رسالة بسبب اسم حزمة غير صالح،
  • CREDIT_APNS_CREDENTIAL: تم رفض طلب إرسال رسالة بسبب شهادة APNS غير صالحة،
  • UTF_PARAMETERS: تم رفض طلب إرسال رسالة بسبب وجود معلمات غير صالحة؛
  • PAYLOAD_TOO_LARGE: تم رفض طلب إرسال رسالة بسبب تجاوز الحد المسموح به لحمولة الرسائل
  • AUTHENTICATION_ERROR: تم رفض طلب إرسال رسالة بسبب خطأ في المصادقة (تحقق من مفتاح واجهة برمجة التطبيقات المستخدم لإرسال الرسالة)
  • CREDIT_TTL: تم رفض طلب إرسال رسالة بسبب مدة بقاء غير صالحة.
تصنيف_إحصاءات سلسلة باستخدام HTTP v1 API، يمكن ضبط تصنيف "الإحصاءات" عند إرسال الرسالة، وذلك لوضع علامة على الرسالة لأغراض متعلقة بالإحصاءات.

ما أهمية البيانات التي يتم تصديرها؟

تقدّم الأقسام التالية أمثلة على طلبات البحث التي يمكنك إجراؤها في BigQuery مقابل بيانات "المراسلة عبر السحابة الإلكترونية من Firebase" التي تم تصديرها.

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

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;