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