توفّر خدمة "المراسلة عبر السحابة الإلكترونية من Firebase" ثلاث مجموعات من الأدوات لمساعدتك في الحصول على إحصاءات عن إرسال الرسائل:
- Firebase تقارير تسليم الرسائل في وحدة التحكّم
- مقاييس تسليم حزمة تطوير البرامج (SDK) لنظام التشغيل Android المجمَّعة من واجهة برمجة تطبيقات بيانات Firebase Cloud Messaging
- تصدير شامل للبيانات إلى Google BigQuery
تتطلّب جميع أدوات إعداد التقارير الموضّحة في هذه الصفحة استخدام Google Analytics لكي تعمل. إذا لم يتم تفعيل Google Analytics لمشروعك، يمكنك إعداده في عمليات الدمج في إعدادات مشروع Firebase.
يُرجى العِلم أنّ إعداد تقارير عن العديد من الإحصاءات الواردة في هذه الصفحة قد يتأخّر لمدة تصل إلى 24 ساعة بسبب تجميع بيانات الإحصاءات.
تقارير تسليم الرسائل
في علامة التبويب التقارير ضمن وحدة تحكّم Firebase، يمكنك الاطّلاع على البيانات التالية للرسائل المُرسَلة إلى حِزم تطوير البرامج (SDK) لنظام المراسلة عبر السحابة الإلكترونية من Firebase لمنصّة Android أو Apple، بما في ذلك الرسائل المُرسَلة من خلال أداة إنشاء الإشعارات وواجهات برمجة تطبيقات المراسلة عبر السحابة الإلكترونية من Firebase:
- عمليات الإرسال: تمت إضافة رسالة البيانات أو رسالة الإشعار إلى قائمة الانتظار لـ تم تسليمها أو بنجاح إلى خدمة تابعة لجهة خارجية مثل أسماء نقاط الوصول (APNs) للتسليم. عرض فترة بقاء الرسالة لمزيد من المعلومات.
- تم الاستلام (متاح على أجهزة Android فقط): تلقّى التطبيق رسالة البيانات أو رسالة الإشعار. تتوفّر هذه البيانات عندما يكون جهاز Android المستلِم مزوّدًا FCM بحزمة SDK 18.0.1 أو إصدار أحدث.
- مرّات الظهور (متوفّرة فقط لرسائل الإشعارات على أجهزة 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
إلى أنّ نُسخ التطبيق تتلقّى أعدادًا كبيرة من
الرسائل غير القابلة للطي
تتجاوز الحدّ الأقصى المسموح به في الحقل FCM، وهو 100 رسالة في انتظار المراجعة.
للحدّ من هذه المشكلة، تأكَّد من أنّ تطبيقك يعالج المكالمات المرسَلة إلى onDeletedMessages
،
ويمكنك إرسال رسائل قابلة للطي. وبالمثل، فإن النسب المئوية العالية
قد يكون droppedDeviceInactive
إشارة إلى تعديل الرموز المميّزة للتسجيل على
الخادم، وإزالة الرموز المميزة القديمة وإلغاء اشتراكها من المواضيع. عرض
إدارة رموز التسجيل المميَّزة FCM
لمعرفة أفضل الممارسات في هذا المجال
النسب المئوية لأداء التسليم
تقدّم الحقول في عنصر DeliveryPerformancePercents
معلومات عن الرسائل التي تم تسليمها بنجاح. أُنشأها جون هنتر، الذي كان متخصصًا
يمكنه الإجابة عن أسئلة مثل "هل تأخرت رسائلي؟" أو
"لماذا تتأخر الرسائل؟" على سبيل المثال، يمكن أن تكون القيمة العالية
ستشير القيمة delayedMessageThrottled
بوضوح إلى أنك تتجاوز
الحدود القصوى لكل جهاز
ويجب ضبط معدّل إرسال الرسائل
النسب المئوية لإحصاءات الرسائل
يوفّر هذا العنصر معلومات إضافية عن جميع عمليات إرسال الرسائل. يعبّر الحقل
priorityLowered
عن النسبة المئوية للرسائل المقبولة التي
تم خفض أولويتها من HIGH
إلى NORMAL
. إذا كانت هذه القيمة مرتفعة، جرِّب إرسال عدد أقل من الرسائل ذات الأولوية العالية أو تأكَّد من
ستعرض دومًا إشعارًا عند إرسال رسالة ذات أولوية عالية. اطّلِع على مستنداتنا حول أولوية الرسائل للحصول على مزيد من المعلومات.
كيف تختلف هذه البيانات عن البيانات المُصدَّرة إلى BigQuery؟
توفِّر أداة BigQuery Export سجلّات الرسائل الفردية حول قبول الرسائل من قِبل خلفية FCM وتسليم الرسائل في حزمة SDK على الجهاز (الخطوتان 2 و4 من بنية "المراسلة عبر السحابة الإلكترونية من Firebase"). هذه البيانات مفيدة للتأكّد من قبول الرسائل الفردية ونقلها. يمكنك الاطّلاع على مزيد من المعلومات عن تصدير بيانات BigQuery في القسم التالي.
في المقابل، توفّر واجهة برمجة التطبيقات Firebase Cloud Messaging Data API تفاصيل مجمّعة حول ما يحدث تحديدًا في طبقة النقل في Android (أو الخطوة 3 من بنية FCM). تقدّم هذه البيانات إحصاءات عن تسليم الرسائل من الخلفيات في إطار عمل Firebase إلى حزمة تطوير البرامج (SDK) لنظام التشغيل Android. إنها مفيدة بشكل خاص إظهار مؤشرات أسباب تأخر الرسائل أو إسقاطها أثناء عملية النقل هذه.
في بعض الحالات، من المحتمل ألا تتطابق مجموعتا البيانات بدقة للأسباب التالية:
- تجمع المقاييس المجمّعة عينات فقط من جزء من جميع الرسائل.
- يتم تقريب المقاييس المجمّعة.
- لا نقدّم مقاييس أقل من الحدّ الأدنى لمتطلبات الخصوصية
- جزء من نتائج الرسائل مفقود بسبب التحسينات في كيفية في إدارة عدد كبير من الزيارات.
قيود واجهة برمجة التطبيقات
المخططات الزمنية للبيانات المجمّعة
ستعرِض واجهة برمجة التطبيقات البيانات السابقة لـ 7 أيام، ولكن سيتم تأخير البيانات التي تعرِضها هذه الواجهة لمدة تصل إلى 5 أيام. على سبيل المثال، في 20 كانون الثاني (يناير)، ستكون البيانات الخاصة بفترة 9 كانون الثاني (يناير) حتى 15 كانون الثاني (يناير) متاحة، ولكن ليس لشهر كانون الثاني (يناير) السادس عشر أو بعده. بالإضافة إلى ذلك، يتم توفير البيانات بأفضل شكل ممكن. في حال تعطُّل البيانات، سيعمل نظام FCM على حلّ المشاكل في المستقبل ولن يُعيد تعبئة البيانات بعد حلّ المشكلة. في حالات انقطاع الخدمة على نطاق أوسع، قد لا تتوفّر البيانات لمدة أسبوع أو أكثر.
تغطية البيانات
تهدف المقاييس التي تقدّمها Firebase Cloud Messaging Data API إلى تقديم إحصاءات عن المؤشرات العامة لتسليم الرسائل. ومع ذلك، لا تفعل توفير تغطية كاملة لجميع سيناريوهات الرسائل. في ما يلي السيناريوهات التالية والنتائج المعروفة التي لا تنعكس في المقاييس.
الرسائل المنتهية الصلاحية
إذا انتهت صلاحية مدة البقاء (TTL)
بعد نهاية تاريخ السجلّ المحدّد، لن يتم احتساب الرسالة على أنّها
droppedTtlExpired
في هذا التاريخ.
الرسائل المرسَلة إلى الأجهزة غير النشطة
قد تظهر الرسائل المُرسَلة إلى الأجهزة غير النشطة في مجموعة البيانات أو قد لا تظهر.
اعتمادًا على مسار البيانات الذي تسلكه. ويمكن أن يؤدي ذلك إلى بعض الأخطاء في احتساب الأرقام في الحقلين
droppedDeviceInactive
وpending
.
الرسائل للأجهزة التي تم ضبط إعداداتها المفضَّلة للمستخدمين
المستخدمون الذين أوقفوا جمع معلومات الاستخدام والتشخيص على فإن أجهزتهم لن يتم تضمين رسائلهم في العدّ، مع الحفاظ على بتفضيلاتهم.
التقريب والحد الأدنى
تقرّب "المراسلة عبر السحابة الإلكترونية من Firebase" عمدًا وتستبعد الأعداد التي لا تكون كبيرة منها يكفي.
تصدير بيانات BigQuery
يمكنك تصدير بيانات الرسائل إلى BigQuery لإجراء مزيد من التحليلات. أداة BigQuery يسمح لك بتحليل البيانات باستخدام BigQuery SQL وتصديرها إلى سحابة إلكترونية أخرى أو خدمة البيانات أو استخدام البيانات لنماذج تعلُّم الآلة المخصّصة يتضمّن التصدير إلى BigQuery جميع البيانات المتاحة للرسائل، بغض النظر عن نوع الرسالة أو ما إذا تم إرسال الرسالة من خلال واجهة برمجة التطبيقات أو أداة إنشاء الإشعارات.
بالنسبة إلى الرسائل المُرسَلة إلى الأجهزة التي تعمل بالإصدارات التالية من حزمة FCM SDK، يمكنك تفعيل خيار تصدير بيانات إرسال الرسائل لتطبيقك:
- الإصدار 20.1.0 من نظام التشغيل Android أو إصدار أحدث
- iOS 8.6.0 أو أحدث
- الإصدار 9.0.0 أو إصدار أحدث من حزمة تطوير البرامج (SDK) على الويب من Firebase
يُرجى الاطّلاع أدناه على تفاصيل حول تفعيل تصدير البيانات على Android و iOS.
للبدء، اربط مشروعك بأداة BigQuery:
اختَر أحد الخيارات التالية:
مفتوح مؤلف الإشعارات، ثم انقر على الوصول إلى BigQuery في أسفل الصفحة.
من عمليات الدمج صفحة في وحدة تحكّم Firebase، انقر على ربط في BigQuery. بنجاح.
تعرض هذه الصفحة خيارات تصدير FCM للجميع. تم تفعيل FCM تطبيق في المشروع.
اتّبِع التعليمات الظاهرة على الشاشة لتفعيل BigQuery.
يُرجى الاطّلاع على مقالة ربط Firebase بخدمة BigQuery لمزيد من المعلومات.
عند تفعيل تصدير BigQuery إلى Cloud Messaging:
يصدِّر Firebase بياناتك إلى BigQuery. ملاحظة أن النشر الأولي للبيانات للتصدير قد يستغرق مدة تصل إلى 48 ساعة مكتملة.
- يمكنك تحديد جدول زمني يدويًا لإضافة البيانات السابقة لمدة تصل إلى آخر 30 يومًا.
بعد إنشاء مجموعة البيانات، يستخدم الموقع ولكن يمكنك نسخ مجموعة البيانات إلى موقع مختلف أو نقل (إعادة إنشاء) مجموعة البيانات يدويًا في موقع مختلف. للتعلّم المزيد، يمكنك الاطّلاع على تغيير الموقع الجغرافي لمجموعة البيانات.
تُعدّ Firebase عمليات مزامنة منتظمة لبياناتك من مشروعك على Firebase إلى BigQuery. تبدأ عمليات التصدير اليومية هذه في الساعة 4:00 صباحًا بتوقيت المحيط الهادئ. وتنتهي عادة في غضون 24 ساعة.
يتم تلقائيًا ربط جميع التطبيقات في مشروعك بمنصّة BigQuery، وبالنسبة إلى أي تطبيقات تتم إضافتها إلى المشروع لاحقًا، يتم أيضًا ربطها تلقائيًا بمنصّة BigQuery. يمكنك إدارة عمليات اختيار التطبيقات التي ترسل البيانات إلى BigQuery
لإيقاف تصدير BigQuery، ألغِ ربط مشروعك في وحدة تحكّم Firebase.
تفعيل تصدير بيانات تسليم الرسائل
يمكن لأجهزة iOS التي تعمل بإصدار FCM SDK 8.6.0 أو إصدار أحدث تفعيل ميزة تصدير بيانات إرسال الرسائل في تطبيقاتها. 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 | سلسلة | ويحدِّد معرِّف الرسالة الرسالة. تم إنشاء القيم من رقم تعريف التطبيق طابع زمني، قد لا يكون معرِّف الرسالة فريدًا في بعض الحالات عالميًا. |
معرّف_المثيل | سلسلة | المعرّف الفريد للتطبيق الذي يتم إرسال الرسالة إليه (عندما يكون متوفّرًا). يمكن أن تكون رقم تعريف مثيل أو معرّف تثبيت Firebase. |
message_type | سلسلة | نوع الرسالة. يمكن أن تكون رسالة إشعار أو رسالة بيانات. يُستخدَم Topic لتحديد الرسالة الأصلية لإرسال موضوع أو حملة، وتكون الرسائل اللاحقة إما إشعارًا أو رسالة بيانات. |
منصة sdk_platform | سلسلة | النظام الأساسي لتطبيق المستلِم |
اسم_التطبيق | سلسلة | اسم الحزمة لتطبيقات Android أو رقم تعريف الحزمة لتطبيقات iOS |
مفتاح_التصغير | سلسلة | يحدد مفتاح التصغير مجموعة من الرسائل التي يمكن تصغيرها. عندما لا يكون الجهاز متصلاً، يتم وضع آخر رسالة تتضمّن مفتاح collapse معيّن في قائمة الانتظار لإرسالها في وقت لاحق. |
الأولوية | عدد صحيح | أولوية الرسالة القيم الصالحة هي "عادية" و"مرتفع". على iOS، تتوافق هذه مع الأولويات 5 و10 لأسماء نقاط الوصول |
ttl | عدد صحيح | تحدد هذه المعلمة المدة (بالثواني) التي يجب الاحتفاظ بالرسالة خلالها. في مساحة تخزين FCM إذا كان الجهاز غير متصل بالإنترنت |
موضوع | سلسلة | اسم الموضوع الذي تم إرسال رسالة إليه (عند الاقتضاء) |
معرّف_مُجمَّع | عدد صحيح | يحدد معرّف البريد المجمّع مجموعة من الرسائل ذات الصلة، مثل رسالة محددة إرسال إلى موضوع |
حدث | سلسلة | نوع الحدث.
القيم المتاحة:
|
تصنيف_إحصاءات | سلسلة | باستخدام 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;