Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

حول رسائل FCM

تقدم Firebase Cloud Messaging (FCM) مجموعة واسعة من خيارات وإمكانيات المراسلة. تهدف المعلومات الواردة في هذه الصفحة إلى مساعدتك في فهم الأنواع المختلفة لرسائل FCM وما يمكنك فعله بها.

أنواع الرسائل

باستخدام FCM ، يمكنك إرسال نوعين من الرسائل إلى العملاء:

  • رسائل الإعلام ، يُعتقد أحيانًا أنها "رسائل عرض". يتم التعامل مع هذه بواسطة FCM SDK تلقائيًا.
  • رسائل البيانات التي يتعامل معها تطبيق العميل.

تحتوي رسائل الإعلام على مجموعة محددة مسبقًا من المفاتيح المرئية للمستخدم. على النقيض من ذلك ، تحتوي رسائل البيانات فقط على أزواج قيمة المفتاح المخصصة المعرفة من قبل المستخدم. يمكن أن تحتوي رسائل الإعلام على حمولة بيانات اختيارية. يبلغ الحد الأقصى للحمولة لكلا نوعي الرسائل 4000 بايت ، باستثناء عند إرسال رسائل من وحدة تحكم Firebase ، والتي تفرض حدًا يصل إلى 1024 حرفًا.

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

    نرى بعض الأمثلة الإخطارات عرض وطلب إرسال الحمولات.

  2. استخدام الملحن الإخطارات : أدخل نص الرسالة، عنوان، الخ، وإرسال. أضف حمولة بيانات اختيارية من خلال توفير بيانات مخصصة.
رسالة البيانات تطبيق العميل مسؤول عن معالجة رسائل البيانات. تحتوي رسائل البيانات على أزواج مخصصة فقط من المفاتيح والقيمة بدون أسماء مفاتيح محجوزة (انظر أدناه). في بيئة موثوق مثل وظائف السحب أو خادم التطبيق الخاص بك، استخدم SDK الادارية أو بروتوكولات خادم FCM : مجموعة من data مفتاح فقط.

استخدم رسائل التنبيه عندما تريد من FCM التعامل مع عرض إشعار نيابة عن تطبيق العميل الخاص بك. استخدم رسائل البيانات عندما تريد معالجة الرسائل على تطبيق العميل الخاص بك.

يمكن لـ FCM إرسال رسالة إشعار تتضمن حمولة بيانات اختيارية. في مثل هذه الحالات ، يتعامل FCM مع عرض حمولة الإشعارات ، ويتعامل تطبيق العميل مع حمولة البيانات.

رسائل التنبيه

لاختبار أو للتسويق والمستخدم إعادة الارتباط، يمكنك إرسال رسائل الإعلام باستخدام وحدة تحكم Firebase . تقدم وحدة Firebase تستند تحليلات- A / B اختبار لتساعدك على صقل وتحسين رسائل التسويق.

لرسائل الإعلام إرسال برمجيا باستخدام SDK الادارية أو بروتوكولات FCM، تعيين notification مفتاح مع مجموعة محددة مسبقا ضروريا من الخيارات مفتاح قيمة الجزء المستخدم المرئي من رسالة الإعلام. على سبيل المثال ، إليك رسالة إعلام بتنسيق JSON في تطبيق مراسلة فورية. يمكن للمستخدم أن يتوقع رؤية رسالة بعنوان "البرتغال مقابل الدنمارك" والنص "تطابق رائع!" على الجهاز:

{
  "message":{
    "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "notification":{
      "title":"Portugal vs. Denmark",
      "body":"great match!"
    }
  }
}

يتم تسليم رسائل الإعلام إلى درج الإشعارات عندما يكون التطبيق في الخلفية. بالنسبة للتطبيقات في المقدمة ، تتم معالجة الرسائل بواسطة وظيفة رد الاتصال.

راجع الوثائق المرجعية للحصول على القائمة الكاملة للمفاتيح المحددة مسبقًا المتاحة لبناء رسائل الإعلام:

رسائل البيانات

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

