توفر FCM ثلاث مجموعات من الأدوات لمساعدتك في الحصول على نظرة ثاقبة حول تسليم الرسائل:
- تقارير تسليم رسائل وحدة التحكم في Firebase
- مقاييس تسليم Android SDK المجمعة من Firebase Cloud Messaging Data API
- تصدير بيانات شاملة إلى Google BigQuery
تتطلب جميع أدوات إعداد التقارير الموضحة في هذه الصفحة Google Analytics حتى تعمل. إذا لم يتم تمكين Google Analytics لمشروعك، فيمكنك إعداده في علامة تبويب عمليات التكامل في إعدادات مشروع Firebase.
ضع في اعتبارك أن الإبلاغ عن العديد من الإحصائيات في هذه الصفحة يخضع للتأخير لمدة تصل إلى 24 ساعة بسبب تجميع البيانات التحليلية.
تقارير تسليم الرسائل
في علامة التبويب "التقارير" في وحدة تحكم Firebase، يمكنك عرض البيانات التالية للرسائل المرسلة إلى Android أو Apple Platform FCM SDKs، بما في ذلك تلك المرسلة عبر مؤلف الإشعارات وواجهات برمجة تطبيقات FCM:
- الإرسال - تم وضع رسالة البيانات أو رسالة الإعلام في قائمة الانتظار للتسليم أو تم تمريرها بنجاح إلى خدمة خارجية مثل APNs للتسليم. انظر عمر الرسالة لمزيد من المعلومات.
- تم الاستلام (متوفر فقط على أجهزة Android) - تم استلام رسالة البيانات أو رسالة الإشعار بواسطة التطبيق. تتوفر هذه البيانات عندما يكون جهاز Android المتلقي مثبتًا عليه FCM SDK 18.0.1 أو إصدار أحدث.
- مرات الظهور (متوفرة فقط لرسائل الإشعارات على أجهزة Android) - تم عرض إشعار العرض على الجهاز أثناء وجود التطبيق في الخلفية.
- الفتح — فتح المستخدم رسالة الإعلام. يتم الإبلاغ عنها فقط للإشعارات المستلمة عندما يكون التطبيق في الخلفية.
تتوفر هذه البيانات لجميع الرسائل التي تحتوي على حمولة إعلامية ولجميع رسائل البيانات المصنفة . لمعرفة المزيد حول التصنيفات، راجع إضافة تصنيفات تحليلية إلى الرسائل .
عند عرض تقارير الرسائل، يمكنك تعيين نطاق زمني للبيانات المعروضة، مع خيار التصدير إلى ملف CSV. يمكنك أيضًا التصفية حسب هذه المعايير:
- النظام الأساسي (iOS أو Android)
- برنامج
- تسميات التحليلات المخصصة
إضافة تسميات تحليلية إلى الرسائل
يعد تصنيف الرسائل مفيدًا جدًا للتحليل المخصص، مما يسمح لك بتصفية إحصائيات التسليم حسب التصنيفات أو مجموعات التصنيفات. يمكنك إضافة تصنيف إلى أي رسالة مرسلة عبر HTTP v1 API عن طريق تعيين الحقل fcmOptions.analyticsLabel
في كائن الرسالة ، أو في حقول AndroidFcmOptions
أو ApnsFcmOptions
الخاصة بالنظام الأساسي.
تصنيفات Analytics عبارة عن سلاسل نصية بالتنسيق ^[a-zA-Z0-9-_.~%]{1,50}$
. يمكن أن تتضمن التسميات أحرفًا صغيرة وكبيرة وأرقامًا والرموز التالية:
-
-
-
~
-
%
الحد الأقصى للطول هو 50 حرفًا. يمكنك تحديد ما يصل إلى 100 تصنيف فريد يوميًا؛ ولا يتم الإبلاغ عن الرسائل ذات التصنيفات المضافة بعد هذا الحد.
في علامة التبويب تقارير رسائل وحدة تحكم Firebase، يمكنك البحث في قائمة بجميع التصنيفات الموجودة وتطبيقها منفردة أو مجتمعة لتصفية الإحصائيات المعروضة.
بيانات التسليم المجمعة عبر FCM Data API
تتيح لك واجهة برمجة تطبيقات Firebase Cloud Messaging Data API استرداد المعلومات التي يمكن أن تساعدك في فهم نتائج طلبات الرسائل التي تستهدف تطبيقات Android. توفر واجهة برمجة التطبيقات (API) بيانات مجمعة عبر جميع أجهزة Android التي تدعم جمع البيانات في المشروع. يتضمن ذلك تفاصيل حول النسبة المئوية للرسائل التي تم تسليمها دون تأخير بالإضافة إلى عدد الرسائل التي تم تأخيرها أو إسقاطها داخل طبقة النقل في Android . يمكن أن يكشف تقييم هذه البيانات عن اتجاهات واسعة النطاق في تسليم الرسائل ويساعدك في العثور على طرق فعالة لتحسين أداء طلبات الإرسال الخاصة بك. راجع الجداول الزمنية للبيانات المجمعة للحصول على معلومات حول مدى توفر النطاق الزمني في التقارير.
توفر واجهة برمجة التطبيقات جميع البيانات المتاحة لتطبيق معين. راجع الوثائق المرجعية لواجهة برمجة التطبيقات (API) .
كيف يتم تقسيم البيانات؟
يتم تقسيم بيانات التسليم حسب التطبيق والتاريخ وتصنيف التحليلات . سيؤدي استدعاء واجهة برمجة التطبيقات (API) إلى إرجاع البيانات لكل مجموعة من التاريخ والتطبيق وتسمية التحليلات. على سبيل المثال، سيبدو كائن 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%.
عدد الرسائل المقبولة
العدد الوحيد المدرج في مجموعة البيانات هو عدد الرسائل التي قبلتها FCM لتسليمها إلى أجهزة Android. تستخدم جميع النسب المئوية هذه القيمة كمقام. ضع في اعتبارك أن هذا العدد لن يتضمن الرسائل الموجهة للمستخدمين الذين قاموا بتعطيل جمع معلومات الاستخدام والتشخيص على أجهزتهم.
النسب المئوية لنتائج الرسالة
توفر الحقول المضمنة في كائن MessageOutcomePercents
معلومات حول نتائج طلبات الرسائل. الفئات كلها متنافية. يمكنه الإجابة على أسئلة مثل "هل يتم تسليم رسائلي؟" و"ما الذي يسبب إسقاط الرسائل؟"
على سبيل المثال، قد تشير القيمة العالية للحقل droppedTooManyPendingMessages
إلى أن مثيلات التطبيق تتلقى كميات من الرسائل غير القابلة للطي تتجاوز حد FCM وهو 100 رسالة معلقة. للتخفيف من ذلك، تأكد من أن تطبيقك يتعامل مع المكالمات إلى onDeletedMessages
، وفكر في إرسال رسائل قابلة للطي. وبالمثل، يمكن أن تكون النسب المئوية العالية لـ droppedDeviceInactive
إشارة لتحديث الرموز المميزة للتسجيل على الخادم الخاص بك، وإزالة الرموز المميزة التي لا معنى لها وإلغاء اشتراكها من المواضيع. راجع إدارة الرموز المميزة لتسجيل FCM للتعرف على أفضل الممارسات في هذا المجال.
نسب أداء التسليم
توفر الحقول الموجودة في كائن DeliveryPerformancePercents
معلومات حول الرسائل التي تم تسليمها بنجاح. يمكنه الإجابة على أسئلة مثل "هل تأخرت رسائلي؟" و"لماذا تتأخر الرسائل؟" على سبيل المثال، تشير القيمة العالية لـ delayedMessageThrottled
بوضوح إلى أنك تتجاوز الحدود القصوى لكل جهاز ، ويجب ضبط المعدل الذي ترسل به الرسائل.
النسب المئوية لرؤية الرسالة
يوفر هذا الكائن معلومات إضافية حول كافة الرسائل المرسلة. يعبر الحقل priorityLowered
عن النسبة المئوية للرسائل المقبولة التي تم تخفيض أولويتها من HIGH
" إلى NORMAL
. إذا كانت هذه القيمة عالية، فحاول إرسال عدد أقل من الرسائل ذات الأولوية العالية أو تأكد من عرض إشعار دائمًا عند إرسال رسالة ذات أولوية عالية. راجع وثائقنا حول أولوية الرسالة لمزيد من المعلومات
كيف تختلف هذه البيانات عن البيانات المصدرة إلى BigQuery؟
يوفر تصدير BigQuery سجلات رسائل فردية حول قبول الرسالة من خلال الواجهة الخلفية لـ FCM وتسليم الرسائل في SDK على الجهاز (الخطوتان 2 و4 من بنية FCM ). هذه البيانات مفيدة لضمان قبول الرسائل الفردية وتسليمها. اقرأ المزيد حول تصدير بيانات BigQuery في القسم التالي.
على النقيض من ذلك، توفر Firebase Cloud Messaging Data API تفاصيل مجمعة حول ما يحدث على وجه التحديد في طبقة نقل Android (أو الخطوة 3 من بنية FCM ). توفر هذه البيانات على وجه التحديد نظرة ثاقبة حول تسليم الرسائل من واجهات FCM الخلفية إلى Android SDK. إنه مفيد بشكل خاص لإظهار الاتجاهات المتعلقة بسبب تأخير الرسائل أو إسقاطها أثناء عملية النقل هذه.
في بعض الحالات، من الممكن ألا تتطابق مجموعتا البيانات بشكل دقيق للأسباب التالية:
- لا تمثل المقاييس المجمعة سوى عينة من جزء من جميع الرسائل
- يتم تقريب المقاييس المجمعة
- نحن لا نقدم مقاييس أقل من حد الخصوصية
- جزء من نتائج الرسائل مفقود بسبب التحسينات في كيفية إدارة الحجم الكبير من حركة المرور.
قيود واجهة برمجة التطبيقات
الجداول الزمنية للبيانات المجمعة
ستعيد واجهة برمجة التطبيقات (API) البيانات التاريخية لمدة 7 أيام؛ ومع ذلك، سيتم تأخير البيانات التي يتم إرجاعها بواسطة واجهة برمجة التطبيقات هذه لمدة تصل إلى 5 أيام. على سبيل المثال، في 20 كانون الثاني (يناير)، ستكون البيانات للفترة من 9 كانون الثاني (يناير) إلى 15 كانون الثاني (يناير) متاحة، ولكن ليس ليوم 16 كانون الثاني (يناير) أو ما بعده. بالإضافة إلى ذلك، يتم توفير البيانات في أفضل جهد. في حالة انقطاع البيانات، ستعمل FCM على الإصلاح للأمام ولن تقوم بإعادة ملء البيانات بعد إصلاح المشكلة. وفي حالات الانقطاع الكبيرة، قد تكون البيانات غير متاحة لمدة أسبوع أو أكثر.
تغطية البيانات
تهدف المقاييس التي توفرها Firebase Cloud Messaging Data API إلى توفير نظرة ثاقبة للاتجاهات العامة لتسليم الرسائل. ومع ذلك، فإنها لا توفر تغطية 100% لكافة سيناريوهات الرسائل. السيناريوهات التالية هي نتائج معروفة لا تنعكس في المقاييس.
الرسائل المطوية
لا تظهر الرسائل التي تم طيها بواسطة رسالة أخرى في مجموعة البيانات.
رسائل إلى الأجهزة غير النشطة
قد تظهر أو لا تظهر الرسائل المرسلة إلى الأجهزة غير النشطة في مجموعة البيانات اعتمادًا على مسار البيانات الذي تسلكه. يمكن أن يؤدي هذا إلى بعض الأخطاء في العد في الحقلين droppedDeviceInactive
pending
.
رسائل إلى الأجهزة ذات تفضيلات مستخدم معينة
المستخدمون الذين قاموا بتعطيل جمع معلومات الاستخدام والتشخيص على أجهزتهم لن يتم تضمين رسائلهم في حسابنا، وذلك تماشيًا مع تفضيلاتهم.
التقريب والحد الأدنى
تقوم FCM بتقريب واستبعاد الأعداد التي لا تكون فيها الأحجام كبيرة بدرجة كافية.
تصدير بيانات BigQuery
يمكنك تصدير بيانات رسالتك إلى BigQuery لمزيد من التحليل. يتيح لك BigQuery تحليل البيانات باستخدام BigQuery SQL، أو تصديرها إلى موفر سحابي آخر، أو استخدام البيانات لنماذج تعلم الآلة المخصصة لديك. تتضمن عملية التصدير إلى BigQuery جميع البيانات المتاحة للرسائل، بغض النظر عن نوع الرسالة أو ما إذا كانت الرسالة قد تم إرسالها عبر واجهة برمجة التطبيقات أو مؤلف الإشعارات.
بالنسبة للرسائل المرسلة إلى الأجهزة التي تحتوي على الحد الأدنى من إصدارات FCM SDK التالية، لديك خيار إضافي لتمكين تصدير بيانات تسليم الرسائل لتطبيقك:
- أندرويد 20.1.0 أو أعلى.
- iOS 8.6.0 أو أعلى
- Firebase Web SDK 9.0.0 أو أعلى
انظر أدناه للحصول على تفاصيل حول تمكين تصدير البيانات لنظامي التشغيل Android و iOS .
للبدء، اربط مشروعك بـ BigQuery:
اختيار واحد من الخيارات التالية:
افتح مؤلف الإشعارات ، ثم انقر على Access BigQuery في أسفل الصفحة.
من صفحة عمليات التكامل في وحدة تحكم Firebase، انقر على الرابط في بطاقة BigQuery .
تعرض هذه الصفحة خيارات تصدير FCM لجميع التطبيقات التي تدعم FCM في المشروع.
اتبع التعليمات التي تظهر على الشاشة لتمكين BigQuery.
راجع ربط Firebase بـ BigQuery لمزيد من المعلومات.
عند تمكين تصدير BigQuery للمراسلة السحابية:
يقوم Firebase بتصدير بياناتك إلى BigQuery. لاحظ أن النشر الأولي للبيانات للتصدير قد يستغرق ما يصل إلى 48 ساعة حتى يكتمل.
- يمكنك جدولة عمليات إعادة تعبئة البيانات يدويًا لمدة تصل إلى 30 يومًا الماضية.
بعد إنشاء مجموعة البيانات، لا يمكن تغيير الموقع، ولكن يمكنك نسخ مجموعة البيانات إلى موقع مختلف أو نقل (إعادة إنشاء) مجموعة البيانات يدويًا في موقع مختلف. لمعرفة المزيد، راجع تغيير موقع مجموعة البيانات .
يقوم Firebase بإعداد عمليات مزامنة منتظمة لبياناتك من مشروع Firebase الخاص بك إلى BigQuery. تبدأ عمليات التصدير اليومية هذه في الساعة 4:00 صباحًا بتوقيت المحيط الهادئ وتنتهي عادةً خلال 24 ساعة.
افتراضيًا، ترتبط جميع التطبيقات في مشروعك بـ BigQuery وأي تطبيقات تضيفها لاحقًا إلى المشروع يتم ربطها تلقائيًا بـ BigQuery. يمكنك إدارة التطبيقات التي ترسل البيانات .
لإلغاء تنشيط تصدير BigQuery، قم بإلغاء ربط مشروعك في وحدة تحكم Firebase.
تفعيل تصدير بيانات تسليم الرسائل
يمكن لأجهزة iOS المزودة بـ FCM SDK 8.6.0 أو أعلى تمكين تصدير بيانات تسليم الرسائل الخاصة بتطبيقاتها. يدعم FCM تصدير البيانات لكل من إشعارات التنبيه والخلفية. قبل تمكين هذه الخيارات، يجب عليك أولاً إنشاء رابط FCM-BiqQuery لمشروعك كما هو موضح في تصدير بيانات BigQuery .
تمكين تصدير بيانات التسليم لإشعارات التنبيه
نظرًا لأن إشعارات التنبيه فقط هي التي يمكنها تشغيل ملحقات تطبيق خدمة الإشعارات، فيجب عليك إضافة ملحق خدمة الإشعارات إلى تطبيقك واستدعاء واجهة برمجة التطبيقات هذه داخل ملحق الخدمة لتمكين تتبع رسائل العرض. راجع وثائق Apple حول تعديل المحتوى في الإشعارات التي تم تسليمها حديثًا .
يجب إجراء المكالمة التالية لكل إشعار يتم استلامه:
سويفت
// 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)
}
}
ج موضوعية
// 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
في كائن الحمولة .
تمكين تصدير بيانات التسليم لإشعارات الخلفية
بالنسبة لرسائل الخلفية المستلمة عندما يكون التطبيق في المقدمة أو الخلفية، يمكنك استدعاء واجهة برمجة تطبيقات تصدير البيانات داخل معالج رسائل بيانات التطبيق الرئيسي. يجب إجراء هذه المكالمة لكل إشعار يتم تلقيه:
سويفت
// 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)
}
ج موضوعية
// 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'). |
events_timestamp | الطابع الزمني | الطابع الزمني للحدث كما سجله الخادم |
رقم المشروع | عدد صحيح | يحدد رقم المشروع المشروع الذي أرسل الرسالة |
معرف الرسالة | خيط | يحدد معرف الرسالة الرسالة. قد لا يكون معرف الرسالة، الذي يتم إنشاؤه من معرف التطبيق والطابع الزمني، فريدًا عالميًا في بعض الحالات. |
example_id | خيط | المعرف الفريد للتطبيق الذي يتم إرسال الرسالة إليه (عند توفره). يمكن أن يكون معرف مثيل أو معرف تثبيت Firebase. |
نوع الرسالة | خيط | نوع الرسالة. يمكن أن تكون رسالة إعلام أو رسالة بيانات. يتم استخدام الموضوع لتحديد الرسالة الأصلية لموضوع أو حملة يتم إرسالها؛ وتكون الرسائل اللاحقة إما إشعارًا أو رسالة بيانات. |
sdk_platform | خيط | منصة التطبيق المتلقي |
اسم التطبيق | خيط | اسم الحزمة لتطبيقات Android أو معرف الحزمة لتطبيقات iOS |
انهيار_مفتاح | خيط | يحدد مفتاح الانهيار مجموعة من الرسائل التي يمكن طيها. عندما لا يكون الجهاز متصلاً، يتم وضع الرسالة الأخيرة التي تحتوي على مفتاح طي محدد فقط في قائمة الانتظار للتسليم النهائي |
أولوية | عدد صحيح | أولوية الرسالة. القيم الصالحة هي "عادية" و"عالية". على نظام التشغيل iOS، تتوافق هذه مع أولويات APN 5 و10 |
ttl | عدد صحيح | تحدد هذه المعلمة المدة (بالثواني) التي يجب أن تبقى فيها الرسالة في وحدة تخزين FCM إذا كان الجهاز غير متصل بالإنترنت |
عنوان | خيط | اسم الموضوع الذي تم إرسال الرسالة إليه (إن أمكن) |
معرف السائبة | عدد صحيح | يحدد المعرف المجمع مجموعة من الرسائل ذات الصلة، مثل إرسال معين إلى موضوع ما |
حدث | خيط | نوع الحدث. القيم المحتملة هي:
|
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;