باستخدام FCM، يمكنك إرسال نوعَين من الرسائل إلى تطبيقات العميل:
- رسائل الإشعارات، المشابهة لـ "رسائل العرض"، التي تعالجها FCM SDK تلقائيًا
- رسائل البيانات، التي يعالجها تطبيق العميل
تحتوي رسائل الإشعارات على مجموعة محدّدة مسبقًا من المفاتيح المرئية للمستخدم ويمكن أن تحتوي على حمولة بيانات اختيارية. في المقابل، لا تحتوي رسائل البيانات إلا على أزواج المفاتيح والقيم المخصّصة التي يحدّدها المستخدم. الحد الأقصى للحمولة لكلا نوعَي الرسائل هو 4096 بايت، باستثناء إرسال الرسائل من وحدة تحكّم Firebase، التي تفرض حدًا أقصى يبلغ 1000 حرف.
| سيناريو الاستخدام | كيفية الإرسال | |
|---|---|---|
| رسالة إشعار | تعرض حزمة تطوير البرامج (SDK) الخاصة بخدمة "FCM" الرسالة على أجهزة المستخدمين النهائيين نيابةً عن تطبيق العميل عند تشغيله في الخلفية. إذا كان التطبيق قيد التشغيل في المقدّمة عند تلقّي الإشعار، يحدّد رمز التطبيق السلوك. |
|
| رسالة بيانات | تطبيق العميل هو المسؤول عن معالجة رسائل البيانات. لا تحتوي رسائل البيانات إلا على أزواج المفاتيح والقيم المخصّصة بدون أسماء مفاتيح محجوزة (اطّلِع أدناه). | في بيئة موثوق بها، مثل
Cloud Functions
أو خادم تطبيقك، استخدِم
Firebase Admin SDK أو الإصدار
1 من واجهة برمجة تطبيقات HTTP.
في طلب الإرسال، اضبط المفتاح data.
|
يمكنك استخدام رسائل الإشعارات عندما تريد أن تعالج حزمة تطوير البرامج (SDK) الخاصة بخدمة FCM عرض الإشعار تلقائيًا عند تشغيل تطبيقك في الخلفية. FCM يمكن إرسال رسالة إشعار مع حمولة بيانات اختيارية. في هذه الحالات، تعرض FCM حمولة الإشعار، ويعالج تطبيق العميل حمولة البيانات.
يمكنك استخدام رسائل البيانات عندما تريد معالجة الرسائل باستخدام رمز تطبيق العميل الخاص بك.
رسائل الإشعارات
يمكنك إرسال رسائل الإشعارات باستخدام Firebaseوحدة التحكّم أو Firebase Admin SDK أو الإصدار 1 من واجهة برمجة تطبيقات HTTP لخدمة "مراسلة Firebase السحابية" API. توفر وحدة تحكم Firebase اختبار A/B المستند إلى "إحصاءات Google" لمساعدتك في تحسين رسائل الإشعارات.
لإرسال رسائل الإشعارات باستخدام Firebase Admin SDK أو الإصدار 1 من واجهة برمجة تطبيقات FCM
HTTP، اضبط المفتاح notification باستخدام المجموعة المحدّدة مسبقًا من خيارات المفاتيح والقيم
لرسالة الإشعار. يمكنك استخدام المثال التالي لتنسيق رسالة إشعار في تطبيق مراسلة فورية.
{
"message":{
"token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
"notification":{
"title":"Portugal vs. Denmark",
"body":"great match!"
}
}
}
يتم تسليم رسائل الإشعارات إلى درج الإشعارات عندما يكون التطبيق في الخلفية. بالنسبة إلى التطبيقات في المقدّمة، تتم معالجة الرسائل من خلال دالة رد الاتصال.
يمكنك استخدام مستند مرجع عنصر الإشعار في الإصدار 1 من واجهة برمجة تطبيقات HTTP لخدمة "مراسلة Firebase السحابية" للاطّلاع على القائمة الكاملة للمفاتيح المحدّدة مسبقًا والمتاحة لإنشاء رسائل الإشعارات.
رسائل البيانات
يعود إليك تحديد كيفية استخدام data في حمولة خدمة "المراسلة عبر السحابة الإلكترونية من Firebase" لتنفيذ نظام التشفير الذي تختاره. تأكَّد من عدم استخدام أي كلمات محجوزة في أزواج المفاتيح والقيم المخصّصة. تشمل الكلمات المحجوزة from أو message_type أو
أي كلمة تبدأ بـ google. أو gcm. أو gcm.notification..
يوضّح المثال التالي استخدام حقل البيانات على المستوى الأعلى أو حقل البيانات الشائع، الذي تفسّره تطبيقات العميل على جميع الأنظمة الأساسية التي تتلقّى الرسالة. على كل نظام أساسي، يتلقّى تطبيق العميل حمولة البيانات في دالة رد الاتصال.
{
"message":{
"token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
"data":{
"Nick" : "Mario",
"body" : "great match!",
"Room" : "PortugalVSDenmark"
}
}
}
رسائل الإشعارات مع حمولة بيانات اختيارية
يمكنك إرسال رسائل إشعارات تحتوي على حمولة اختيارية من أزواج المفاتيح والقيم المخصّصة برمجيًا أو باستخدام وحدة تحكّم Firebase. في منشئ الإشعارات، استخدِم حقول بيانات مخصّصة في الخيارات المتقدّمة.
يعتمد سلوك التطبيق عند تلقّي الرسائل التي تتضمّن حمولتَي الإشعار والبيانات على ما إذا كان التطبيق في الخلفية أو المقدّمة، أي ما إذا كان نشطًا في وقت الاستلام أم لا.
- عندما يكون التطبيق في الخلفية، يتلقّى حمولة الإشعار في درج الإشعارات، ولا يعالج حمولة البيانات إلا عندما ينقر المستخدم على الإشعار.
- عندما يكون التطبيق في المقدّمة، يتلقّى تطبيقك كائن رسالة يتضمّن كلتا الحمولتَين.
في ما يلي رسالة بتنسيق JSON تحتوي على المفتاح
notification والمفتاح data
{
"message":{
"token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
"notification":{
"title":"Portugal vs. Denmark",
"body":"great match!"
},
"data" : {
"Nick" : "Mario",
"Room" : "PortugalVSDenmark"
}
}
}