على سبيل المثال، وهنا هو رسالة بتنسيق JSON في نفس التطبيق IM على النحو الوارد أعلاه، حيث يتم تغليف المعلومات في المشترك data مفتاح والتطبيق العميل ومن المتوقع أن تفسير مضمون:

{
  "message":{
    "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "data":{
      "Nick" : "Mario",
      "body" : "great match!",
      "Room" : "PortugalVSDenmark"
    }
  }
}

ما سبق استخدام البرامج مثال على المستوى الأعلى، أو مشترك data الميدانية، التي يتم تفسيرها من قبل العملاء على جميع المنابر التي تتلقى الرسالة. في كل نظام أساسي ، يتلقى تطبيق العميل حمولة البيانات في وظيفة رد الاتصال.

تشفير رسائل البيانات

طبقة الروبوت النقل (انظر العمارة FCM ) يستخدم التشفير من نقطة إلى نقطة. بناءً على احتياجاتك ، قد تقرر إضافة تشفير من طرف إلى طرف إلى رسائل البيانات. لا توفر FCM حلاً شاملاً. ومع ذلك، هناك الحلول الخارجية المتاحة مثل شعري أو DTLS .

رسائل إعلام مع حمولة بيانات اختيارية

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

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

  • عندما تكون في الخلفية، تتلقى التطبيقات الحمولة إعلام في علبة الإخطار، والتعامل فقط حمولة البيانات عندما ينقر المستخدم على الإخطار.
  • عندما تكون في المقدمة، يتلقى التطبيق كائن رسالة مع كل من الحمولات المتاحة.

هنا هو رسالة بتنسيق JSON تحتوي على كل من notification مفتاح و data رئيسية هي:

{
  "message":{
    "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "notification":{
      "title":"Portugal vs. Denmark",
      "body":"great match!"
    },
    "data" : {
      "Nick" : "Mario",
      "Room" : "PortugalVSDenmark"
    }
  }
}

تخصيص رسالة عبر المنصات

وFirebase الادارية SDK وFCM V1 HTTP بروتوكول كلا تسمح طلبات رسالتك لضبط كافة المجالات المتاحة في message الكائن. هذا يشمل:

  • مجموعة مشتركة من الحقول ليتم تفسيره من قبل جميع الحالات التطبيق التي تتلقى الرسالة.
  • مجموعات منصة محددة من المجالات، مثل AndroidConfig و WebpushConfig ، تفسر إلا من خلال حالات التطبيق يعمل على منصة محددة.

تمنحك الكتل الخاصة بالمنصة المرونة لتخصيص الرسائل لأنظمة أساسية مختلفة لضمان التعامل معها بشكل صحيح عند استلامها. ستأخذ الواجهة الخلفية FCM جميع المعلمات المحددة في الاعتبار وتخصيص الرسالة لكل منصة.

متى تستخدم الحقول المشتركة

استخدم الحقول المشتركة عندما تكون:

  • استهداف حالات التطبيق على جميع المنابر - دائرة الرقابة الداخلية، الروبوت، وشبكة الإنترنت
  • إرسال رسائل إلى المواضيع

يمكن لجميع مثيلات التطبيق ، بغض النظر عن النظام الأساسي ، تفسير الحقول المشتركة التالية:

متى تستخدم الحقول الخاصة بالنظام الأساسي

استخدم الحقول الخاصة بالنظام الأساسي عندما تريد:

  • إرسال الحقول إلى منصات معينة فقط
  • إرسال الحقول منصة محددة بالإضافة إلى الحقول المشتركة

كلما أردت أن ترسل القيم فقط إلى منصات معينة، لا تستخدم الحقول المشتركة. استخدام الحقول الخاصة بالمنصة. على سبيل المثال ، لإرسال إشعار إلى iOS والويب فقط وليس إلى Android ، يجب عليك استخدام مجموعتين منفصلتين من الحقول ، واحدة لنظام iOS والأخرى للويب.

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

مثال: رسالة إعلام بخيارات تسليم خاصة بالمنصة

