لتحديد المشاكل وحلّها في ما يتعلّق بحالات تعذُّر تسليم الرسائل المستمرة، استخدِم أداة حلّ المشاكل في FCM واطّلِع على منشور المدونة هذا للتعرّف على الأسباب المختلفة التي قد تؤدي إلى عدم ظهور رسالتك. يمكنك أيضًا الانتقال إلى لوحة بيانات حالة FCM لتحديد ما إذا كان هناك أي انقطاعات حالية في الخدمة تؤثر في FCM.
توفّر خدمة FCM أيضًا ثلاث مجموعات من الأدوات لمساعدتك في الحصول على إحصاءات حول التقييم الشامل لنجاح الرسائل واستراتيجيتها:
- Firebase تقرير تسليم رسائل Console
- مقاييس مجمّعة لتسليم حِزم تطوير البرامج (SDK) على Android من Firebase Cloud Messaging Data API
- تصدير البيانات الشاملة إلى Google BigQuery
يتطلّب تصدير البيانات إلى BigQuery وعلامة التبويب
التقارير في وحدة تحكّم Firebase توفّر Google Analytics لكي تعمل. يمكنك تفعيل
Google Analytics في
يُرجى العِلم أنّ إعداد تقارير العديد من الإحصاءات في هذه الصفحة قد يتأخر لمدة تصل إلى 24 ساعة بسبب تجميع بيانات الإحصاءات.
تقارير تسليم الرسائل
في وحدة تحكّم Firebase، انتقِل إلى علامة التبويب DevOps & Engagement > Messaging > Reports للاطّلاع على البيانات التالية للرسائل المُرسَلة إلى حِزم تطوير البرامج (SDK) لمنصّة FCM على Android أو Apple، بما في ذلك الرسائل المُرسَلة باستخدام منشئ الإشعارات وواجهات برمجة تطبيقات FCM:
- عمليات الإرسال: تمت إضافة رسالة البيانات أو رسالة الإشعار إلى قائمة الانتظار للتسليم أو تم تمريرها بنجاح إلى خدمة تابعة لجهة خارجية مثل APNs للتسليم. يُرجى العِلم أنّ إحصاءات عمليات الإرسال قد تتأخر لبضع ساعات. يمكنك الاطّلاع على مدة بقاء الرسالة لمزيد من المعلومات.
- تم الاستلام (متاح على أجهزة Android فقط): تم استلام رسالة البيانات أو رسالة الإشعار من خلال التطبيق. وتكون هذه البيانات متاحة عندما يكون جهاز Android المستلِم مثبَّتًا عليه الإصدار 18.0.1 من حزمة تطوير البرامج (SDK) لخدمة FCM أو إصدار أحدث.
- مرات الظهور (متوفّرة فقط لرسائل الإشعارات على أجهزة Android): تم عرض إشعار العرض على الجهاز أثناء تشغيل التطبيق في الخلفية.
- عمليات الفتح: فتح المستخدم رسالة الإشعار. يتم تسجيلها فقط للإشعارات التي يتم تلقّيها عندما يكون التطبيق يعمل في الخلفية.
تتوفّر هذه البيانات لجميع الرسائل التي تتضمّن حمولة إشعار وجميع رسائل البيانات المصنّفة. لمزيد من المعلومات عن التصنيفات، يُرجى الاطّلاع على إضافة تصنيفات الإحصاءات إلى الرسائل.
عند عرض تقارير الرسائل، يمكنك تحديد نطاق زمني للبيانات المعروضة، مع خيار التصدير إلى ملف CSV. يمكنك أيضًا الفلترة حسب المعايير التالية:
- النظام الأساسي (iOS أو Android)
- التطبيق
- تصنيفات الإحصاءات المخصّصة
إضافة تصنيفات الإحصاءات إلى الرسائل
يُعدّ تصنيف الرسائل مفيدًا جدًا للتحليل المخصّص، ما يتيح لك فلترة إحصاءات التسليم حسب التصنيفات أو مجموعات التصنيفات. يمكنك إضافة تصنيف إلى أي رسالة يتم إرسالها باستخدام HTTP v1 API من خلال ضبط الحقل fcmOptions.analyticsLabel في عنصر الرسالة أو في الحقلين AndroidFcmOptions أو ApnsFcmOptions الخاصين بالنظام الأساسي.
تصنيفات الإحصاءات هي سلاسل نصية بالتنسيق ^[a-zA-Z0-9-_.~%]{1,50}$.
يمكن أن تتضمّن التصنيفات أحرفًا صغيرة وكبيرة وأرقامًا والرموز التالية:
-~%
الحد الأقصى للطول هو 50 حرفًا. يمكنك تحديد ما يصل إلى 100 تصنيف فريد في اليوم، ولا يتم الإبلاغ عن الرسائل التي تتضمّن تصنيفات تمت إضافتها بعد تجاوز هذا الحدّ.
في علامة التبويب التقارير ضمن Firebase رسائل وحدة التحكّم ، يمكنك البحث في قائمة تضمّ جميع التصنيفات الحالية وتطبيقها بشكل فردي أو مجمّع لفلترة الإحصاءات المعروضة.
بيانات التسليم المجمّعة باستخدام FCM Data API
تتيح لك واجهة برمجة التطبيقات 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 سجلّات رسائل فردية حول قبول الرسائل من خلال خلفية FCM وتسليم الرسائل في حزمة تطوير البرامج (SDK) على الجهاز (الخطوتان 2 و4 من بنية FCM). هذه البيانات مفيدة لضمان قبول الرسائل الفردية وتسليمها. يمكنك الاطّلاع على مزيد من المعلومات عن تصدير بيانات BigQuery في القسم التالي.
في المقابل، توفّر واجهة Firebase Cloud Messaging Data API تفاصيل مجمّعة حول ما يحدث تحديدًا في طبقة النقل في Android (أو الخطوة 3 من بنية FCM). توفّر هذه البيانات تحديدًا إحصاءات حول تسليم الرسائل من الخلفيات في FCM إلى حزمة تطوير البرامج (SDK) لنظام التشغيل Android. وهي مفيدة بشكل خاص لعرض المؤشرات حول سبب تأخير الرسائل أو إسقاطها أثناء عملية النقل هذه.
في بعض الحالات، قد لا تتطابق مجموعتا البيانات بدقة للأسباب التالية:
- تأخذ المقاييس المجمّعة عيّنة من جزء من جميع الرسائل فقط
- يتم تقريب المقاييس المجمّعة
- لا نعرض المقاييس التي تقلّ عن حدّ الخصوصية
- هناك جزء من نتائج الرسائل غير متوفّر بسبب التحسينات التي أجريناها على طريقة إدارة عدد الزيارات الكبير.
قيود واجهة برمجة التطبيقات
المخططات الزمنية للبيانات المجمّعة
ستعرض واجهة برمجة التطبيقات بيانات سابقة لمدة 7 أيام، ولكن سيتم تأخير البيانات التي تعرضها هذه الواجهة لمدة تصل إلى 5 أيام. على سبيل المثال، في 20 يناير، ستكون البيانات من 9 يناير إلى 15 يناير متاحة، ولكن ليس من 16 يناير أو بعده. بالإضافة إلى ذلك، يتم تقديم البيانات بأقصى جهد ممكن. في حال حدوث انقطاع في البيانات، سيعمل FCM على إصلاح المشكلة ولن يعيد ملء البيانات بعد حلّها. في حالات الانقطاع الأكبر، قد لا تتوفّر البيانات لمدة أسبوع أو أكثر.
تغطية البيانات
تهدف المقاييس التي توفّرها واجهة برمجة التطبيقات Firebase Cloud Messaging Data API إلى تقديم إحصاءات حول المؤشرات العامة لتسليم الرسائل. ومع ذلك، لا توفّر هذه الأدوات تغطية بنسبة% 100 لجميع سيناريوهات الرسائل. السيناريوهات التالية هي نتائج معروفة لا تنعكس في المقاييس.
الرسائل منتهية الصلاحية
إذا انتهت صلاحية مدة البقاء (TTL) بعد نهاية تاريخ السجلّ المحدّد، لن يتم احتساب الرسالة على أنّها droppedTtlExpired في هذا التاريخ.
الرسائل إلى الأجهزة غير النشطة
قد تظهر أو لا تظهر الرسائل المُرسَلة إلى الأجهزة غير النشطة في مجموعة البيانات،
وذلك حسب مسار البيانات الذي تتّبعه. يمكن أن يؤدي ذلك إلى بعض الأخطاء في احتساب القيم في الحقلَين droppedDeviceInactive وpending.
الرسائل إلى الأجهزة التي تتضمّن إعدادات مفضّلة معيّنة للمستخدم
لن يتم تضمين رسائل المستخدمين الذين أوقفوا جمع معلومات الاستخدام وبيانات التشخيص على أجهزتهم في عملية الاحتساب، وذلك بما يتوافق مع إعداداتهم المفضّلة.
التقريب والحدود الدنيا
تعمل خدمة FCM على تقريب الأعداد واستبعادها عمدًا عندما لا تكون الكميات كبيرة بما يكفي.
تصدير البيانات في BigQuery
يمكنك تصدير بيانات رسائلك إلى BigQuery لإجراء المزيد من التحليل. تتيح لك BigQuery تحليل البيانات باستخدام لغة الاستعلامات البنيوية (SQL) في BigQuery، أو تصديرها إلى مقدّم خدمات سحابة إلكترونية آخر، أو استخدامها في نماذج تعلُّم الآلة المخصّصة. يتضمّن التصدير إلى BigQuery جميع البيانات المتاحة للرسائل، بغض النظر عن نوع الرسالة أو ما إذا تم إرسال الرسالة باستخدام واجهة برمجة التطبيقات أو أداة إنشاء الإشعارات.
بالنسبة إلى الرسائل المُرسَلة إلى الأجهزة التي تعمل بإصدارات FCM SDK التالية، يتوفّر لك خيار إضافي يتيح تصدير بيانات تسليم الرسائل لتطبيقك:
- الإصدار 20.1.0 من Android أو إصدار أحدث
- الإصدار 8.6.0 من نظام التشغيل iOS أو إصدار أحدث
- الإصدار 12.14.0 أو إصدار أحدث من حزمة تطوير البرامج (SDK) على الويب من Firebase
للبدء، اربط مشروعك بـ "BigQuery" باستخدام وحدة تحكّم Firebase:
اختر أحد الخيارات التالية:
انتقِل إلى DevOps & Engagement (عمليات التطوير والتفاعل) > Messaging (المراسلة) > the Notifications composer (منشئ الإشعارات)، ثم انقر على Access BigQuery (الوصول إلى BigQuery) في أسفل الصفحة.
انتقِل إلى
الإعدادات > علامة التبويب عمليات الدمج. بعد ذلك، انقر على ربط في 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+
يمكن لأجهزة 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.serviceExtension().exportDeliveryMetrics(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
إذا كنت تنشئ طلبات إرسال باستخدام الإصدار 1 من واجهة برمجة تطبيقات HTTP، احرص على تحديد `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.serviceExtension().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
Android
يمكن لأجهزة Android التي تعمل بالإصدار 20.1.0 من حزمة تطوير البرامج (SDK) لخدمة "FCM" أو إصدار أحدث تفعيل ميزة تصدير بيانات تسليم الرسائل في التطبيق. يكون خيار تصدير البيانات غير مفعّل تلقائيًا على مستوى التطبيق. يتيح لك تفعيلها آليًا على مستوى مثيل التطبيق أن تطلب من المستخدمين النهائيين الإذن بتحليل بيانات تسليم الرسائل (يُنصح بذلك). عند ضبط كليهما، تلغي القيمة على مستوى مثيل التطبيق القيمة على مستوى التطبيق.
قبل تفعيل هذه الخيارات، عليك أولاً إنشاء FCM-رابط BigQuery لمشروعك كما هو موضّح في تصدير بيانات BigQuery.
تفعيل تصدير بيانات التسليم لمثيلات التطبيق
في معظم الحالات، ننصحك بتفعيل تصدير بيانات تسليم الرسائل على مستوى مثيل التطبيق فقط وتركه غير مفعَّل على مستوى التطبيق.
FirebaseMessaging.getInstance().setDeliveryMetricsExportToBigQuery(true);
تفعيل تصدير بيانات التسليم لأحد التطبيقات
إذا كنت تفضّل تفعيل ميزة التصدير على مستوى التطبيق، تأكَّد من عدم استدعاء الطريقة setDeliveryMetricsExportToBigQuery، وأضِف السمة التالية إلى عنصر التطبيق في ملف بيان تطبيقك:
<application> <meta-data android:name="delivery_metrics_exported_to_big_query_enabled" android:value="true" /> </application>
الويب
تتيح حزمة تطوير البرامج (SDK) لخدمة "FCM" للويب، الإصدار 12.14.0 أو إصدار أحدث، تصدير بيانات التسليم. يكون تصدير البيانات غير مفعَّل تلقائيًا على مستوى التطبيق. يتيح لك تفعيلها آليًا على مستوى مثيل التطبيق طلب الإذن من المستخدمين النهائيين لتحليل بيانات تسليم رسائلهم (يُنصح بذلك). عند ضبط كليهما، تلغي القيمة على مستوى مثيل التطبيق القيمة على مستوى التطبيق. عندما يمنح المستخدم النهائي موافقته أو يرفض جمع البيانات، يجب أن يضبط التطبيق علامة التفعيل أو الإيقاف التجريبية لكل مثيل تطبيق كما هو موضّح:
// userConsent holds the decision of the user to give big query export consent. const userConsent = ...; const messaging = getMessagingInSw(app); experimentalSetDeliveryMetricsExportedToBigQueryEnabled(messaging, userConsent);
ما هي البيانات التي يتم تصديرها إلى BigQuery؟
يُرجى العِلم أنّ استهداف الرموز المميزة القديمة أو عمليات التسجيل غير النشطة قد يؤدي إلى تضخيم بعض هذه الإحصاءات.
مخطط الجدول الذي تم تصديره هو:
| _PARTITIONTIME | TIMESTAMP | يحتوي هذا العمود الزائف على طابع زمني لبداية اليوم (بالتوقيت العالمي المنسق) الذي تم فيه تحميل البيانات. بالنسبة إلى قسم YYYYMMDD، يحتوي هذا العمود الزائف على القيمة TIMESTAMP('YYYY-MM-DD'). |
| event_timestamp | TIMESTAMP | الطابع الزمني للحدث كما سجّله الخادم |
| project_number | عدد صحيح | يحدّد رقم المشروع المشروع الذي أرسل الرسالة |
| message_id | سلسلة | يحدّد معرّف الرسالة رسالة معيّنة. يتم إنشاء معرّف الرسالة من معرّف التطبيق والطابع الزمني، وقد لا يكون فريدًا على مستوى العالم في بعض الحالات. |
| instance_id | سلسلة | المعرّف الفريد للتطبيق الذي يتم إرسال الرسالة إليه (عند توفّره) ويمكن أن يكون معرّف مثيل أو معرّف تثبيت Firebase. |
| message_type | سلسلة | نوع الرسالة يمكن أن تكون رسالة إشعار أو رسالة بيانات. يُستخدَم Topic لتحديد الرسالة الأصلية لموضوع أو إرسال حملة، وتكون الرسائل اللاحقة إما إشعارًا أو رسالة بيانات. |
| sdk_platform | سلسلة | النظام الأساسي لتطبيق المستلِم |
| app_name | سلسلة | اسم الحزمة لتطبيقات Android أو معرّف الحزمة لتطبيقات iOS |
| collapse_key | سلسلة | يحدّد مفتاح التصغير مجموعة من الرسائل التي يمكن تصغيرها. عندما يكون الجهاز غير متصل، يتم وضع آخر رسالة تتضمّن مفتاح دمج معيّن في قائمة الانتظار لتسليمها في النهاية. |
| الأولوية | عدد صحيح | أولوية الرسالة تمثّل القيمة 5 الأولوية "العادية"، وتمثّل القيمة 10 الأولوية "العالية". |
| ttl | عدد صحيح | تحدّد هذه المَعلمة المدة (بالثواني) التي يجب الاحتفاظ بالرسالة خلالها في مساحة تخزين FCM إذا كان الجهاز غير متصل بالإنترنت |
| موضوع | سلسلة | اسم الموضوع الذي تم إرسال رسالة إليه (عند الاقتضاء) |
| bulk_id | عدد صحيح | يحدِّد رقم التعريف المجمّع مجموعة من الرسائل ذات الصلة، مثل رسالة معيّنة تم إرسالها إلى موضوع |
| حدث | سلسلة | نوع الحدث
القيم المحتمَلة هي:
|
| 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;