يتوفّر لك خياران لتحديد أولوية تسليم الرسائل الواردة على Android: الأولوية العادية والأولوية العالية. يتم تسليم الرسائل ذات الأولوية العادية والعالية على النحو التالي:
أولوية عادية: هذه هي الأولوية التلقائية لرسائل البيانات والإشعارات. يتم تسليم الرسائل ذات الأولوية العادية فورًا عندما لا يكون الجهاز في وضع السكون. عندما يكون الجهاز في وضع قيلولة، قد يتأخر التسليم للحفاظ على شحن البطارية إلى أن يخرج الجهاز من وضع قيلولة. بالنسبة إلى الرسائل الأقل حساسية للوقت، مثل الإشعارات بشأن الرسائل الإلكترونية الجديدة أو مزامنة واجهة المستخدم أو مزامنة بيانات التطبيق في الخلفية، اختَر أولوية التسليم العادية.
أولوية عالية: يحاول FCM تسليم الرسائل ذات الأولوية العالية على الفور، ما يسمح لـ FCM بتنشيط الجهاز في وضع السكون عند الضرورة وتنفيذ بعض عمليات المعالجة المحدودة (بما في ذلك الوصول المحدود جدًا إلى الشبكة). يجب أن تؤدي الرسائل ذات الأولوية العالية بشكل عام إلى تفاعل المستخدم مع تطبيقك أو إشعاراته.
الاختيار بين الرسائل ذات الأولوية القصوى والعادية
في حين أنّ الرسائل ذات الأولوية العادية مناسبة للتحديثات العامة، اختَر الأولوية العالية عندما تحتاج إلى ضمان التسليم الفوري للمسائل أو الإجراءات العاجلة. بما أنّ مدة تسليم الرسائل ذات الأولوية العادية يمكن أن تتأثر بوضع السكون، فإنّ ضبط معظم الإشعارات المرئية للمستخدم على أولوية عالية سيضمن تسليمها على الفور. على سبيل المثال، يجب تعيين الإشعارات مثل رسائل الدردشة أو مشاكل الحساب أو تحديثات توصيل الطعام على أولوية عالية.
معالجة الرسائل ذات الأولوية العالية والعادية
بالنسبة إلى الرسائل ذات الأولوية العالية والعادية التي يتم تلقّيها على جهاز Android، يتم منح عدة ثوانٍ لمعالجة حمولة الرسالة في معالج onMessageReceived، مع تخصيص وقت أطول قليلاً للرسائل ذات الأولوية العالية مقارنةً بالرسائل ذات الأولوية العادية. من المتوقّع أن يكون هذا الوقت كافيًا فقط
لعرض الإشعار على الفور. إذا كان عليك تنفيذ أي عمل إضافي، مثل تحميل صورة من مساحة التخزين على الجهاز أو الاتصال بالخوادم لجمع محتوى إضافي، ستحتاج إلى اتّخاذ خطوات إضافية.
يتم استدعاء طريقة onMessageReceived في سلسلة وحدات عاملة منفصلة. كأفضل ممارسة، يجب معالجة حمولة الرسالة وعرض إشعار على الفور ضمن طريقة onMessageReceived. يجب عدم إجراء مكالمات شبكة غير متزامنة إضافية أو معالجة الحمولة في سلسلة محادثات منفصلة ضمن طريقة onMessageReceived، لأنّ ذلك قد يؤدي إلى خروج تطبيقك من دورة حياة عملية صالحة قبل معالجة الحمولة بالكامل. في هذه الحالة، قد تلاحظ أنّ بعض رسائل FCM التي يتم إرسالها تؤدي إلى تأخُّر الإشعارات أو عدم ظهورها.
إذا كنت بحاجة إلى وقت إضافي لمعالجة رسالتك، مثلاً لجلب imageUrl مضمّن في حمولة الرسالة، عليك استخدام بنية مثل WorkManager أو خدمة تعمل في المقدّمة لتمديد مراحل نشاط التطبيق. يجب اتّباع الإرشادات التالية عند
إلغاء طريقة onMessageReceived
للتأكّد من معالجة الإشعارات بالكامل.
- بالنسبة إلى الإشعارات ذات الأولوية القصوى: ابدأ
مهمة مُعجَّلة
باستخدام
WorkManagerفي Android للتأكّد من أنّ الإشعار ذا الأولوية القصوى يحصل على وقت معالجة ذي أولوية للتأكّد من اكتمال عملية عرض الإشعار. الخبر السار هو أنّه إذا كنت قلقًا بشأن استنفاد الحصص المخصّصة للمهام المُعجَّلة نتيجةً لمعالجة رسائل FCM ذات الأولوية العالية، فلا داعي للقلق. هناك استثناء قصير للمهام المُعجَّلة التي تتم جدولتها فورًا بعد إرسال رسالةonMessageReceivedذات أولوية عالية من خلال "مراسلة Firebase السحابية". - بالنسبة إلى الإشعارات ذات الأولوية العادية: ابدأ
WorkRequestعاديًا باستخدامWorkManagerفي Android بدلاً من ذلك. سيؤدي ذلك إلى التحقّق من أنّ العمل الإضافي المطلوب لمعالجة الإشعار تتم معالجته في النهاية، بدون استخدام المعالجة ذات الأولوية والتسبّب في مشاكل غير ضرورية في استخدام البطارية.
ضبط أولوية الرسائل
يمكنك إرسال إشعارات إلى المستخدمين باستخدام Admin SDK وواجهة برمجة التطبيقات REST API في FCM ووحدة تحكّم Firebase. لتغيير إعدادات الأولوية من واجهة برمجة التطبيقات REST API في Admin SDK وFCM، عليك تعديل حمولة 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"
}
}
}
}
اختبار الإشعارات ذات الأولوية القصوى في وضع Doze
للتأكّد من تلقّي الإشعارات ذات الأولوية العالية ومعالجتها بشكل صحيح عند تلقّيها من قِبل المستخدم، اتّبِع هذه التعليمات لاختبار إشعاراتك:
- اضبط جهازك على وضع "الاستراحة" باتّباع التعليمات الواردة في مقالة اختبار تطبيقك باستخدام وضع "الاستراحة".
- الوصول إلى رمز تسجيل FCM من تطبيقك على الجهاز الاختباري لمزيد من المعلومات حول كيفية الوصول إلى الرمز المميّز، يُرجى الاطّلاع على مقالة إرسال رسالة اختبارية إلى تطبيق في الخلفية.
- بعد الحصول على رمز FCM المميّز، أرسِل الإشعار ذي الأولوية القصوى إلى الجهاز التجريبي باستخدام رمز إرسال الإشعارات FCM أو أمر cURL يحتوي على مَعلمات ضبط تتطابق مع الإشعار ذي الأولوية القصوى.
إلغاء أولوية FCM العالية على Android
الرسائل ذات الأولوية القصوى على Android مخصّصة للمحتوى الحسّاس للوقت والذي يظهر للمستخدم، ويجب أن تؤدي إلى إشعارات موجّهة للمستخدمين. إذا رصدت FCM نمطًا لا تؤدي فيه الرسائل إلى ظهور إشعارات موجّهة للمستخدمين، قد يتم خفض أولوية رسائلك إلى الأولوية العادية أو تفويضها لتتولّى "خدمات Google Play" معالجتها.
يستخدم FCM سلوك الرسائل لمدة 7 أيام عند تحديد ما إذا كان سيتم خفض أولوية الرسائل أو إرسالها عبر خادم وكيل، ويتم اتخاذ هذا القرار بشكل مستقل لكل مثيل من تطبيقك. إذا تم عرض الإشعارات بطريقة مرئية للمستخدم استجابةً للرسائل ذات الأولوية العالية، لن تتأثر رسائلك المستقبلية ذات الأولوية العالية.
تفويض الإشعارات من خلال "خدمات Google Play"
يتم إرسال رسائل الإشعارات ذات الأولوية القصوى التي تستوفي معايير معيّنة من خلال "خدمات Google Play" بدلاً من خفض أولويتها. يعني ذلك أنّ الإشعارات يتم عرضها من خلال "خدمات Google Play" نيابةً عن التطبيق، بدون الحاجة إلى تشغيل التطبيق. ويتم ذلك لتوفير تجربة مستخدم أفضل بشكل عام على أجهزة Android.
يُرجى العِلم أنّ رسائل الإشعارات الوكيلة تُحدث تغييرات في كيفية تسجيل الإحصاءات المتعلّقة بالرسائل التي يتم تلقّيها:
- لكي يتم تسجيل إحصاءات الإشعارات التي تم إرسالها عبر الخادم الوكيل، يجب أن يستخدم تطبيقك الإصدار 24.0.0 أو إصدارًا أحدث من حزمة تطوير البرامج (SDK) لخدمة "مراسلة Firebase السحابية".
- قد تلاحظ تأخيرات أو انخفاضات في عدد الرسائل المستلَمة مقارنةً بالعدد قبل طرح الإشعارات الوكيلة. يرجع ذلك إلى أنّ إحصاءات الإشعارات التي تمّ إرسالها عبر الخادم الوكيل لا يتمّ تسجيلها إلا بعد بدء تشغيل تطبيقك، وقد لا يتمّ تسجيلها على الإطلاق إذا لم يؤدِّ الإشعار إلى فتح التطبيق.
إنّ توجيه رسائل الإشعارات من خلال الخادم الوكيل بهذه الطريقة هو الإعداد التلقائي للتطبيقات التي تستخدم الإصدار Android Q والإصدارات الأحدث والإصدار 19054000 من "خدمات Google Play" أو الإصدارات الأحدث. يتم توجيه الرسائل المُرسَلة من خلال واجهة برمجة التطبيقات HTTP v1 عبر خادم وكيل، ولكن لن يتم توجيه الرسائل المُرسَلة من خلال وحدة تحكُّم 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().
كل الرسائل: يمكن أن توضّح واجهة برمجة التطبيقات Aggregate Delivery Data API في FCM النسبة المئوية لجميع رسائلك المرسَلة إلى أجهزة Android التي يتم خفض أولويتها. قد يتم حذف بعض الرسائل من تقارير البيانات المجمّعة، ولكن بشكل عام، من المفترض أن تقدّم هذه التقارير نظرة شاملة على معدّلات خفض أولوية الرسائل. يمكنك الاطّلاع على مقالتنا حول بيانات التسليم المجمّعة لمزيد من المعلومات والرموز النموذجية لإرسال طلبات البحث إلى واجهة برمجة التطبيقات، ويمكنك أيضًا استكشافها من خلال مستكشف واجهة برمجة التطبيقات.
الإشعارات الوكيلة: لن يتم احتساب الإشعارات التي يتم إرسالها عبر الخادم الوكيل في مقاييس التسليم الحالية في "مراسلة Firebase السحابية" أو "إحصاءات Google"، لذا قد تلاحظ انخفاضًا يصل إلى% 15 في مقاييس تسليم الإشعارات. لإعداد تقارير عن الرسائل التي تم إرسالها عبر خادم وكيل، استخدِم واجهة برمجة التطبيقات FCM Aggregate Delivery Data API.
ProxyNotificationInsightPercentsيعرض النسبة المئوية للإشعارات التي تم إرسالها بنجاح عبر الخادم الوكيل، بالإضافة إلى تفاصيل الرسائل التي لا يمكن إرسالها بنجاح عبر الخادم الوكيل.
تحديد المشاكل في تأخُّر الإشعارات وحلّها
تأكَّد من تفعيل الإشعارات في مثيل تطبيقك. إذا أوقف المستخدم إذن إرسال الإشعارات لتطبيقك، لن يتم نشر أي من إشعاراتك، وبالتالي سيتم خفض أولوية رسائلك. يجب التأكّد من تفعيل الإشعارات قبل إرسال رسائل ذات أولوية قصوى إلى مثيل تطبيق.
تجنَّب إجراء طلبات إضافية للشبكة عند معالجة الإشعار. بما أنّ جزءًا صغيرًا من مستخدمي أجهزة Android الجوّالة يستخدمون شبكات ذات وقت استجابة طويل، تجنَّب فتح اتصال بخوادمك قبل عرض إشعار. قد يكون الاتصال بالخادم قبل نهاية وقت المعالجة المسموح به محفوفًا بالمخاطر للمستخدمين على الشبكات ذات وقت الاستجابة العالي.
بدلاً من ذلك، يمكنك تضمين محتوى الإشعار في رسالة FCM وعرضه على الفور. إذا كنت بحاجة إلى مزامنة محتوى إضافي داخل التطبيق على Android، يمكنك جدولة مهمة باستخدام WorkManager للتعامل مع ذلك في الخلفية.