يرسل طلب الإرسال التالي v1 عنوانًا ومحتوى إعلامًا مشتركًا إلى جميع الأنظمة الأساسية ، ولكنه يرسل أيضًا بعض التجاوزات الخاصة بالمنصة. على وجه التحديد ، الطلب:

  • يعيّن وقتًا طويلاً للعيش لمنصات Android والويب ، مع ضبط أولوية رسالة APN (iOS) على إعداد منخفض
  • يضع مفاتيح المناسبة لتحديد نتيجة الصنبور المستخدم على الإعلام على Android و iOS - click_action ، و category ، على التوالي.
{
  "message":{
     "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
     "notification":{
       "title":"Match update",
       "body":"Arsenal goal in added time, score is now 3-0"
     },
     "android":{
       "ttl":"86400s",
       "notification"{
         "click_action":"OPEN_ACTIVITY_1"
       }
     },
     "apns": {
       "headers": {
         "apns-priority": "5",
       },
       "payload": {
         "aps": {
           "category": "NEW_MESSAGE_CATEGORY"
         }
       }
     },
     "webpush":{
       "headers":{
         "TTL":"86400"
       }
     }
   }
 }

انظر الوثائق المرجعية V1 HTTP لمزيد من التفاصيل كاملة على مفاتيح المتاحة في كتل منصة محددة في نص الرسالة. لمزيد من المعلومات حول إنشاء طلبات الإرسال التي تحتوي على نص الرسالة، انظر بناء إرسال الطلبات .

خيارات التوصيل

يوفر FCM مجموعة محددة من خيارات التسليم للرسائل المرسلة إلى أجهزة Android ، ويسمح بخيارات مماثلة على iOS والويب. على سبيل المثال، يتم اعتماد "للطي" سلوك رسالة على الروبوت عبر FCM في collapse_key ، على دائرة الرقابة الداخلية عبر apns-collapse-id ، والجافا سكريبت / الانترنت عبر Topic . للحصول على التفاصيل ، راجع الأوصاف في هذا القسم والوثائق المرجعية ذات الصلة.

الرسائل غير القابلة للطي والقابلة للطي

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

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

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

رسالة لطي هي الرسالة التي قد تحل محلها رسالة جديدة إذا لم يتم بعد تسليمها إلى الجهاز.

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

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

رسائل الموضوع التي لا تحتوي على حمولة قابلة للطي بشكل افتراضي.

ما الذي يجب علي استخدامه؟

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

استخدام السيناريو كيف ترسل
غير قابل للطي كل رسالة مهمة لتطبيق العميل ويجب تسليمها. باستثناء رسائل التنبيه ، تكون جميع الرسائل غير قابلة للطي افتراضيًا.
انهيار عندما تكون هناك رسالة أحدث تعرض رسالة قديمة ذات صلة غير ذات صلة بتطبيق العميل ، فإن FCM تستبدل الرسالة القديمة. على سبيل المثال: الرسائل المستخدمة لبدء مزامنة البيانات من الخادم ، أو رسائل التنبيه القديمة. قم بتعيين المعلمة المناسبة في طلب الرسالة الخاص بك:
  • collapseKey على الروبوت
  • apns-collapse-id على دائرة الرقابة الداخلية
  • Topic على الويب
  • collapse_key في البروتوكولات القديمة (جميع المنابر)

تحديد أولوية الرسالة

لديك خياران لتعيين أولوية التسليم للرسائل المتلقية للمعلومات على Android: الأولوية العادية والعالية. يعمل تسليم الرسائل العادية وذات الأولوية العالية على النحو التالي:

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

    عند تلقي رسالة الأفضلية العادية على الروبوت أن تطلب مزامنة البيانات الأساسية عن التطبيق الخاص بك، يمكنك جدولة مهمة مع WorkManager على التعامل معها عندما تتوفر الشبكة.

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

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

في ما يلي مثال على رسالة ذات أولوية عادية تم إرسالها عبر بروتوكول FCM HTTP v1 لإعلام مشترك في المجلة أن المحتوى الجديد متاح للتنزيل:

