بروتوكول Firebase Cloud Messaging XMPP

يوفر هذا المستند مرجعًا لبناء جملة XMPP المستخدم لتمرير الرسائل بين خادم التطبيق وتطبيقات العميل وFirebase Cloud Messaging (FCM). يجب أن يتصل خادم التطبيق الخاص بك بنقاط النهاية هذه:

// Production
fcm-xmpp.googleapis.com:5235

// Testing
fcm-xmpp.googleapis.com:5236

تقع المعلمات والخيارات المتاحة ضمن هذه الفئات:

بناء جملة الرسالة المتلقين للمعلومات

يقدم هذا القسم بناء الجملة لإرسال الرسائل النهائية.

رسائل XMPP المتلقية للمعلومات (JSON)

يسرد الجدول التالي الأهداف والخيارات والحمولة لرسائل XMPP JSON.

الجدول 1 : الأهداف والخيارات والحمولة لرسائل XMPP النهائية (JSON).

معامل الاستخدام وصف
هدف
to اختياري، سلسلة

تحدد هذه المعلمة مستلم الرسالة.

يمكن أن تكون القيمة عبارة عن رمز مميز لتسجيل الجهاز، أو مفتاح إعلام لمجموعة أجهزة، أو موضوع واحد (يسبقه /topics/ ). للإرسال إلى مواضيع متعددة، استخدم معلمة condition .

condition اختياري، سلسلة

تحدد هذه المعلمة تعبيرًا منطقيًا للشروط التي تحدد هدف الرسالة.

الحالة المدعومة: الموضوع، بتنسيق "'yourTopic' في المواضيع". هذه القيمة غير حساسة لحالة الأحرف.

عوامل التشغيل المدعومة: && ، || . يتم دعم الحد الأقصى من عاملي التشغيل لكل رسالة موضوع.

خيارات
message_id مطلوب، سلسلة

تحدد هذه المعلمة الرسالة بشكل فريد في اتصال XMPP.

collapse_key اختياري، سلسلة

تحدد هذه المعلمة مجموعة من الرسائل (على سبيل المثال، مع collapse_key: "Updates Available" ) التي يمكن طيها بحيث يتم إرسال الرسالة الأخيرة فقط عند استئناف التسليم. يهدف هذا إلى تجنب إرسال عدد كبير جدًا من الرسائل نفسها عندما يعود الجهاز متصلاً بالإنترنت أو يخرج من حالة السكون.

ليس هناك ضمان للترتيب الذي يتم به إرسال الرسائل.

ملحوظة: يُسمح بحد أقصى 4 مفاتيح طي مختلفة في أي وقت. وهذا يعني أن FCM يمكنها تخزين 4 رسائل مختلفة في وقت واحد لكل تطبيق عميل. إذا تجاوزت هذا الرقم، فليس هناك ضمان بشأن المفاتيح الأربعة التي ستحتفظ بها FCM.

priority اختياري، سلسلة

يحدد أولوية الرسالة. القيم الصالحة هي "عادية" و"عالية". على منصات Apple، تتوافق هذه مع أولويات APN 5 و10.

افتراضيًا، يتم إرسال رسائل الإعلام بأولوية عالية، ويتم إرسال رسائل البيانات بأولوية عادية. تعمل الأولوية العادية على تحسين استهلاك بطارية تطبيق العميل ويجب استخدامها ما لم يكن التسليم الفوري مطلوبًا. بالنسبة للرسائل ذات الأولوية العادية، قد يتلقى التطبيق الرسالة بتأخير غير محدد.

عندما يتم إرسال رسالة ذات أولوية عالية، يتم إرسالها على الفور، ويمكن للتطبيق عرض إشعار.

content_available اختياري، منطقي

على أنظمة Apple الأساسية، استخدم هذا الحقل لتمثيل content-available في حمولة APNs. عند إرسال إشعار أو رسالة وتعيين هذا على true ، يتم تنشيط تطبيق العميل غير النشط، ويتم إرسال الرسالة من خلال APNs كإشعار صامت وليس من خلال FCM. لاحظ أن الإشعارات الصامتة في شبكات APN ليست مضمونة، ويمكن أن تعتمد على عوامل مثل قيام المستخدم بتشغيل وضع الطاقة المنخفضة، أو فرض إنهاء التطبيق، وما إلى ذلك. على Android، تعمل رسائل البيانات على تنشيط التطبيق افتراضيًا. على Chrome، غير مدعوم حاليًا.

mutable_content اختياري، JSON منطقي

