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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • -
  • ~
  • %

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

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

بيانات التسليم المجمعة عبر FCM 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 رسالة في انتظار المراجعة FCM للحدّ من هذه المشاكل، تأكَّد من أنّ تطبيقك يتعامل مع الطلبات onDeletedMessages، وننصحك بإرسال رسائل قابلة للتصغير. وبالمثل، فإن النسب المئوية العالية قد يكون droppedDeviceInactive إشارة إلى تعديل الرموز المميّزة للتسجيل على الخادم، وإزالة الرموز المميزة القديمة وإلغاء اشتراكها من المواضيع. عرض إدارة رموز التسجيل المميَّزة FCM لمعرفة أفضل الممارسات في هذا المجال

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

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

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

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

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

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

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

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

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

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

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

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

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

تهدف المقاييس التي توفّرها واجهة برمجة تطبيقات بيانات المراسلة عبر السحابة الإلكترونية من Firebase إلى ما يلي: وتوفر نظرة ثاقبة للاتجاهات الواسعة لتسليم الرسائل. ومع ذلك، لا تفعل توفير تغطية كاملة لجميع سيناريوهات الرسائل. في ما يلي السيناريوهات التالية والنتائج المعروفة التي لا تنعكس في المقاييس.

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

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

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

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

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

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

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

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

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

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

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

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

يُرجى الاطّلاع أدناه على تفاصيل حول تفعيل تصدير البيانات للنطاق. Android و iOS:

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

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

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

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

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

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

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

عند تفعيل عملية تصدير BigQuery لـ "Cloud Messaging":

لإيقاف عملية تصدير 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 الطابع الزمني الطابع الزمني للحدث كما هو مسجّل من الخادم
رقم_المشروع عدد صحيح يحدد رقم المشروع المشروع الذي أرسل الرسالة
message_id سلسلة ويحدِّد معرِّف الرسالة الرسالة. تم إنشاء القيم من رقم تعريف التطبيق طابع زمني، قد لا يكون معرِّف الرسالة فريدًا في بعض الحالات عالميًا.
معرّف_المثيل سلسلة المعرّف الفريد للتطبيق الذي يتم إرسال الرسالة إليه (عندما يكون متوفّرًا). يمكن أن تكون رقم تعريف مثيل أو معرّف تثبيت Firebase.
نوع_الرسالة سلسلة نوع الرسالة. يمكن أن تكون رسالة إشعار أو رسالة بيانات. موضوع يُستخدم لتحديد الرسالة الأصلية لموضوع أو إرسال حملة؛ تكون الرسائل اللاحقة إما إعلامًا أو رسالة بيانات.
منصة sdk_platform سلسلة النظام الأساسي لتطبيق المستلِم
اسم_التطبيق سلسلة اسم الحزمة لتطبيقات Android أو رقم تعريف الحزمة لتطبيقات iOS
مفتاح_التصغير سلسلة يحدد مفتاح التصغير مجموعة من الرسائل التي يمكن تصغيرها. في حال عدم اتصال الجهاز، تظهر فقط الرسالة الأخيرة التي تحتوي على تصغير معيَّن. تم وضع المفتاح في قائمة انتظار التسليم النهائي
الأولوية عدد صحيح أولوية الرسالة. القيم الصالحة هي "عادية" و"مرتفع". على iOS، تتوافق هذه مع الأولويات 5 و10 لأسماء نقاط الوصول
Ttl عدد صحيح تحدد هذه المعلمة المدة (بالثواني) التي يجب الاحتفاظ بالرسالة خلالها. في مساحة تخزين FCM إذا كان الجهاز غير متصل بالإنترنت
موضوع سلسلة اسم الموضوع الذي تم إرسال رسالة إليه (إن أمكن)
معرّف_مُجمَّع عدد صحيح يحدد معرّف البريد المجمَّع مجموعة من الرسائل ذات الصلة، مثل رسالة محددة إرسال إلى موضوع
حدث سلسلة نوع الفعالية. القيم المتاحة:
  • MESSAGE_acceptED: تم استلام الرسالة من خلال خادم "المراسلة عبر السحابة الإلكترونية من Firebase" كان الطلب صالحًا
  • MESSAGE_DELIVERED: تم تسليم الرسالة إلى حزمة تطوير البرامج (SDK) لخدمة FCM الخاصة بالتطبيق في الجهاز. لا يتم نشر هذا الحقل تلقائيًا. للتفعيل، اتبع التعليمات المقدمة في setDeliveryMetricsExportToBigQuery(boolean).
  • MISSING_REGISTRATIONS: تم رفض الطلب نظرًا لعدم توفر التسجيل
  • UNAUTHORIZED_REGISTRATION: تم رفض الرسالة لأن المرسل غير مصرّح لك بإرسالها إلى التسجيل
  • MESSAGE_RECEIVED_INTERNAL_ERROR: حدث خطأ غير محدد عند معالجة طلب الرسالة؛
  • MISMATCH_SENDER_ID: تم رفض طلب إرسال رسالة بسبب عدم تطابق معرّف المُرسِل الذي يرسل الرسالة ومعرّف المُرسِل الذي تم تعريفه ونقطة النهاية؛
  • QUOTA_EXCEEDED: تم رفض طلب إرسال رسالة بسبب حصة غير كافية
  • nofollow_REGISTRATION: تم رفض طلب إرسال رسالة بسبب تسجيل غير صالح
  • nofollow_PACKAGE_NAME: تم رفض طلب إرسال رسالة بسبب اسم حزمة غير صالح
  • nofollow_APNS_CREDENTIAL: تم رفض طلب إرسال رسالة بسبب شهادة خدمة الإشعارات الفورية من Apple (APNS) غير صالحة
  • Connected_PARAMETERS: تم رفض طلب إرسال رسالة بسبب مَعلمات غير صالحة
  • PAYLOAD_TOO_LARGE: تم رفض طلب إرسال رسالة بسبب حمولة أكبر من الحد
  • AUTHENTICATION_ERROR: تم رفض طلب إرسال رسالة بسبب خطأ في المصادقة (تحقَّق من مفتاح واجهة برمجة التطبيقات المُستخدَم لإرسال الرسالة)
  • CREDIT_TTL: تم رفض طلب إرسال رسالة نظرًا لعدم صلاحية مدة البقاء.
تصنيف_إحصاءات سلسلة باستخدام 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;