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