على أنظمة Apple الأساسية، استخدم هذا الحقل لتمثيل mutable-content في حمولة APNs. عند إرسال إشعار وتعيين هذا على true ، يمكن تعديل محتوى الإشعار قبل عرضه، باستخدام ملحق تطبيق خدمة الإشعارات . سيتم تجاهل هذه المعلمة لنظام Android والويب.

time_to_live اختياري، الرقم

تحدد هذه المعلمة المدة (بالثواني) التي يجب أن تبقى فيها الرسالة في وحدة تخزين FCM إذا كان الجهاز غير متصل بالإنترنت. الحد الأقصى لوقت البقاء مدعومًا هو 4 أسابيع، والقيمة الافتراضية هي 4 أسابيع. لمزيد من المعلومات، راجع تعيين مدة الرسالة .

dry_run اختياري، منطقي

تسمح هذه المعلمة، عند ضبطها على true ، للمطورين باختبار الطلب دون إرسال رسالة فعليًا.

القيمة الافتراضية هي false .

الحمولة
data اختياري، كائن

تحدد هذه المعلمة أزواج القيمة الرئيسية لحمولة الرسالة.

على سبيل المثال، مع data:{"score":"3x1"}:

على منصات Apple، إذا تم تسليم الرسالة بواسطة APNs، فإنها تمثل حقول البيانات المخصصة. إذا تم تسليمه بواسطة FCM، فسيتم تمثيله كقاموس قيمة رئيسي في AppDelegate application:didReceiveRemoteNotification: .

على Android، يؤدي هذا إلى score مسماة إضافية بقيمة السلسلة 3x1 .

يجب ألا يكون المفتاح كلمة محجوزة ("from"، أو "message_type"، أو أي كلمة تبدأ بـ "google" أو "gcm"). لا تستخدم أيًا من الكلمات المحددة في هذا الجدول (مثل collapse_key ).

يوصى باستخدام القيم في أنواع السلسلة. يجب عليك تحويل القيم الموجودة في الكائنات أو أنواع البيانات غير النصية الأخرى (على سبيل المثال، الأعداد الصحيحة أو القيم المنطقية) إلى سلسلة.

notification اختياري، كائن تحدد هذه المعلمة أزواج قيمة المفتاح المحددة مسبقًا والمرئية للمستخدم لحمولة الإشعارات. راجع دعم حمولة الإشعارات للحصول على التفاصيل. لمزيد من المعلومات حول خيارات رسائل الإعلام ورسائل البيانات، راجع أنواع الرسائل . إذا تم توفير حمولة إعلام، أو تم تعيين الخيار content_available على true لرسالة إلى جهاز Apple، فسيتم إرسال الرسالة عبر APNs ، وإلا فسيتم إرسالها عبر FCM.

دعم حمولة الإخطار

تسرد الجداول التالية المفاتيح المحددة مسبقًا المتوفرة لإنشاء رسائل الإشعارات لمنصات Apple وAndroid.

الجدول 2أ. Apple — مفاتيح رسائل الإشعارات

معامل الاستخدام وصف
title اختياري، سلسلة

عنوان الإخطار.

هذا الحقل غير مرئي على الهواتف والأجهزة اللوحية.

body اختياري، سلسلة

النص الأساسي للإشعار.

sound اختياري، سلسلة

الصوت الذي سيتم تشغيله عندما يتلقى الجهاز الإشعار.

سلسلة تحدد ملفات الصوت في الحزمة الرئيسية لتطبيق العميل أو في مجلد Library/Sounds في حاوية بيانات التطبيق. راجع مكتبة مطوري iOS لمزيد من المعلومات.

badge اختياري، سلسلة

قيمة الشارة على أيقونة التطبيق على الشاشة الرئيسية.

إذا لم يتم تحديدها، فلن يتم تغيير الشارة.

إذا تم التعيين على 0 ، فستتم إزالة الشارة.

click_action اختياري، سلسلة

الإجراء المرتبط بنقر المستخدم على الإشعار.

يتوافق مع category الموجودة في حمولة APNs.

subtitle اختياري، سلسلة

العنوان الفرعي للإشعار.

body_loc_key اختياري، سلسلة

مفتاح السلسلة الأساسية في موارد سلسلة التطبيق لاستخدامه في ترجمة النص الأساسي إلى الترجمة الحالية للمستخدم.

يتوافق مع loc-key في حمولة APNs.

راجع مرجع مفتاح الحمولة وتعريب محتوى الإشعارات عن بعد لمزيد من المعلومات.

body_loc_args اختياري، مصفوفة JSON كسلسلة

قيم السلسلة المتغيرة التي سيتم استخدامها بدلاً من محددات التنسيق في body_loc_key لاستخدامها في ترجمة النص الأساسي إلى الترجمة الحالية للمستخدم.