{
  "message":{
    "topic":"subscriber-updates",
    "notification":{
      "body" : "This week's edition is now available.",
      "title" : "NewsMagazine.com",
    },
    "data" : {
      "volume" : "3.21.15",
      "contents" : "http://www.news-magazine.com/world-week/21659772"
    },
    "android":{
      "priority":"normal"
    },
    "apns":{
      "headers":{
        "apns-priority":"5"
      }
    },
    "webpush": {
      "headers": {
        "Urgency": "high"
      }
    }
  }
}

لمزيد من التفاصيل الخاصة بالنظام الأساسي حول تحديد أولوية الرسالة:

تحديد عمر الرسالة

عادةً ما يسلم FCM الرسائل فور إرسالها. ومع ذلك ، قد لا يكون هذا ممكنًا دائمًا. على سبيل المثال ، إذا كان النظام الأساسي هو Android ، فيمكن إيقاف تشغيل الجهاز أو عدم الاتصال بالإنترنت أو عدم توفره بأي طريقة أخرى. أو قد تؤخر FCM الرسائل عمدًا لمنع التطبيق من استهلاك موارد زائدة والتأثير سلبًا على عمر البطارية.

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

في Android و Web / JavaScript ، يمكنك تحديد أقصى عمر للرسالة. يجب أن تكون القيمة مدتها من 0 إلى 2،419،200 ثانية (28 يومًا) ، وهي تتوافق مع أقصى فترة زمنية يخزن فيها FCM ويحاول تسليم الرسالة. الطلبات التي لا تحتوي على هذا الحقل تكون المدة الافتراضية هي أربعة أسابيع كحد أقصى.

فيما يلي بعض الاستخدامات الممكنة لهذه الميزة:

  • مكالمات واردة دردشة فيديو
  • انتهاء صلاحية أحداث الدعوات
  • أحداث التقويم

ميزة أخرى لتحديد العمر الافتراضي للرسالة هي أن FCM لا تخنق الرسائل مطلقًا بقيمة وقت البقاء 0 ثانية. بمعنى آخر ، تضمن FCM بذل أقصى جهد للرسائل التي يجب تسليمها "الآن أو أبدًا". نضع في اعتبارنا أن time_to_live يتم تجاهل قيمة 0 رسائل الوسائل التي لا يمكن تسليمها على الفور. ومع ذلك ، نظرًا لأنه لا يتم تخزين مثل هذه الرسائل مطلقًا ، فإن هذا يوفر أفضل زمن انتقال لإرسال رسائل الإشعارات.

فيما يلي مثال لطلب يتضمن TTL:

{
  "message":{
    "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "data":{
      "Nick" : "Mario",
      "body" : "great match!",
      "Room" : "PortugalVSDenmark"
    },
    "apns":{
      "headers":{
        "apns-expiration":"1604750400"
      }
    },
    "android":{
      "ttl":"4500s"
    },
    "webpush":{
      "headers":{
        "TTL":"4500"
      }
    }
  }
}

استقبال الرسائل من عدة مرسلين

يسمح FCM لعدة أطراف بإرسال رسائل إلى نفس تطبيق العميل. على سبيل المثال ، لنفترض أن تطبيق العميل عبارة عن مجمّع مقالات يضم عدة مساهمين ، ويجب أن يتمكن كل منهم من إرسال رسالة عند نشر مقالة جديدة. قد تحتوي هذه الرسالة على عنوان URL حتى يتمكن تطبيق العميل من تنزيل المقالة. بدلاً من الاضطرار إلى مركزية جميع أنشطة الإرسال في مكان واحد ، يمنحك FCM القدرة على السماح لكل من هؤلاء المساهمين بإرسال رسائله الخاصة.

لتمكين هذه الميزة، تأكد أن لديك كل المرسل هوية المرسل . عند طلب التسجيل ، يقوم تطبيق العميل بجلب الرمز المميز عدة مرات ، في كل مرة بمعرف مرسل مختلف في حقل الجمهور ، باستخدام طريقة استرداد الرمز المميز للنظام الأساسي المحدد:

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

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

لاحظ أن هناك حدًا يبلغ 100 مرسل متعدد.

عمر الرسالة

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

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

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

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

