تقدّم هذه الصفحة مساعدة في تحديد المشاكل وحلّها وإجابات عن الأسئلة الشائعة حول Cloud Messaging.
ما الفرق بين "منشئ الإشعارات" وFCM؟
توفّر خدمة Firebase Cloud Messaging مجموعة كاملة من إمكانات المراسلة من خلال حِزم تطوير البرامج (SDK) للعملاء وبروتوكول خادم HTTP. بالنسبة إلى عمليات النشر التي تتطلّب ميزات أكثر تعقيدًا في المراسلة، تُعدّ خدمة FCM الخيار المناسب.
"منشئ الإشعارات" هو حلّ مراسلة خفيف الوزن وبدون خادم تم إنشاؤه على Firebase Cloud Messaging. باستخدام وحدة تحكّم رسومية سهلة الاستخدام ومتطلبات ترميز أقل، تتيح أداة "منشئ الإشعارات" للمستخدمين إرسال رسائل لإعادة جذب المستخدمين والاحتفاظ بهم وتعزيز تطوّر التطبيقات ودعم الحملات التسويقية.
| الإمكانات | منشئ الإشعارات | Cloud Messaging | |
|---|---|---|---|
| Target | جهاز واحد | ||
| العملاء المشتركون في مواضيع معيّنة (مثل الطقس) | |||
| العملاء في شريحة مستخدمين محدّدة مسبقًا (التطبيق والإصدار واللغة) | |||
| العملاء في شرائح جمهور محدّدة في "إحصاءات Google" | |||
| الأجهزة العميلة في مجموعات الأجهزة | |||
| التحميل من العميل إلى الخادم | |||
| نوع الرسالة | إشعارات يصل حجمها إلى 2 كيلوبايت | ||
| رسائل بيانات يصل حجمها إلى 4 كيلوبايت | |||
| التسليم | فوري | ||
| التوقيت المحلي المستقبلي لجهاز العميل | |||
| الإحصاءات | جمع بيانات إحصاءات الإشعارات المضمّنة وإحصاءات مسار الإحالة الناجحة |
هل أحتاج إلى استخدام خدمات Firebase الأخرى لاستخدام FCM؟
يمكنك استخدام Firebase Cloud Messaging كمكوّن مستقل بدون استخدام خدمات Firebase الأخرى.
لماذا تفشل الأجهزة المستهدَفة في تلقّي الرسائل؟
عندما يبدو أنّ الأجهزة لم تتلقَّ الرسائل بنجاح، تحقَّق أولاً من هذين السببين المحتملين:
معالجة الرسائل في المقدّمة لرسائل الإشعارات: تحتاج تطبيقات العميل إلى إضافة منطق معالجة الرسائل لمعالجة رسائل الإشعارات عندما يكون التطبيق في المقدّمة على الجهاز. يمكنك الاطّلاع على التفاصيل لنظامَي التشغيل iOS وAndroid.
القيود المفروضة على جدار حماية الشبكة إذا كانت مؤسستك تستخدم جدار حماية يفرض قيودًا على حركة البيانات من الإنترنت أو إليه، عليك ضبطه للسماح بإمكانية الاتصال مع FCM لكي تتمكّن تطبيقات عميل Firebase Cloud Messaging من تلقّي الرسائل. المنافذ التي يجب فتحها هي:
- 5228
- 5229
- 5230
يستخدم FCM عادةً المنفذ 5228، ولكنه يستخدم أحيانًا المنفذين 5229 و5230. لا يوفّر FCM عناوين IP محدّدة، لذا عليك السماح لجدار الحماية بقبول الاتصالات الصادرة لجميع عناوين IP المضمّنة في مجموعات عناوين IP الواردة في رقم النظام المستقل (ASN) 15169 الخاص بـ Google.
لماذا لا يتم استدعاء onMessageReceived في تطبيق Android؟
عندما يكون تطبيقك في الخلفية، يتم عرض رسائل الإشعارات في لوحة النظام، ولا يتم استدعاء onMessageReceived. بالنسبة إلى رسائل الإشعارات التي تتضمّن حمولة بيانات، يتم عرض رسالة الإشعار في لوحة النظام، ويمكن استرداد البيانات التي تم تضمينها في رسالة الإشعار من خلال الإجراء الذي يتم إطلاقه عندما ينقر المستخدم على الإشعار.
لمزيد من المعلومات، يُرجى الاطّلاع على تلقّي الرسائل ومعالجتها.
لماذا تظهر لي رسالة الخطأ 404 عندما أرسل رسائل إلى نسخة نشطة من التطبيق تمت استعادتها من نسخة احتياطية؟
رقم تعريف تثبيت Firebase (FID) هو معرّف نسخة افتراضية من التطبيق. يتم تلقائيًا الاحتفاظ بنسخة احتياطية من بيانات Firebase Installation واستعادتها. لذلك، في حالة الاستعادة، يتشارك مثيل التطبيق الذي تمت استعادته ومثيل التطبيق الأصلي رقم تعريف المثيل نفسه. بما أنّ FCM يخزّن رمزًا مميزًا واحدًا فقط لكل معرّف FID، إذا كان كل من مثيل التطبيق الأصلي ومثيل التطبيق الذي تمت استعادته قيد الاستخدام، فعندما يسجّل مثيل تطبيق واحد في FCM، تتم إزالة الرمز المميز لمثيل التطبيق الآخر، ما يتسبب في حدوث أخطاء 404.
ننصح المطوّرين باتّباع الخطوات التالية في تطبيقاتهم:
- استبعاد
بيانات تثبيت Firebase في النسخة الاحتياطية يتم تخزين بيانات تثبيت Firebase
في ملف
PersistedInstallation....json. اسم الملف هو ثابت للتطبيق، على سبيل المثال،<exclude domain="file" path="PersistedInstallation.W0R...GQ.json" />
أعلنت شركة Apple عن إيقاف بروتوكول APNs الثنائي القديم نهائيًا. هل عليّ اتّخاذ أي إجراء؟
لا، فقد انتقل Firebase Cloud Messaging إلى بروتوكول APNs المستند إلى HTTP/2 في عام 2017. إذا كنت تستخدم FCM لإرسال الإشعارات إلى أجهزة iOS، ليس عليك اتخاذ أي إجراء.
الحصص والحدود في FCM
كيف يمكنني إبلاغ قاعدة عملاء كبيرة في غضون دقيقتين؟
لا يمكن إتاحة حالة الاستخدام هذه. يجب توزيع عدد الزيارات على مدار 5 دقائق.
يُرسل تطبيقي إشعارات إلى المستخدمين بشأن الأحداث، ويجب تسليم هذه الرسائل على الفور لدعم نموذج أعمالي. هل يمكنني الحصول على حصة أكبر؟
لهذا السبب، لا يمكننا زيادة الحصة. يجب توزيع عدد الزيارات على مدار 5 دقائق لتجنُّب الزيارات المفاجئة.
رسائلي تدور حول الأحداث المجدولة. كيف يمكنني إرسال كل الزيارات في بداية الساعة؟
ننصحك ببدء إرسال الإشعارات قبل 5 دقائق على الأقل من بدء الحدث. بدلاً من ذلك، يمكنك إرسال رسائل
البيانات
وتنفيذ معالج onMessageReceived المماثل في نظامك الأساسي لجدولة
الإشعارات المحلية مسبقًا.
كيف يمكنني مراقبة استخدامي للحصة؟
يمكنك الاطّلاع على إرشادات Google Cloud حول كيفية رسم مقاييس الحصص ومراقبتها.
من الصعب عليّ وعلى نشاطي التجاري التعامل مع أخطاء 429. هل يمكنني الحصول على إعفاء أو حصة أكبر لتجنُّب أخطاء 429؟
ندرك أنّ حدود الحصص قد تشكّل تحديًا، ولكنّها ضرورية للحفاظ على موثوقية الخدمة، ولا يمكننا منح استثناءات. استخدِم عمليات إعادة المحاولة للتعامل مع الأخطاء 429 بشكل صحيح.
كم من الوقت سيستغرق تنفيذ طلب زيادة الحصة؟
يعتمد طلب زيادة الحصة على استخدامك لـ FCM. في أي حال، يمكنك توقُّع تلقّي ردّ في غضون بضعة أيام عمل. في بعض الحالات، قد يكون هناك بعض الأخذ والرد بشأن استخدامك لـ FCM والظروف المختلفة، مما قد يؤدي إلى إطالة العملية. إذا تم استيفاء جميع المتطلبات، ستتم معالجة معظم الطلبات في غضون أسبوعَين.
هل يمكنني الحصول على حصة أكبر لحدث مؤقت؟
يمكنك طلب حصة إضافية لدعم فعالية تستمر لمدة تصل إلى شهر واحد. يجب تقديم الطلب قبل شهر واحد على الأقل من موعد الفعالية مع توضيح تفاصيل موعد بدء الفعالية وانتهائها، وستبذل "FCM" كل جهد ممكن لتلبية الطلب. وفي حال الموافقة على هذه الزيادات، ستتم إعادتها إلى ما كانت عليه بعد تاريخ انتهاء الحدث.
هل حصتي الحالية عرضة للتغيير؟
مع أنّ Google لن تتخذ هذا الإجراء بسهولة، قد يتم تغيير الحصص حسب الحاجة لحماية سلامة النظام. وستُعلمك Google مسبقًا بهذه التغييرات عندما يكون ذلك ممكنًا. يُرجى الحرص على تعديل جهات الاتصال في اتفاقية Cloud MSA لزيادة فرص تلقّي الإشعارات عن الخدمة.
إيقاف واجهتَي برمجة تطبيقات قديمتَين نهائيًا (FCM)
سيتم إيقاف واجهات برمجة التطبيقات من جهة الخادم نهائيًا في سبتمبر 2026
ما هي واجهات برمجة التطبيقات والميزات التي تم إيقافها نهائيًا وسيتم إيقافها؟ ماذا يجب أن أفعل إذا كنت أستخدم واجهات برمجة التطبيقات هذه؟
تم إيقاف جميع واجهات برمجة تطبيقات خادم InstanceId وميزة مجموعة الأجهزة نهائيًا، وسيتم إيقافها في 29 سبتمبر 2027. يعرض الجدول التالي مزيدًا من التفاصيل حول الميزات/واجهات برمجة التطبيقات المتوقّفة نهائيًا والإجراء المطلوب.
| اسم واجهة برمجة التطبيقات | نقطة النهاية لواجهة برمجة التطبيقات | الغرض من الاستخدام | التأثير في العملاء | يجب اتّخاذ إجراء |
|---|---|---|---|---|
| InstanceId info API | https://iid.googleapis.com/iid/info | الحصول على معلومات ذات صلة برمز InstanceId أو رمز مميّز لخدمة "مراسلة Firebase السحابية" | بعد 29 سبتمبر 2027، سيتعذّر إرسال الطلبات إلى واجهة برمجة التطبيقات هذه. | بالنسبة إلى العملاء الذين يستخدمون واجهة برمجة التطبيقات للتحقّق من صحة الرموز المميّزة، استخدِموا واجهة برمجة التطبيقات V1 send API الخاصة بـ FCM واضبطوا validate_only على "صحيح".
بالنسبة إلى العملاء الذين يستخدمون واجهة برمجة التطبيقات للحصول على معلومات الاشتراك في المواضيع، عليهم الانتقال إلى واجهة برمجة التطبيقات الجديدة للاشتراك في المواضيع. |
| واجهة برمجة التطبيقات InstanceId للاشتراك في المواضيع | https://iid.googleapis.com/iid/v1/…/rel/topics https://iid.googleapis.com/iid/v1:batchAdd https://iid.googleapis.com/iid/v1:batchRemove |
الاشتراك في الرموز المميّزة لموضوع معيّن من خلال واجهة برمجة التطبيقات القديمة للاشتراك في المواضيع | بعد 29 سبتمبر 2027، سيتعذّر إرسال الطلبات إلى واجهات برمجة التطبيقات هذه. | انتقِل إلى واجهة برمجة التطبيقات الجديدة لخادم الاشتراك في المواضيع في FCM للاشتراك في المواضيع وإلغاء الاشتراك فيها. |
| واجهة برمجة تطبيقات الاستيراد المجمّع InstanceId | https://iid.googleapis.com/iid/v1:batchImport | إنشاء رموز مميّزة لخدمة FCM لنظام التشغيل iOS في دفعة واحدة من جهة الخادم | بعد 29 سبتمبر 2027، سيتعذّر إرسال الطلبات إلى واجهة برمجة التطبيقات هذه.
لن يكون من الممكن إنشاء عمليات تسجيل FCM من رموز APNs المميّزة من جهة الخادم. |
يمكنك استخدام خدمة APNs من Apple لإرسال الإشعارات باستخدام رموز APNs المميّزة.
للحصول على مزايا إضافية يوفّرها "FCM"، يمكنك دمج تطبيقك مع حزمة تطوير البرامج (SDK) لنظام التشغيل iOS من "FCM"، والتي ستنشئ عمليات تسجيل في "FCM" على الجهاز العميل. |
| واجهة برمجة التطبيقات لإدارة مجموعات الأجهزة | https://fcm.googleapis.com/fcm/notification https://fcm.googleapis.com/gcm/notification https://fcm.googleapis.com/iid/notification https://fcm.googleapis.com/notification |
إضافة أعضاء مجموعة الأجهزة أو إزالتهم أو استردادهم | بعد 29 سبتمبر 2027، سيتعذّر إرسال الطلبات إلى واجهة برمجة التطبيقات هذه. | يُرجى الاطّلاع على الإرشادات حول كيفية نقل البيانات من هذه الميزة.
سيظل من الممكن إرسال الرسائل إلى تسجيلات FCM الفردية بدلاً من الرموز المميّزة للمجموعة. |
| الإرسال إلى مجموعة أجهزة | https://fcm.googleapis.com/v1/projects/…/messages:send | إرسال الرسائل إلى مجموعات الأجهزة باستخدام notification_key للمجموعة | ستبقى واجهة برمجة التطبيقات هذه متاحة، ولكنّها لن تتيح استخدام رموز مجموعات الأجهزة بعد 29 سبتمبر 2027. |
إذا كنت أستخدم مدير SDK في Firebase لإدارة الاشتراكات في المواضيع، هل سأتأثر بعملية الإيقاف النهائي؟ ماذا يجب أن أفعل؟
إذا كنت تستخدم إصدارات سابقة من مدير SDK في Firebase لإدارة الاشتراكات في المواضيع، سيتأثر حسابك بعملية الإيقاف النهائي. يجب ترقية حزمة تطوير البرامج (SDK) الخاصة بمشرف Firebase إلى الإصدارات التالية:
| النظام الأساسي | إصدار Admin SDK المتأثر | إصدار مدير SDK المطلوب الترقية إليه |
|---|---|---|
| Node.js | <=14.4.0 | >=14.5.0 |
| Python | <=7.6.0 | >=7.7.0 |
| Java | <=9.10.0 | >=9.11.0 |
| متابعة | <=4.21.0 | >=4.22.0 |
| .NET | <=3.6.0 | >=3.7.0 |
هل سيتم تخفيض مستوى الخدمة قبل 29 سبتمبر 2027؟
لا، لديك 12 شهرًا لنقل البيانات من واجهات برمجة التطبيقات المتوقّفة نهائيًا إلى البدائل بدون أي تخفيض لمستوى الخدمة. ننصحك بشدة بالتخطيط لعملية نقل البيانات في أقرب وقت ممكن حتى لا تتأثر بعملية الإيقاف النهائي.
من المتوقّع أن تظهر لك أخطاء عند طلب واجهات برمجة التطبيقات المتوقّفة نهائيًا بعد 29 سبتمبر 2027.
هل يمكن للمستخدمين الجدد استخدام واجهات برمجة التطبيقات أو الميزات المتوقفة نهائيًا قبل إيقافها؟
يمكن للمستخدمين الجدد استخدام واجهات برمجة التطبيقات أو الميزات المتوقّفة نهائيًا قبل 1 يناير 2027. بعد 1 يناير 2027، لن يتمكّن المستخدمون الجدد من استخدام واجهات برمجة التطبيقات المتوقّفة نهائيًا. يمكن للمستخدمين الذين يستخدمون واجهات برمجة التطبيقات المتوقفة نهائيًا مواصلة استخدامها حتى 29 سبتمبر 2027.
الأسئلة الشائعة حول AndroidConfigV2
إلى متى ستظل واجهة برمجة التطبيقات AndroidConfig (الإصدار 1) القديمة متاحة؟
تخطّط FCM لمواصلة إتاحة حمولات الإصدار 1 من AndroidConfig لعدة سنوات بعد إصدار AndroidConfigV2 المتوفّر للجمهور العام. على الرغم من أنّ المخطط الزمني لعملية النقل يمتد لعدة سنوات،
توفّر AndroidConfigV2 إمكانية تسليم الإشعارات بشكل أكثر قابلية للتوقّع، وننصحك
بإجراء عملية النقل في أقرب وقت ممكن.
ما هي إصدارات نظام التشغيل Android المتوافقة مع AndroidConfigV2؟
سيتوفّر تطبيق "AndroidConfigV2" على جميع إصدارات Android المتوافقة
مع Google. ستكون جميع الأجهزة متوافقة، باستثناء تلك التي يزيد عمرها عن 10 سنوات، عند إيقاف الإصدار 1 القديم من واجهة برمجة التطبيقات.
هل ستُرسل AndroidConfigV2 حمولات إلى الأجهزة التي تتوافق مع واجهة الإصدار 1 القديمة فقط، وبأي ترتيب يجب طرح التغييرات؟
نعم. عند إرسال طلب AndroidConfigV2، يترجم FCM وGMS Core
الحمولة تلقائيًا للأجهزة التي تعمل بحِزم تطوير البرامج (SDK) القديمة للعملاء أو
للتطبيقات التي لم تلغِ onNotificationReceived() أو
onBackgroundSyncReceived() بعد، ويتم تسليمها باستخدام onMessageReceived().
لماذا يتطلّب AndroidConfigV2 عرض الإشعارات من خلال حزمة تطوير البرامج (SDK) لخدمة FCM بدلاً من استدعاء NotificationManager.notify() مباشرةً؟
من خلال إرجاع NotificationResponse إلى حزمة تطوير البرامج (SDK) المفتوحة المصدر FCM أو استخدام FcmNotificationManager:
- يتلقّى تطبيقك نافذة تنفيذ محمية لفك تشفير الإشعار أو تخصيصه.
- إذا نفد الوقت المتاح لتطبيقك، تضمن خدمات GMS Core تسليم الإشعار في الوقت المناسب من خلال نشر إشعار احتياطي تم ضبطه في
remote_notification.notification.
هل يتعامل AndroidConfigV2 مع الإشعارات بشكل مختلف عندما يكون تطبيقي في المقدّمة مقارنةً بالخلفية؟
لا، على عكس رسائل الإشعارات القديمة من الإصدار الأول، لا يقسّم AndroidConfigV2
توجيه الرسائل استنادًا إلى ما إذا كان تطبيقك في المقدّمة أو الخلفية.
عند إرسال RemoteNotification، يتم عرض الإشعار
تلقائيًا في كلتا الحالتين ما لم يتم ضبط mutable_content: true
وكتم صوته صراحةً في onNotificationReceived() باستخدام
NotificationResponse.createEmpty().
ما هو الوقت الذي يحصل عليه تطبيقي عند معالجة إشعار RemoteNotification قابل للتغيير؟
عند ضبط mutable_content: true على RemoteNotification، يكون لدى تطبيقك ما يصل إلى 20 ثانية داخل onNotificationReceived() لفك تشفير الحمولات أو جلب مواد العرض الصغيرة (مثل الصور الرمزية) أو الاتصال بخادم التطبيق قبل عرض NotificationResponse. إذا تجاوزت معاودة الاتصال
20 ثانية، يتم إلغاء التنفيذ وينشر GMS Core
تلقائيًا إشعارًا احتياطيًا استنادًا إلى
حمولة remote_notification.notification.
كيف يتم تنفيذ إجراءات منع الإشعارات في RemoteNotifications القابلة للتغيير؟
يمكن للتطبيقات منع RemoteNotification من خلال عرض
NotificationResponse.suppress() من onNotificationReceived(). على سبيل المثال، عندما يتم تجاهل محادثة أو حظر مُرسِل أو تعذُّر التحقّق من صحة حمولة مشفّرة تمامًا بين الأطراف.
- في الخلفية: يمكن لتطبيقك منع ما يصل إلى% 25 من رسائل
RemoteNotificationالواردة خلال فترة زمنية متجددة. إذا تجاوز معدّل منع الإشعارات في الخلفية في تطبيقك %25، ستعرض خدمات Google Play تلقائيًا الإشعار الاحتياطي من حمولة بياناتremote_notification.notificationوتنشرها. - في المقدّمة: يمكنك إيقاف جميع الإشعارات عن بُعد عندما يكون التطبيق نشطًا في المقدّمة. على سبيل المثال، لعرض رسالة مؤقتة داخل التطبيق أو تحديث شاشة محادثة مفتوحة بدلاً من نشر إشعار من النظام.
هل يمكن لتطبيقي نشر إشعارات متعددة أو إلغاء إشعار حالي من إشعار RemoteNotification واحد؟
نعم. استخدِم ما يلي لإلغاء إشعارات متعددة أو نشرها:
- إلغاء إشعار واحد: يمكنك عرض
NotificationResponse.createCancel(tag, id)منonNotificationReceived()لإغلاق إشعار تم نشره سابقًا. - نشر إشعارات متعددة أو دمج عمليات الإلغاء والمنشورات: يمكنك استدعاء
getFcmNotificationManager(message)داخلonNotificationReceived()لاستدعاءpostNow(tag, id, notification)وcancelNow(tag, id)عدة مرات، وعرضmanager.finished()عند الاكتمال.
هل يمكن استخدام RemoteViews المخصّصة مع AndroidConfigV2؟
نعم، ستعمل عناصر RemoteViews المخصّصة مع AndroidConfigV2.
تُعرِض onNotificationReceived() عنصر Notification عاديًا في Android، وتظل جميع واجهات برمجة التطبيقات العادية للإشعارات في Android، مثل setCustomContentView()، متاحة. يُرجى العِلم أنّ RemoteViews وViews في وضع الصيانة، ويُنصح بنقل البيانات إلى Compose.