يتوافق مع loc-args في حمولة APNs.

راجع مرجع مفتاح الحمولة وتعريب محتوى الإشعارات عن بعد لمزيد من المعلومات.

title_loc_key اختياري، سلسلة

مفتاح سلسلة العنوان في موارد سلسلة التطبيق لاستخدامه في ترجمة نص العنوان إلى الترجمة الحالية للمستخدم.

يتوافق مع title-loc-key في حمولة APNs.

راجع مرجع مفتاح الحمولة وتعريب محتوى الإشعارات عن بعد لمزيد من المعلومات.

title_loc_args اختياري، مصفوفة JSON كسلسلة

قيم السلسلة المتغيرة التي سيتم استخدامها بدلاً من محددات التنسيق في title_loc_key لاستخدامها في ترجمة نص العنوان إلى الترجمة الحالية للمستخدم.

يتوافق مع title-loc-args في حمولة APNs.

راجع مرجع مفتاح الحمولة وتعريب محتوى الإشعارات عن بعد لمزيد من المعلومات.

الجدول 2ب. Android — مفاتيح رسائل الإشعارات

معامل الاستخدام وصف
title اختياري، سلسلة

عنوان الإخطار.

body اختياري، سلسلة

النص الأساسي للإشعار.

android_channel_id اختياري، سلسلة

معرف قناة الإشعارات (جديد في Android O).

يجب أن يقوم التطبيق بإنشاء قناة بمعرف القناة هذا قبل تلقي أي إشعار بمعرف القناة هذا.

إذا لم ترسل معرف القناة هذا في الطلب، أو إذا لم يتم إنشاء معرف القناة المقدم بواسطة التطبيق بعد، فستستخدم FCM معرف القناة المحدد في بيان التطبيق.

icon اختياري، سلسلة

أيقونة الإخطار.

يضبط أيقونة الإعلام على myicon للمورد القابل للرسم myicon . إذا لم ترسل هذا المفتاح في الطلب، فستعرض FCM رمز المشغل المحدد في بيان التطبيق الخاص بك.

sound اختياري، سلسلة

الصوت الذي سيتم تشغيله عندما يتلقى الجهاز الإشعار.

يدعم "default" أو اسم الملف لمورد الصوت المضمن في التطبيق. يجب أن تكون ملفات الصوت موجودة في /res/raw/ .

tag اختياري، سلسلة

المعرف المستخدم لاستبدال الإشعارات الموجودة في درج الإشعارات.

إذا لم يتم تحديده، يقوم كل طلب بإنشاء إشعار جديد.

إذا تم تحديده وتم عرض إشعار بنفس العلامة بالفعل، فسيحل الإشعار الجديد محل الإشعار الموجود في درج الإشعارات.

color اختياري، سلسلة

لون رمز الإشعار، معبرًا عنه بتنسيق #rrggbb .

click_action اختياري، سلسلة

الإجراء المرتبط بنقر المستخدم على الإشعار.

إذا تم تحديده، فسيتم تشغيل نشاط به مرشح غرض مطابق عندما ينقر المستخدم على الإشعار.

body_loc_key اختياري، سلسلة

مفتاح السلسلة الأساسية في موارد سلسلة التطبيق لاستخدامه في ترجمة النص الأساسي إلى الترجمة الحالية للمستخدم.

راجع موارد السلسلة لمزيد من المعلومات.

body_loc_args اختياري، مصفوفة JSON كسلسلة

قيم السلسلة المتغيرة التي سيتم استخدامها بدلاً من محددات التنسيق في body_loc_key لاستخدامها في ترجمة النص الأساسي إلى الترجمة الحالية للمستخدم.

راجع التنسيق والتصميم لمزيد من المعلومات.

title_loc_key اختياري، سلسلة

مفتاح سلسلة العنوان في موارد سلسلة التطبيق لاستخدامه في ترجمة نص العنوان إلى الترجمة الحالية للمستخدم.

راجع موارد السلسلة لمزيد من المعلومات.

title_loc_args اختياري، مصفوفة JSON كسلسلة

قيم السلسلة المتغيرة التي سيتم استخدامها بدلاً من محددات التنسيق في title_loc_key لاستخدامها في ترجمة نص العنوان إلى الترجمة الحالية للمستخدم.

راجع التنسيق والتصميم لمزيد من المعلومات.

الجدول 2ج. الويب (JavaScript) — مفاتيح رسائل الإشعارات

معامل الاستخدام وصف
title اختياري، سلسلة

عنوان الإخطار.