للحصول على مزيد من المعلومات حول تسليم الرسالة:

    للحصول على مزيد من التبصر في إيصال الرسائل على أجهزة Android أو iOS، راجع لوحة القيادة التقارير FCM ، الذي يسجل عدد الرسائل المرسلة وفتح على أجهزة دائرة الرقابة الداخلية والروبوت، جنبا إلى جنب مع بيانات ل "انطباعات" (الإخطارات التي اطلعت عليها المستخدمين) لالروبوت تطبيقات.

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

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

الخنق والقشور

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

اختناق الرسائل القابلة للطي

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

على سبيل المثال ، إذا أرسلت عددًا كبيرًا من طلبات مزامنة البريد الإلكتروني الجديدة إلى جهاز واحد ، فقد نؤخر طلب مزامنة البريد الإلكتروني التالي بضع دقائق حتى يتمكن الجهاز من المزامنة بمعدل متوسط ​​أقل. يتم إجراء هذا الخنق بشكل صارم للحد من تأثير البطارية الذي يعاني منه المستخدم.

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

نقصر الرسائل القابلة للطي على سلسلة من 20 رسالة لكل تطبيق لكل جهاز ، مع إعادة تعبئة رسالة واحدة كل 3 دقائق.

اختناق خادم XMPP

لقد حددنا معدل اتصالك بخوادم FCM XMPP بـ 400 اتصال في الدقيقة لكل مشروع. لا ينبغي أن تكون هذه مشكلة في توصيل الرسائل ، ولكنها مهمة لضمان استقرار نظامنا.

لكل مشروع ، يسمح FCM بـ 2500 وصلة على التوازي.

الحد الأقصى لمعدل الرسائل لجهاز واحد

يمكنك إرسال ما يصل إلى 240 رسالة / دقيقة و 5000 رسالة / ساعة لجهاز واحد. تهدف هذه العتبة العالية إلى السماح بدفقات قصيرة المدى لحركة المرور ، كما هو الحال عندما يتفاعل المستخدمون بسرعة عبر الدردشة. يمنع هذا الحد الأخطاء في إرسال المنطق من استنزاف بطارية الجهاز عن غير قصد.

حد الرسائل المنبع

علينا أن نحد الرسائل المنبع على 1500000 / دقيقة لكل مشروع لتجنب إثقال ملقمات الوجهة المنبع.

نحد من إرسال الرسائل الأولية لكل جهاز عند 1000 / دقيقة للحماية من استنزاف البطارية من السلوك السيئ للتطبيق.

حد رسالة الموضوع

معدل إضافة / إزالة الاشتراك في الموضوع محدد بـ 3،000 QPS لكل مشروع.

لمعدلات إرسال الرسالة، انظر Fanout الخنق .

خنق Fanout

رسالة fanout هو عملية إرسال رسالة إلى أجهزة متعددة، مثل عند استهداف الموضوعات والجماعات، أو عند استخدام الملحن الإخطارات إلى الجمهور المستهدف أو شرائح المستخدمين.

لا يتم نشر الرسائل بشكل فوري ، ولذلك في بعض الأحيان يكون لديك العديد من المعجبين قيد التقدم بشكل متزامن. لقد حددنا عدد رسائل الترجيح المتزامنة لكل مشروع بـ 1000. بعد ذلك ، قد نرفض طلبات التوزيع الإضافية أو نؤجل التوزيع الموسع للطلبات حتى تكتمل بعض عمليات التوزيع الجارية بالفعل.

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

منافذ FCM وجدار الحماية الخاص بك

إذا كان لدى مؤسستك جدار حماية لتقييد حركة المرور إلى الإنترنت أو منه ، فأنت بحاجة إلى تكوينه للسماح للأجهزة المحمولة بالاتصال بـ FCM حتى تتمكن الأجهزة الموجودة على شبكتك من تلقي الرسائل. يستخدم FCM عادةً المنفذ 5228 ، ولكنه يستخدم أحيانًا 443 و 5229 و 5230.

