يتوفّر لك خياران لتحديد أولوية التسليم للرسائل الواردة على Android، وهما الأولوية العادية والأولوية العالية. يتم تسليم الرسائل العادية والرسائل ذات الأولوية العالية على النحو التالي:
أولوية عادية: هذه هي الأولوية التلقائية لرسائل البيانات والإشعارات. يتم تسليم الرسائل ذات الأولوية العادية فورًا عندما لا يكون الجهاز في وضع السكون. عندما يكون الجهاز في وضع السكون، قد يتأخر تسليم الرسالة للحفاظ على شحن البطارية إلى أن يخرج الجهاز من وضع السكون. بالنسبة إلى الرسائل الأقل حساسية للوقت، مثل الإشعارات بالرسائل الإلكترونية الجديدة أو الحفاظ على مزامنة واجهة المستخدم أو مزامنة بيانات التطبيق في الخلفية، اختَر أولوية التسليم العادية.
الأولوية العالية: تحاول خدمة FCM إرسال الرسائل ذات الأولوية العالية على الفور، ما يسمح لها بتنبيه الجهاز إذا كان في وضع السكون عند الضرورة وتشغيل بعض عمليات المعالجة المحدودة (بما في ذلك الوصول المحدود جدًا إلى الشبكة).FCM يجب أن تؤدي الرسائل ذات الأولوية العالية بشكل عام إلى تفاعل المستخدم مع تطبيقك أو إشعاراته.
تحديد ما إذا كانت الرسالة ذات أولوية قصوى أو عادية
في حين أنّ الرسائل ذات الأولوية العادية مناسبة للتحديثات العامة، يمكنك اختيار الأولوية العالية عندما تحتاج إلى ضمان التسليم الفوري للأمور أو الإجراءات العاجلة. بما أنّ وقت تسليم الرسائل ذات الأولوية العادية يمكن أن يتأثر بوضع "السكون"، فإنّ ضبط معظم الإشعارات المرئية للمستخدمين على أولوية عالية سيضمن تسليمها على الفور. على سبيل المثال، يجب ضبط الإشعارات، مثل رسائل المحادثة أو المشاكل المتعلّقة بحساب أو إشعارات توصيل الطعام، على الأولوية القصوى.
معالجة الرسائل ذات الأولوية العالية والعادية
بالنسبة إلى الرسائل ذات الأولوية العالية والعادية التي يتم تلقّيها على جهاز Android، يتم منح عدة ثوانٍ لمعالجة حمولة الرسالة في معالج onMessageReceived
، مع تخصيص وقت أطول قليلاً للرسائل ذات الأولوية العالية مقارنةً بالرسائل ذات الأولوية العادية. ومن المتوقّع أن يكون هذا الوقت طويلاً بما يكفي لعرض إشعار على الفور. إذا كان عليك اتّخاذ أي إجراءات إضافية، مثل تحميل صورة من مساحة تخزين الجهاز أو طلب بيانات من خوادمك لجمع محتوى إضافي، عليك اتّخاذ خطوات إضافية.
يتم استدعاء الطريقة onMessageReceived
في سلسلة عامل منفصلة. كإحدى أفضل الممارسات، عليك معالجة حمولة الرسالة وعرض إشعار على الفور ضمن طريقة onMessageReceived
. يجب عدم إجراء
طلبات إضافية غير متزامنة على الشبكة أو معالجة الحمولة على سلسلة محادثات منفصلة
ضمن طريقة onMessageReceived
، لأنّ ذلك قد يؤدي إلى خروج تطبيقك من
دورة حياة عملية صالحة
قبل اكتمال معالجة الحمولة. في حال حدوث ذلك، قد تلاحظ أنّ بعض رسائل FCM التي يتم إرسالها تؤدي إلى تأخُّر الإشعارات أو عدم ظهورها.
إذا كنت بحاجة إلى وقت إضافي لمعالجة رسالتك، مثلاً لاسترداد imageUrl
مضمّن في حمولة الرسالة، عليك استخدام بنية مثل WorkManager
أو خدمة تعمل في المقدّمة لتمديد مدة بقاء التطبيق. يجب اتّباع الإرشادات التالية عند تجاوز طريقة onMessageReceived
للتأكّد من معالجة إشعاراتك بالكامل.
- بالنسبة إلى الإشعارات ذات الأولوية القصوى: ابدأ مهمة معجّلة باستخدام
WorkManager
في Android للتأكّد من أنّ الإشعار ذي الأولوية القصوى يحصل على وقت معالجة ذي أولوية للتأكّد من أنّ عرض الإشعار يتم بشكل كامل. إذا كنت قلقًا بشأن استنفاد حصص المهام المعجَّلة نتيجة المعالجة ذات الأولوية العالية في FCM، لا داعي للقلق. هناك إعفاء مؤقت للوظائف السريعة التي تتم جدولتها مباشرةً بعد إرسال رسالةonMessageReceived
ذات أولوية عالية من FCM. - بالنسبة إلى الإشعارات ذات الأولوية العادية: ابدأ إشعارًا
WorkRequest
عاديًاWorkRequest
باستخدامWorkManager
في Android بدلاً من ذلك. سيؤدي ذلك إلى التأكّد من معالجة العمل الإضافي المطلوب لمعالجة إشعارك في النهاية، بدون استخدام المعالجة ذات الأولوية والتسبّب في مشاكل غير ضرورية في استهلاك البطارية.
تحديد أولوية الرسائل
يمكنك إرسال إشعارات إلى المستخدمين باستخدام Admin SDK وواجهة برمجة التطبيقات FCM REST ووحدة تحكّم Firebase. لتغيير إعداد الأولوية من خلال Admin SDK وFCM REST API، عليك تعديل حمولة JSON للرسالة. يمكنك استخدام نموذج الرمز التالي لمعرفة كيفية ضبط الأولوية على "عالية". بالنسبة إلى الإشعارات المرسَلة من وحدة التحكّم، لا تتوفّر إمكانية ضبط حقول الإشعارات الخاصة بنظام Android.
{
"message": {
"notification": {
"body": "Purchase exceeding $500 detected",
"title": "Credit card purchase"
},
"data": {
"purchaser": "Your child",
"items": "Gravity Defier Sneakers"
},
"android": {
"priority": "high"
},
"apns": {
"headers": {
"apns-priority": "5"
}
}
}
}
اختبار الإشعارات ذات الأولوية القصوى في "وضع السكون"
للتأكّد من تلقّي الإشعارات ذات الأولوية العالية ومعالجتها بشكل صحيح عند تلقّيها من قِبل المستخدم، اتّبِع التعليمات التالية لاختبار إشعاراتك:
- اضبط جهازك على "وضع السكون" باتّباع التعليمات الواردة في مقالة اختبار تطبيقك باستخدام "وضع السكون".
- يمكنك الوصول إلى رمز التسجيل الخاص بجهاز FCM من تطبيقك على جهاز الاختبار. لمزيد من المعلومات حول كيفية الوصول إلى الرمز المميز، يُرجى الاطّلاع على إرسال رسالة اختبار إلى تطبيق يعمل في الخلفية.
- بعد الحصول على الرمز المميّز FCM، أرسِل إشعارك ذي الأولوية العالية إلى الجهاز التجريبي باستخدام رمز إرسال الإشعارات FCM أو أمر cURL يتضمّن مَعلمات إعدادات تتطابق مع إشعارك ذي الأولوية العالية.
إلغاء أولوية FCM العالية على Android
تهدف الرسائل ذات الأولوية العالية على Android إلى عرض محتوى مرئي للمستخدمين يتطلّب اتخاذ إجراء فوري، ويجب أن تؤدي إلى ظهور إشعارات للمستخدمين. إذا رصدت FCM نمطًا لا تؤدي فيه الرسائل إلى ظهور إشعارات للمستخدمين، قد يتم خفض أولوية رسائلك إلى الأولوية العادية أو تفويضها إلى "خدمات Google Play" لمعالجتها.
تستخدم FCM 7 أيام من سلوك الرسائل عند تحديد ما إذا كان سيتم خفض أولوية الرسائل أو إرسالها عبر وكيل. ويتم اتّخاذ هذا القرار بشكل مستقل لكل مثيل من تطبيقك. إذا تم عرض الإشعارات استجابةً للرسائل ذات الأولوية العالية بطريقة مرئية للمستخدم، لن تتأثر رسائلك المستقبلية ذات الأولوية العالية.
تفويض الإشعارات باستخدام "خدمات Google Play"
تتم إعادة توجيه رسائل الإشعارات ذات الأولوية القصوى التي تستوفي معايير معيّنة من خلال "خدمات Google Play" بدلاً من خفض أولويتها. ويعني ذلك أنّ "خدمات Google Play" تعرض الإشعارات نيابةً عن التطبيق بدون الحاجة إلى تشغيله، وذلك بهدف تقديم تجربة أفضل للمستخدمين على أجهزة Android.
يُرجى العِلم أنّ رسائل الإشعارات التي يتم توجيهها من خلال خادم وكيل تُحدث تغييرات في طريقة تسجيل الإحصاءات ذات الصلة بتلقّي الرسائل:
- لكي يتم تسجيل إحصاءات الإشعارات التي يتم توجيهها من خلال خادم وكيل، يجب أن يستخدم تطبيقك الإصدار 24.0.0 أو إصدارًا أحدث من حزمة تطوير البرامج (SDK) لخدمة FCM.
- قد تلاحظ تأخيرات أو انخفاضًا في عدد الرسائل التي تتلقّاها مقارنةً بالعدد قبل طرح الإشعارات الوكيلة. يرجع ذلك إلى أنّ إحصاءات الإشعارات التي يتم توجيهها يتم تسجيلها فقط عند بدء تشغيل تطبيقك، وقد لا يتم تسجيلها على الإطلاق إذا لم يؤدِّ الإشعار إلى فتح التطبيق.
يُعدّ توجيه رسائل الإشعارات بهذه الطريقة السلوك التلقائي للتطبيقات التي تستخدم الإصدار Android Q والإصدارات الأحدث و"خدمات Google Play" بالإصدار 19054000 أو الإصدارات الأحدث. يتم توجيه الرسائل المرسَلة من خلال HTTP v1 API عبر وكيل، ولكن لن يتم توجيه الرسائل المرسَلة من خلال وحدة تحكّم Firebase أو واجهات برمجة التطبيقات القديمة عبر وكيل. يُرجى العلم أنّ هذه الميزة في إصدارها التجريبي حاليًا، وهي قابلة للتغيير.
على الرغم من أنّنا ننصحك بشدة بإبقاء ميزة التفويض مفعّلة للاستفادة من مزاياها المتعلقة ببطارية الجهاز وذاكرته، يمكنك إيقاف هذا السلوك بأي من الطرق التالية:
- على مستوى التطبيق: في بيان التطبيق، أضِف التوجيه
<meta-data android:name= "delivery_metrics_exported_to_big_query_enabled" android:value="false"/>
. - على مستوى مثيل التطبيق: بالنسبة إلى مثيل التطبيق، اضبط
fun setNotificationDelegationEnabled(disable: Boolean): Task<Void!>
في مسار واجهة المستخدم لتطبيقك، وذلك حسب حالة الاستخدام المحدّدة. - على أساس كل رسالة: اضبط المفتاح
proxy
علىDENY
في العنصرAndroidNotification
لطلب الإرسال.
قياس خفض أولوية الرسائل على Android
الرسائل الفردية: عند التسليم، يمكنك تحديد ما إذا تم تخفيض أولوية رسالة فردية أم لا من خلال مقارنة الأولوية التي تم تسليمها، من getPriority()، بالأولوية الأصلية، من getOriginalPriority().
جميع الرسائل يمكن لواجهة برمجة التطبيقات FCM Aggregate Delivery Data API أن تُبلغ عن النسبة المئوية لجميع رسائلك إلى أجهزة Android التي يتم تخفيض أولويتها. قد يتم استبعاد بعض الرسائل من تقارير البيانات المجمّعة، ولكن بشكل عام، يجب أن تقدّم هذه التقارير نظرة شاملة على معدّلات خفض أولوية الرسائل. يمكنك الاطّلاع على مقالتنا حول بيانات التسليم المجمّعة للحصول على مزيد من المعلومات وعيّنة من الرمز البرمجي للاستعلام عن واجهة برمجة التطبيقات، ويمكنك أيضًا استكشافها من خلال أداة استكشاف واجهة برمجة التطبيقات.
الإشعارات المستندة إلى خادم وكيل: لن يتم احتساب الإشعارات التي يتم توجيهها من خلال وكيل في مقاييس التسليم الحالية في "المراسلة من خلال السحابة الإلكترونية من Firebase" أو "إحصاءات Google"، لذا قد ينخفض معدّل التسليم بنسبة تصل إلى% 15. لإعداد تقارير عن الرسائل التي تم توجيهها عبر خادم وكيل، استخدِم FCM Aggregate Delivery Data API. تعرض
ProxyNotificationInsightPercents
نسبة الإشعارات التي تم توجيهها بنجاح، بالإضافة إلى تفاصيل الرسائل التي يتعذّر توجيهها بنجاح.
تحديد المشاكل في تأخُّر الإشعارات وحلّها
تأكَّد من تفعيل الإشعارات في مثيل تطبيقك. إذا أوقف المستخدم إذن الإشعارات لتطبيقك، لن يتم نشر أي من إشعاراتك، ونتيجةً لذلك، سيتم خفض أولوية رسائلك. عليك التأكّد من تفعيل الإشعارات قبل إرسال رسائل ذات أولوية عالية إلى مثيل تطبيق.
تجنَّب إجراء طلبات إضافية من الشبكة عند معالجة الإشعار. بما أنّ نسبة صغيرة من مستخدمي أجهزة Android الجوّالة يستخدمون شبكات ذات معدل تأخير مرتفع، تجنَّب فتح اتصال بخوادمك قبل عرض إشعار. قد يكون الاتصال مجددًا بالخادم قبل انتهاء وقت المعالجة المسموح به أمرًا محفوفًا بالمخاطر بالنسبة إلى المستخدمين على الشبكات ذات وقت الاستجابة الطويل.
بدلاً من ذلك، أدرِج محتوى الإشعار في رسالة FCM واعرضه على الفور. إذا كنت بحاجة إلى مزامنة محتوى إضافي داخل التطبيق على Android، يمكنك جدولة مهمة باستخدام WorkManager للتعامل مع ذلك في الخلفية.