body اختياري، سلسلة

النص الأساسي للإشعار.

icon اختياري، سلسلة

عنوان URL المطلوب استخدامه لرمز الإشعار.

click_action اختياري، سلسلة

الإجراء المرتبط بنقر المستخدم على الإشعار.

بالنسبة لجميع قيم URL، يلزم استخدام HTTPS.

تفسير استجابة رسالة XMPP المتلقين للمعلومات

يسرد الجدول التالي الحقول التي تظهر في استجابة رسالة XMPP المتلقين للمعلومات.

الجدول 3 : نص استجابة الرسالة XMPP.

معامل الاستخدام وصف
from مطلوب، سلسلة

تحدد هذه المعلمة من أرسل هذا الرد.

القيمة هي رمز التسجيل لتطبيق العميل.

message_id مطلوب، سلسلة تحدد هذه المعلمة الرسالة بشكل فريد في اتصال XMPP. القيمة عبارة عن سلسلة تحدد الرسالة المقترنة بشكل فريد.
message_type مطلوب، سلسلة

تحدد هذه المعلمة رسالة ack أو nack من FCM إلى خادم التطبيق.

إذا تم تعيين القيمة على nack ، فيجب أن ينظر خادم التطبيق إلى error و error_description للحصول على معلومات الفشل.

error اختياري، سلسلة تحدد هذه المعلمة خطأً متعلقًا بالرسالة المتلقية للمعلومات. يتم ضبطه عندما يكون message_type nack . انظر الجدول 4 للحصول على التفاصيل.
error_description اختياري، سلسلة توفر هذه المعلمة معلومات وصفية للخطأ. يتم ضبطه عندما يكون message_type nack .

رموز الاستجابة لخطأ الرسالة المتلقين للمعلومات

يسرد الجدول التالي رموز استجابة الخطأ للرسائل المتلقية للمعلومات.

الجدول 4 : رموز الاستجابة لخطأ الرسالة المتلقين للمعلومات.

خطأ رمز XMPP الإجراء الموصى به
رمز التسجيل مفقود INVALID_JSON تأكد من أن الطلب يحتوي على رمز تسجيل مميز (في registration_id في رسالة نصية عادية، أو في الحقل to أو registration_ids في JSON).
تسجيل APNs غير صالح INVALID_JSON بالنسبة لتسجيلات iOS، تأكد من أن طلب التسجيل المقدم من العميل يحتوي على رمز APN صالح ومعرف التطبيق.
رمز التسجيل غير صالح BAD_REGISTRATION تحقق من تنسيق رمز التسجيل الذي تقوم بتمريره إلى الخادم. تأكد من أنه يطابق رمز التسجيل الذي يتلقاه تطبيق العميل من التسجيل في FCM. لا تقم باقتطاع أو إضافة أحرف إضافية.
جهاز غير مسجل DEVICE_UNREGISTERED قد لا يعد رمز التسجيل الحالي صالحًا في عدد من السيناريوهات، بما في ذلك:
  • إذا تم إلغاء تسجيل تطبيق العميل لدى FCM.
  • إذا تم إلغاء تسجيل تطبيق العميل تلقائيًا، فقد يحدث ذلك إذا قام المستخدم بإلغاء تثبيت التطبيق. على سبيل المثال، في نظام التشغيل iOS، إذا أبلغت APNs عن أن رمز APN غير صالح.
  • إذا انتهت صلاحية رمز التسجيل المميز (على سبيل المثال، قد تقرر Google تحديث رموز التسجيل المميزة، أو انتهت صلاحية رمز APN المميز للأجهزة).
  • إذا تم تحديث تطبيق العميل، ولكن لم يتم تكوين الإصدار الجديد لتلقي الرسائل.