بالنسبة للأجهزة المتصلة على شبكتك ، لا توفر FCM عناوين IP محددة لأن نطاق IP الخاص بنا يتغير كثيرًا وقد تصبح قواعد جدار الحماية لديك قديمة ، مما يؤثر على تجربة المستخدمين لديك. من الناحية المثالية ، قم بإدراج المنافذ 5228-5230 و 443 بدون قيود IP. ومع ذلك، إذا كان يجب أن يكون هناك تقييد IP، يجب أن allowlist كل من عناوين IP المدرجة في goog.json . يتم تحديث هذه القائمة الكبيرة بانتظام ، ويوصى بتحديث القواعد الخاصة بك على أساس شهري. غالبًا ما تكون المشكلات الناتجة عن قيود IP لجدار الحماية متقطعة ويصعب تشخيصها.

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

المنافذ المراد فتحها:

  • 5228
  • 5229
  • 5230
  • 443

أسماء المضيف المراد فتحها:

  • mtalk.google.com
  • mtalk4.google.com
  • mtalk-staging.google.com
  • mtalk-dev.google.com
  • alt1-mtalk.google.com
  • alt2-mtalk.google.com
  • alt3-mtalk.google.com
  • alt4-mtalk.google.com
  • alt5-mtalk.google.com
  • alt6-mtalk.google.com
  • alt7-mtalk.google.com
  • alt8-mtalk.google.com
  • android.clients.google.com
  • device-provisioning.googleapis.com

ترجمة عنوان الشبكة و / أو جدران الحماية الخاصة بفحص الحزم المصحوب بالحالة:

إذا كانت شبكتك تنفذ ترجمة عنوان الشبكة (NAT) أو فحص الحزمة ذات الحالة (SPI) ، فنفذ مهلة 30 دقيقة أو أكبر لاتصالاتنا عبر المنافذ 5228-5230. يتيح لنا ذلك توفير اتصال موثوق مع تقليل استهلاك بطارية الأجهزة المحمولة الخاصة بالمستخدمين.

أوراق اعتماد

بناءً على ميزات FCM التي تنفذها ، قد تحتاج إلى بيانات الاعتماد التالية من مشروع Firebase:

معرف المشروع معرّف فريد لمشروع Firebase ، يُستخدم في الطلبات إلى نقطة نهاية FCM v1 HTTP. تتوفر هذه القيمة في Firebase حدة إعدادات جزء.
رمز التسجيل

سلسلة رمز مميز فريد تحدد كل مثيل تطبيق عميل. رمز التسجيل مطلوب لجهاز واحد ومراسلة مجموعة الجهاز. لاحظ أنه يجب الاحتفاظ بسرية الرموز المميزة للتسجيل.

هوية المرسل قيمة عددية فريدة من نوعها خلقت عند إنشاء مشروع Firebase الخاصة بك، وهي متاحة في سحابة التراسل علامة التبويب الجزء Firebase حدة إعدادات. يتم استخدام معرف المرسل لتحديد كل مرسل يمكنه إرسال رسائل إلى تطبيق العميل.
رمز وصول رمز OAuth 2.0 مميز قصير العمر يسمح بالطلبات لواجهة برمجة تطبيقات HTTP v1. يرتبط هذا الرمز المميز بحساب خدمة ينتمي إلى مشروع Firebase الخاص بك. لإنشاء والوصول تدوير الرموز، اتبع الخطوات الموضحة في تخويل إرسال الطلبات .
مفتاح الخادم (للبروتوكولات القديمة)

مفتاح خادم يصرح لخادم التطبيق بالوصول إلى خدمات Google ، بما في ذلك إرسال الرسائل عبر بروتوكولات Firebase Cloud Messaging القديمة. تحصل على مفتاح الخادم عند إنشاء مشروع Firebase. يمكنك مشاهدته في سحابة التراسل علامة التبويب الجزء Firebase حدة إعدادات.

هام: لا تقم بتضمين أي مكان مفتاح الخادم في رمز العميل الخاص بك. تأكد أيضًا من استخدام مفاتيح الخادم فقط لتفويض خادم التطبيق الخاص بك. تم رفض مفاتيح Android و iOS والمتصفح بواسطة FCM.