يوفّر هذا المستند مرجعًا لبنية XMPP المستخدَمة لنقل الرسائل بين خادم التطبيق وتطبيقات العميل وFirebase Cloud Messaging (خدمة "المراسلة عبر السحابة الإلكترونية من Firebase"). يجب أن يتصل خادم التطبيق بنقطتَي النهاية التاليتَين:
// Production fcm-xmpp.googleapis.com:5235 // Testing fcm-xmpp.googleapis.com:5236
تندرج المَعلمات وال options المتاحة ضمن الفئات التالية:
- بنية الرسائل الواردة
- رموز استجابة الخطأ في الرسائل الواردة
- بنية الرسائل الواردة
- رسائل التحكّم في FCM
بنية الرسائل الواردة
يقدّم هذا القسم بنية إرسال الرسائل إلى أسفل السلسلة.
رسائل XMPP للنقل (بتنسيق JSON)
يسرد الجدول التالي الاستهدافات والخيارات وحمولة رسائل XMPP JSON.
المَعلمة | الاستخدام | الوصف | |
---|---|---|---|
الاستهداف | |||
to |
اختياري، سلسلة |
تحدّد هذه المَعلمة مستلِم الرسالة.
يمكن أن تكون القيمة عبارة عن رمز تسجيل جهاز أو
مفتاح إشعار لمجموعة أجهزة أو موضوع واحد (يسبقه
|
|
condition |
اختياري، سلسلة | تحدّد هذه المَعلمة تعبيرًا منطقيًا للشروط التي تحدد هدف الرسالة. الشرط المتوافق: الموضوع، بتنسيق "'yourTopic' in topics". هذه القيمة غير حسّاسة لحالة الأحرف. عوامل التشغيل المسموح بها: |
|
الخيارات | |||
message_id |
مطلوب، سلسلة | تحدِّد هذه المَعلمة رسالة بشكل فريد في اتصال XMPP. |
|
collapse_key |
اختياري، سلسلة | تحدد هذه المَعلمة مجموعة من الرسائل (مثلاً، باستخدام
لا يمكن ضمان ترتيب إرسال الرسائل. ملاحظة: يُسمح بحد أقصى 4 مفاتيح مختلفة للاختصار في أي وقت. وهذا يعني أنّه يمكن لتطبيق FCM تخزين 4 رسائل مختلفة في الوقت نفسه لكل تطبيق عميل. وفي حال تجاوزت هذا العدد، لا يمكن ضمان مفاتيح التصغير الأربعة التي سيحتفظ بهاFCM. |
|
priority |
اختياري، سلسلة | لضبط أولوية الرسالة. القيم الصالحة هي "عادي" و "مرتفع". على منصات Apple، تتوافق هذه الإعدادات مع أولويتَي APN 5 و10. يتم تلقائيًا إرسال رسائل الإشعارات بأولوية عالية، ويتم إرسال رسائل البيانات بأولوية عادية. تعمل الأولوية العادية على تحسين استهلاك تطبيق العميل للبطارية، ويجب استخدامها ما لم يكن مطلوبًا التسليم الفوري. بالنسبة إلى الرسائل ذات الأولوية العادية، قد يتلقّى التطبيق الرسالة مع تأخُّر غير محدّد. عند إرسال رسالة ذات أولوية عالية، يتم إرسالها على الفور، ويمكن للتطبيق عرض إشعار. |
|
content_available |
اختياري، منطقي | على منصات Apple، استخدِم هذا الحقل لتمثيل |
|
mutable_content |
اختياري، منطقي بتنسيق JSON | على منصات Apple، استخدِم هذا الحقل لتمثيل
|
|
time_to_live |
اختياري، رقم | تحدِّد هذه المَعلمة المدة (بالثواني) التي يجب الاحتفاظ فيها بالرسالة في مساحة تخزين FCM إذا كان الجهاز غير متصل بالإنترنت. الحد الأقصى المسموح به لوقت الصلاحية هو 4 أسابيع، والقيمة التلقائية هي 4 أسابيع. لمزيد من المعلومات، يُرجى الاطّلاع على ضبط مدة صلاحية الرسالة. |
|
dry_run |
اختياري، منطقي | عند ضبط هذه المَعلمة على ستكون القيمة التلقائية |
|
حمولة البيانات | |||
data |
اختياري، عنصر | تحدِّد هذه المَعلمة أزواج المفاتيح والقيم لحمولة الرسالة. على سبيل المثال، مع على منصات Apple، إذا تم إرسال الرسالة من خلال APNs، فإنّها تمثّل حقول البيانات المخصّصة. إذا
تم تسليمه من خلال FCM،
يتم تمثيله كقاموس قيم مفاتيح في على نظام التشغيل Android، يؤدي ذلك إلى إنشاء عنصر إضافي للنشاط باسم يجب ألّا يكون المفتاح كلمة محجوزة ("from" أو "message_type" أو أي كلمة تبدأ بحرف
"google" أو "gcm"). لا تستخدِم أيًا من الكلمات المحدّدة في هذا الجدول
(مثل يُنصح باستخدام القيم في أنواع السلاسل. عليك تحويل القيم في الكائنات أو أنواع البيانات الأخرى غير السلاسل (مثل الأعداد الصحيحة أو القيم المنطقية) إلى سلاسل. |
|
notification |
اختياري، عنصر | تحدّد هذه المَعلمة أزواج المفاتيح والقِيم المحدّدة مسبقًا والتي تظهر للمستخدمين في حمولة
الإشعار. اطّلِع على تفاصيل التوافق مع الحمولة في الإشعار. لمزيد من المعلومات
حول خيارات رسالة الإشعار ورسالة البيانات، يُرجى الاطّلاع على
أنواع الرسائل. في حال توفّر حمولة إشعار أو ضبط الخيار
content_available على true لرسالة مُرسَلة إلى جهاز Apple
، يتم إرسال الرسالة من خلال APNs، وإلا يتم إرسالها من خلال
FCM.
|
إتاحة الحمولة في الإشعار
تسرد الجداول التالية مفاتيح المحدّدة مسبقًا المتوفّرة لإنشاء رسائل الإشعارات لمنصّات Apple وAndroid.
المَعلمة | الاستخدام | الوصف |
---|---|---|
title |
اختياري، سلسلة |
عنوان الإشعار. لا يظهر هذا الحقل على الهواتف والأجهزة اللوحية. |
body |
اختياري، سلسلة |
النص الأساسي للإشعار |
sound |
اختياري، سلسلة |
الصوت الذي سيتم تشغيله عندما يتلقّى الجهاز الإشعار
سلسلة تحدّد ملفات الصوت في الحِزمة الرئيسية لتطبيق العميل أو في مجلد
|
badge |
اختياري، سلسلة |
قيمة الشارة على رمز التطبيق في الشاشة الرئيسية إذا لم يتم تحديدها، لن يتم تغيير الشارة.
في حال ضبطها على |
click_action |
اختياري، سلسلة |
الإجراء المرتبط بنقرة أحد المستخدِمين على الإشعار
يتوافق مع |
subtitle |
اختياري، سلسلة |
العنوان الفرعي للإشعار |
body_loc_key |
اختياري، سلسلة |
مفتاح سلسلة النص في موارد سلاسل التطبيق لاستخدامه في تعريب نص النص إلى اللغة المحوَّلة حاليًا للمستخدم
يتوافق مع اطّلِع على مرجع مفتاح الحمولة و نقل محتوى الإشعارات عن بُعد إلى لغة أخرى للحصول على مزيد من المعلومات. |
body_loc_args |
اختياري، مصفوفة JSON بالتنسيق السلسلة |
قيم سلاسل متغيّرة لاستخدامها بدلاً من محدّدات التنسيق في
يتوافق مع اطّلِع على مرجع مفتاح الحمولة و نقل محتوى الإشعارات عن بُعد إلى لغة أخرى للحصول على مزيد من المعلومات. |
title_loc_key |
اختياري، سلسلة |
مفتاح سلسلة العنوان في موارد سلاسل التطبيق لاستخدامه في تعريب نص العنوان إلى اللغة المحوَّلة حاليًا للمستخدم
يتوافق مع اطّلِع على مرجع مفتاح الحمولة و نقل محتوى الإشعارات عن بُعد إلى لغة أخرى للحصول على مزيد من المعلومات. |
title_loc_args |
اختياري، مصفوفة JSON بالتنسيق السلسلة |
قيم سلاسل متغيّرة لاستخدامها بدلاً من محدّدات التنسيق في
يتوافق مع اطّلِع على مرجع مفتاح الحمولة و نقل محتوى الإشعارات عن بُعد إلى لغة أخرى للحصول على مزيد من المعلومات. |
المَعلمة | الاستخدام | الوصف |
---|---|---|
title |
اختياري، سلسلة |
عنوان الإشعار. |
body |
اختياري، سلسلة |
النص الأساسي للإشعار |
android_channel_id |
اختياري، سلسلة |
معرّف قناة الإشعار (ميزة جديدة في Android O) يجب أن ينشئ التطبيق قناة باستخدام معرّف القناة هذا قبل تلقّي أي إشعار باستخدامه. إذا لم ترسِل معرّف القناة هذا في الطلب، أو إذا لم يكن التطبيق قد أنشأ معرّف القناة الذي تم تقديمه بعد، سيستخدم FCM معرّف القناة المحدّد في ملف بيان التطبيق. |
icon |
اختياري، سلسلة |
رمز الإشعار
تُستخدَم لضبط رمز الإشعار على |
sound |
اختياري، سلسلة |
الصوت الذي سيتم تشغيله عندما يتلقّى الجهاز الإشعار
يتيح استخدام |
tag |
اختياري، سلسلة |
المعرّف المستخدَم لاستبدال الإشعارات الحالية في درج الإشعارات في حال عدم تحديده، ينشئ كل طلب إشعارًا جديدًا. إذا تم تحديده وكان هناك إشعار يحمل العلامة نفسها معروضًا، سيحل الإشعار الجديد محل الإشعار الحالي في أدراج الإشعارات. |
color |
اختياري، سلسلة |
لون رمز الإشعار، مُعبَّرًا عنه بتنسيق |
click_action |
اختياري، سلسلة |
الإجراء المرتبط بنقرة أحد المستخدِمين على الإشعار إذا تم تحديده، يتم تشغيل نشاط يتضمّن فلتر أهداف مطابقًا عند نقر المستخدم على الإشعار. |
body_loc_key |
اختياري، سلسلة |
مفتاح سلسلة النص في موارد سلاسل التطبيق لاستخدامه في تعريب نص النص إلى اللغة المحوَّلة حاليًا للمستخدم اطّلِع على موارد السلاسل للحصول على مزيد من المعلومات. |
body_loc_args |
اختياري، مصفوفة JSON بالتنسيق السلسلة |
قيم سلاسل متغيّرة لاستخدامها بدلاً من محدّدات التنسيق في
يمكنك الاطّلاع على التنسيق والتصميم للحصول على مزيد من المعلومات. |
title_loc_key |
اختياري، سلسلة |
مفتاح سلسلة العنوان في موارد سلاسل التطبيق لاستخدامه في تعريب نص العنوان إلى اللغة المحوَّلة حاليًا للمستخدم اطّلِع على موارد السلاسل للحصول على مزيد من المعلومات. |
title_loc_args |
اختياري، مصفوفة JSON بالتنسيق السلسلة |
قيم سلاسل متغيّرة لاستخدامها بدلاً من محدّدات التنسيق في
يمكنك الاطّلاع على التنسيق والتصميم للحصول على مزيد من المعلومات. |
المَعلمة | الاستخدام | الوصف |
---|---|---|
title |
اختياري، سلسلة |
عنوان الإشعار. |
body |
اختياري، سلسلة |
النص الأساسي للإشعار |
icon |
اختياري، سلسلة |
عنوان URL المراد استخدامه لرمز الإشعار. |
click_action |
اختياري، سلسلة |
الإجراء المرتبط بنقرة أحد المستخدِمين على الإشعار يجب استخدام بروتوكول HTTPS لجميع قيم عناوين URL. |
تفسير استجابة رسالة XMPP من جهة العميل
يسرد الجدول التالي الحقول التي تظهر في ردّ رسالة XMPP للاتصال بالخدمات.
المَعلمة | الاستخدام | الوصف |
---|---|---|
from |
مطلوب، سلسلة | تحدِّد هذه المَعلمة المستخدم الذي أرسل هذا الردّ. القيمة هي الرمز المميّز لتسجيل تطبيق العميل. |
message_id |
مطلوب، سلسلة | تحدِّد هذه المَعلمة رسالة بشكل فريد في اتصال XMPP. القيمة هي سلسلة تحدّد الرسالة المرتبطة بشكل فريد. |
message_type |
مطلوب، سلسلة | تحدِّد هذه المَعلمة رسالة إذا تم ضبط القيمة على |
error |
اختياري، سلسلة | تحدد هذه المَعلمة خطأ مرتبطًا برسالة البث. يتم ضبطه عندما يكون
message_type هو nack . اطّلِع على الجدول 4 للاطّلاع على التفاصيل. |
error_description |
اختياري، سلسلة | تقدّم هذه المَعلمة معلومات وصفية عن الخطأ. يتم ضبطه
عندما تكون قيمة message_type هي nack . |
رموز الاستجابة للأخطاء في الرسائل الواردة
يسرد الجدول التالي رموز استجابة الخطأ للرسائل الواردة.
خطأ | رمز XMPP | الإجراء المقترَح |
---|---|---|
عدم توفّر الرمز المميّز للتسجيل | INVALID_JSON |
تأكَّد من أنّ الطلب يحتوي على رمز مميّز للتسجيل (في registration_id
في رسالة نصية عادية، أو في حقل to
أو registration_ids بتنسيق JSON). |
تسجيل APN غير صالح | INVALID_JSON |
بالنسبة إلى عمليات تسجيل أجهزة iOS، تأكَّد من أنّ طلب التسجيل الذي تلقّيته من العميل يحتوي على معرّف تطبيق ورمز مميّز صالحَين لخدمة APNs. |
رمز تسجيل غير صالح | BAD_REGISTRATION |
تحقّق من تنسيق الرمز المميّز للتسجيل الذي ترسله إلى الخادم. تأكَّد من أنّه يتطابق مع الرمز المميّز للتسجيل الذي يتلقّاه تطبيق العميل من التسجيل باستخدام FCM. لا تقصّ العنوان أو تُضِف إليه أحرفًا إضافية. |
جهاز غير مسجَّل | DEVICE_UNREGISTERED |
قد يتوقف رمز تسجيل حالي عن العمل في عدد من السيناريوهات، بما في ذلك:
|
المُرسِل غير متطابق | SENDER_ID_MISMATCH |
يرتبط الرمز المميَّز للتسجيل بمجموعة معيّنة من المُرسِلين. عند تسجيل تطبيق العميل لنظام FCM، يجب أن يحدِّد المُرسِلين المسموح لهم بإرسال الرسائل. يجب استخدام أحد معرّفات المُرسِل هذه عند إرسال الرسائل إلى تطبيق العميل. وفي حال التبديل إلى مُرسِل مختلف، لن تعمل الرموز المميّزة الحالية للتسجيل. |
ملف JSON غير صالح | INVALID_JSON |
تأكَّد من أنّ رسالة JSON منسَّقة بشكل صحيح وتتضمّن حقولًا صالحة (على سبيل المثال، التأكّد من إدخال نوع البيانات الصحيح). |
الرسالة كبيرة جدًا | INVALID_JSON |
تأكَّد من أنّ إجمالي حجم بيانات الحمولة المضمّنة في الرسالة لا يتجاوز حدود FCM: 4096 بايت لمعظم الرسائل أو 2048 بايت في حالة الرسائل المرسَلة إلى المواضيع. ويشمل ذلك كلاً من المفاتيح والقيم. |
مفتاح بيانات غير صالح | INVALID_JSON |
تأكَّد من أنّ بيانات الحمولة لا تحتوي على مفتاح (مثل from
gcm أو أي قيمة
تبدأ بالرمز google ) يستخدمه FCM داخليًا. يُرجى العِلم أنّ بعض الكلمات (مثل collapse_key )
تستخدمها أيضًا FCM ولكن يُسمح بها في الحمولة، وفي هذه الحالة
يتم إلغاء قيمة الحمولة بواسطة قيمة FCM. |
وقت الاستبدال غير صالح | INVALID_JSON |
تأكَّد من أنّ القيمة المستخدَمة في time_to_live هي عدد صحيح يمثّل مدّة بالثواني تتراوح بين 0 و2,419,200 (4 أسابيع). |
رسالة ACK غير صالحة | BAD_ACK |
تأكَّد من تنسيق رسالة ack بشكل صحيح قبل إعادة المحاولة. اطّلِع على
الجدول 6 للاطّلاع على التفاصيل. |
انتهت المهلة | SERVICE_UNAVAILABLE |
تعذّر على الخادم معالجة الطلب في الوقت المحدّد. يمكنك إعادة محاولة إرسال الطلب نفسه، ولكن عليك إجراء ما يلي:
ملاحظة: يُرجى العِلم أنّ المُرسِلين الذين يتسببون في حدوث مشاكل قد يتم إدراجهم في القائمة السوداء. |
حدث خطأ في الخادم الداخلي | INTERNAL_SERVER_
|
واجه الخادم خطأً أثناء محاولة معالجة الطلب. يمكنك إعادة محاولة تنفيذ الطلب نفسه باتّباع المتطلبات الواردة في "المهلة" (راجِع الصف أعلاه). |
تجاوز معدّل إرسال الرسائل على الجهاز | DEVICE_MESSAGE_RATE |
معدّل الرسائل المرسَلة إلى جهاز معيّن مرتفع جدًا. قلِّل عدد الرسائل المُرسَلة إلى هذا الجهاز، ولا تحاول إرسالها إلى هذا الجهاز على الفور. |
تجاوز معدّل إرسال الرسائل في Topics | TOPICS_MESSAGE_RATE |
معدّل الرسائل المرسَلة إلى المشتركين في موضوع معيّن مرتفع جدًا. قلِّل عدد الرسائل المُرسَلة لهذا الموضوع، ولا تحاول إعادة الإرسال على الفور. |
استنزاف الاتصال | CONNECTION_DRAINING |
تعذّرت معالجة الرسالة لأنّ الاتصال بالإنترنت ضعيف. ويحدث ذلك لأنّFCM يحتاج بشكل دوري إلى إغلاق اتصال لإجراء موازنة التحميل. أعِد إرسال الرسالة من خلال اتصال XMPP آخر. |
بيانات اعتماد APNs غير صالحة | INVALID_APNS_CREDENTIAL |
تعذّر إرسال رسالة مستهدفة لجهاز iOS لأنّه لم يتم تحميل مفتاح مصادقة APNs المطلوب أو انتهت صلاحيته. تأكَّد من صلاحية بيانات اعتمادك المتعلّقة بالتطوير والإصدار العلني. |
تعذّرت المصادقة | AUTHENTICATION_FAILED |
تعذّرت المصادقة مع خدمات الإشعارات الفورية الخارجية. تحقّق مما إذا كنت تستخدم الشهادات الصحيحة لرسائل Web Push. |
بنية الرسائل المرسَلة إلى الخادم
رسالة الإرسال هي رسالة يرسلها تطبيق العميل إلى خادم التطبيق. لا يتيح بروتوكول XMPP حاليًا سوى المراسلة من الأعلى إلى الأسفل. اطّلِع على مستندات منصّتك للحصول على مزيد من المعلومات عن إرسال الرسائل من تطبيقات العميل.
تفسير رسالة XMPP من جهة العميل
يوضّح الجدول التالي الحقول في فقرة XMPP التي أنشأهاFCM رداً على طلبات الرسائل الواردة من تطبيقات العميل.
المَعلمة | الاستخدام | الوصف |
---|---|---|
from |
مطلوب، سلسلة | تحدِّد هذه المَعلمة مَن أرسل الرسالة. القيمة هي الرمز المميّز لتسجيل تطبيق العميل. |
category |
مطلوب، سلسلة | تحدِّد هذه المَعلمة اسم حزمة التطبيق الخاص بتطبيق العميل الذي أرسل الرسالة. |
message_id |
مطلوب، سلسلة | تحدّد هذه المَعلمة المعرّف الفريد للرسالة. |
data |
اختياري، سلسلة | تحدِّد هذه المَعلمة أزواج المفاتيح والقيم لحمولة الرسالة. |
إرسال رسالة ACK
يوضّح الجدول التالي ردّ ACK الذي من المتوقّع أن يرسله خادم التطبيق إلى FCM استجابةً لتلقّي رسالة من المصدر من خادم التطبيق.
المَعلمة | الاستخدام | الوصف |
---|---|---|
to |
مطلوب، سلسلة | تحدّد هذه المَعلمة مستلِم رسالة الردّ. يجب أن تكون القيمة رمزًا مميّزًا للتسجيل لتطبيق العميل الذي أرسل رسالة الإرسال. |
message_id |
مطلوب، سلسلة | تحدِّد هذه المَعلمة الرسالة المقصودة للاستجابة. يجب أن تكون القيمة
قيمة message_id من رسالة الإرسال المقابلة. |
message_type |
مطلوب، سلسلة | تحدّد هذه المَعلمة رسالة ack من خادم التطبيق إلى CCS.
بالنسبة إلى الرسائل الواردة، يجب ضبطها دائمًا على ack . |
FCM رسائل الخادم (XMPP)
هذه رسالة تم إرسالها من FCM إلى خادم تطبيق. في ما يلي الأنواع الأساسية من الرسائل التي يرسلها FCM إلى خادم التطبيق:
- التحكّم: تشير هذه الرسائل التي يتم إنشاؤها من خلال CCS إلى أنّه يجب اتخاذ إجراء من خادم التطبيق.
يوضّح الجدول التالي الحقول المضمّنة في الرسائل التي ترسلها خدمة CCS إلى خادم التطبيق.
المَعلمة | الاستخدام | الوصف |
---|---|---|
الحقل الشائع | ||
message_type |
مطلوب، سلسلة | تحدِّد هذه المَعلمة نوع الرسالة: التحكّم. عند ضبطه على |
control_type |
اختياري، سلسلة | تحدِّد هذه المَعلمة نوع رسالة التحكّم المُرسَلة من FCM. لا يُسمح حاليًا إلا بالقيمة |