في كل هذه الحالات، قم بإزالة رمز التسجيل هذا من خادم التطبيق وتوقف عن استخدامه لإرسال الرسائل.
مرسل غير متطابق 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_
ERROR
واجه الخادم خطأ أثناء محاولة معالجة الطلب. يمكنك إعادة محاولة نفس الطلب باتباع المتطلبات المذكورة في "المهلة" (انظر الصف أعلاه).
تم تجاوز معدل رسالة الجهاز DEVICE_MESSAGE_RATE
_EXCEEDED
معدل الرسائل إلى جهاز معين مرتفع جدًا. قم بتقليل عدد الرسائل المرسلة إلى هذا الجهاز، ولا تحاول إرسالها مرة أخرى على الفور إلى هذا الجهاز.
تم تجاوز معدل رسائل المواضيع TOPICS_MESSAGE_RATE
_EXCEEDED
معدل الرسائل للمشتركين في موضوع معين مرتفع جدًا. قم بتقليل عدد الرسائل المرسلة لهذا الموضوع، ولا تحاول إرسالها مرة أخرى على الفور.
استنزاف الاتصال CONNECTION_DRAINING تعذرت معالجة الرسالة لأن الاتصال يستنزف. يحدث هذا لأن FCM تحتاج بشكل دوري إلى إغلاق الاتصال لإجراء موازنة التحميل. أعد محاولة إرسال الرسالة عبر اتصال XMPP آخر.
بيانات اعتماد APNs غير صالحة INVALID_APNS_CREDENTIAL تعذر إرسال رسالة موجهة إلى جهاز iOS لأنه لم يتم تحميل مفتاح مصادقة APN المطلوب أو انتهت صلاحيته. تحقق من صحة بيانات اعتماد التطوير والإنتاج الخاصة بك.
المصادقة فشلت AUTHENTICATION_FAILED فشلت المصادقة مع خدمات الدفع الخارجية. تحقق مما إذا كنت تستخدم شهادات دفع الويب الصحيحة.

بناء جملة الرسالة المنبع

الرسالة الأولية هي رسالة يرسلها تطبيق العميل إلى خادم التطبيق. حاليًا، يدعم XMPP فقط المراسلة الأولية. راجع الوثائق الخاصة بالنظام الأساسي الخاص بك للحصول على مزيد من المعلومات حول إرسال الرسائل من تطبيقات العميل.

تفسير رسالة XMPP الأولية

يصف الجدول التالي الحقول الموجودة في مقطع XMPP الذي تم إنشاؤه بواسطة FCM استجابةً لطلبات الرسائل الأولية من تطبيقات العميل.

الجدول 5: رسائل XMPP المنبع.

معامل الاستخدام وصف
from مطلوب، سلسلة

تحدد هذه المعلمة من أرسل الرسالة.

القيمة هي رمز التسجيل لتطبيق العميل.

category مطلوب، سلسلة تحدد هذه المعلمة اسم حزمة التطبيق لتطبيق العميل الذي أرسل الرسالة.
message_id مطلوب، سلسلة تحدد هذه المعلمة المعرف الفريد للرسالة.
data اختياري، سلسلة تحدد هذه المعلمة أزواج القيمة الرئيسية لحمولة الرسالة.

إرسال رسالة ACK

يصف الجدول التالي استجابة ACK التي من المتوقع أن يرسلها خادم التطبيق إلى FCM ردًا على رسالة منبع يتلقاها خادم التطبيق.

الجدول 6: استجابة رسائل XMPP المنبع.

معامل الاستخدام وصف
to مطلوب، سلسلة

تحدد هذه المعلمة مستلم رسالة الرد.

يجب أن تكون القيمة عبارة عن رمز تسجيل مميز لتطبيق العميل الذي أرسل الرسالة الأولية.

message_id مطلوب، سلسلة تحدد هذه المعلمة الرسالة المخصصة للاستجابة. يجب أن تكون القيمة هي قيمة message_id من الرسالة الأولية المقابلة.
message_type مطلوب، سلسلة تحدد هذه المعلمة رسالة ack من خادم التطبيق إلى CCS. بالنسبة للرسائل الأولية، يجب دائمًا ضبطها على ack .

رسائل خادم FCM (XMPP)

هذه رسالة مرسلة من FCM إلى خادم التطبيق. فيما يلي الأنواع الأساسية للرسائل التي ترسلها FCM إلى خادم التطبيق:

  • التحكم: تشير هذه الرسائل التي تم إنشاؤها بواسطة CCS إلى أن الإجراء مطلوب من خادم التطبيق.

يصف الجدول التالي الحقول المضمنة في الرسائل التي يرسلها CCS إلى خادم التطبيق.

الجدول 7 : رسائل التحكم FCM (XMPP).

معامل الاستخدام وصف
المجال المشترك
message_type مطلوب، سلسلة

تحدد هذه المعلمة نوع الرسالة: التحكم.

عند ضبطها على control ، تتضمن الرسالة control_type للإشارة إلى نوع رسالة التحكم.

control_type اختياري، سلسلة

تحدد هذه المعلمة نوع رسالة التحكم المرسلة من FCM.

حاليًا، يتم دعم CONNECTION_DRAINING فقط. ترسل FCM رسالة التحكم هذه قبل إغلاق الاتصال لإجراء موازنة التحميل. ومع استنزاف الاتصال، لا يُسمح بإرسال المزيد من الرسائل إلى الاتصال، ولكن تستمر معالجة الرسائل الموجودة في المسار.