ضبط أولوية الرسائل على Android وإدارتها

لديك خياران لتحديد أولوية تسليم الرسائل الواردة على Android: الأولوية العادية والأولوية القصوى. إليك طريقة تسليم الرسائل ذات الأولوية العادية والقصوى:

  • أولوية عادية هذه هي الأولوية التلقائية لرسائل البيانات والإشعارات. يتم تسليم الرسائل ذات الأولوية العادية على الفور عندما لا يكون الجهاز في وضع السكون. عندما يكون الجهاز في وضع توفير شحن البطارية، قد يتم تأخير التسليم للحفاظ على شحن البطارية إلى أن يخرج الجهاز من هذا الوضع. بالنسبة إلى الرسائل الأقل حساسية للوقت، مثل الإشعارات بالرسائل الإلكترونية الجديدة أو مزامنة واجهة المستخدم أو مزامنة بيانات التطبيق في الخلفية، اختَر أولوية التسليم العادية.

  • أولوية قصوىFCM تحاول تسليم الرسائل ذات الأولوية القصوى على الفور، ما يسمح لها بتنبيه جهاز في وضع السكون عند الضرورة وتشغيل بعض عمليات المعالجة المحدودة (بما في ذلك الوصول إلى الشبكة بشكل محدود جدًا).FCM من المفترض أن تؤدي الرسائل ذات الأولوية القصوى بشكل عام إلى تفاعل المستخدم مع تطبيقك أو إشعاراته.

كيفية الاختيار بين الرسائل ذات الأولوية القصوى والعادية

في حين أنّ الرسائل ذات الأولوية العادية مناسبة للتحديثات العامة، اختَر الأولوية القصوى عندما تحتاج إلى ضمان التسليم الفوري للأمور أو الإجراءات العاجلة. بما أنّ وضع "توفير شحن البطارية" يمكن أن يؤثر في وقت تسليم الرسائل ذات الأولوية العادية، فإنّ ضبط معظم الإشعارات التي تظهر للمستخدم على الأولوية القصوى سيضمن تسليمها على الفور. على سبيل المثال، يجب ضبط الإشعارات، مثل رسائل المحادثة أو المشاكل في الحساب أو آخر الأخبار عن توصيل الطعام، على الأولوية القصوى.

معالجة الرسائل ذات الأولوية القصوى والعادية

بالنسبة إلى الرسائل ذات الأولوية القصوى والعادية التي يتم تلقّيها على جهاز Android، يتم منح عدة ثوانٍ لمعالجة حمولة الرسالة في معالج onMessageReceived، مع تخصيص وقت أطول قليلاً للرسائل ذات الأولوية القصوى مقارنةً بالرسائل ذات الأولوية العادية. من المفترض أن يكون هذا الوقت طويلاً بما يكفي لعرض إشعار على الفور. إذا كان عليك إجراء أي عمل إضافي، مثل تحميل صورة من مساحة تخزين الجهاز أو الاتصال بخوادمك لجمع محتوى إضافي، عليك اتّخاذ خطوات إضافية.

يتم استدعاء طريقة onMessageReceived في سلسلة وحدات عاملة منفصلة. كإحدى أفضل الممارسات، عليك معالجة حمولة الرسالة وعرض إشعار على الفور ضمن طريقة onMessageReceived. يجب عدم إجراء طلبات شبكة إضافية غير متزامنة أو معالجة الحمولة على سلسلة محادثات منفصلة ضمن طريقة onMessageReceived، لأنّ ذلك قد يؤدي إلى خروج تطبيقك من دورة حياة عملية صالحة قبل معالجة الحمولة بالكامل. إذا حدث ذلك، قد تلاحظ أنّ بعض رسائل "المراسلة من خلال السحابة الإلكترونية من Firebase" المُرسَلة تؤدي إلى تأخير الإشعارات أو عدم ظهورها.

إذا كنت بحاجة إلى وقت إضافي لمعالجة رسالتك، مثلاً لجلب imageUrl مضمّنة في حمولة الرسالة، عليك استخدام بنية مثل WorkManager أو خدمة في المقدّمة لتمديد دورة حياة التطبيق. عليك اتّباع الإرشادات التالية عند إلغاء طريقة onMessageReceived للتأكّد من معالجة إشعاراتك بالكامل.

  • بالنسبة إلى الإشعارات ذات الأولوية القصوى: ابدأ مهمة سريعة باستخدام WorkManager في Android للتأكّد من أنّ الإشعار ذا الأولوية القصوى يحصل على وقت معالجة ذي أولوية للتأكّد من أنّ عملية عرض الإشعار تعمل حتى نهايتها. الخبر السار هو أنّه إذا كنت قلقًا بشأن استنفاد الحصص المسموح بها للمهام السريعة نتيجةً لمعالجة "المراسلة من خلال السحابة الإلكترونية من Firebase" ذات الأولوية القصوى، فلا داعي لذلك. هناك إعفاء قصير للمهام السريعة التي تتم جدولتها على الفور بعد إرسال onMessageReceived من "المراسلة من خلال السحابة الإلكترونية من Firebase" ذات الأولوية القصوى.
  • بالنسبة إلى الإشعارات ذات الأولوية العادية: ابدأ عادية WorkRequest باستخدام Android WorkManager بدلاً من ذلك. سيؤدي ذلك إلى التأكّد من أنّ العمل الإضافي المطلوب لمعالجة إشعارك تتم معالجته في النهاية، بدون استخدام المعالجة ذات الأولوية والتسبّب في مشاكل غير ضرورية في استخدام البطارية.

كيفية ضبط أولوية الرسائل

يمكنك إرسال إشعارات إلى المستخدمين باستخدام 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"
          }
      }
  }
}

كيفية اختبار الإشعارات ذات الأولوية القصوى في وضع "توفير شحن البطارية"

للتأكّد من أنّ الإشعارات ذات الأولوية القصوى يتم تلقّيها ومعالجتها بشكلٍ صحيح عند تلقّيها من قِبل المستخدم، اتّبِع هذه التعليمات لاختبار إشعاراتك:

  1. اضبط جهازك على وضع "توفير شحن البطارية" باستخدام التعليمات الواردة في مقالة كيفية اختبار تطبيقك في وضع "توفير شحن البطارية".
  2. يمكنك الوصول إلى رمز تسجيل FCM من تطبيقك على الجهاز الاختباري. لمزيد من المعلومات حول كيفية الوصول إلى الرمز، يُرجى الاطّلاع على مقالة كيفية إرسال رسالة اختبار إلى تطبيق في الخلفية.
  3. بعد الحصول على رمز FCM، أرسِل الإشعار ذا الأولوية القصوى إلى الجهاز الاختباري باستخدام رمز إرسال الإشعارات في FCM أو أمر cURL يتضمّن مَعلمات الإعداد التي تتطابق مع الإشعار ذا الأولوية القصوى.

كيفية تقليل أولوية FCM ذات الأولوية القصوى على Android

الرسائل ذات الأولوية القصوى على Android مخصّصة للمحتوى الحساس للوقت والذي يظهر للمستخدم، ويجب أن تؤدي إلى ظهور إشعارات للمستخدم. إذا رصدت FCM نمطًا لا يؤدي فيه ظهور الرسائل إلى ظهور إشعارات للمستخدم، قد يتم تقليل أولوية رسائلك إلى الأولوية العادية أو تفويض معالجتها إلى "خدمات Google Play".

FCM تستخدم سلوك الرسائل على مدار 7 أيام عند تحديد ما إذا كان سيتم تقليل أولوية الرسائل أو توجيهها من خلال خادم وكيل، وتتخذ هذا القرار بشكلٍ مستقل لكل مثيل من تطبيقك. إذا تم عرض الإشعارات للمستخدم استجابةً للرسائل ذات الأولوية القصوى، لن تتأثر رسائلك المستقبلية ذات الأولوية القصوى.

تفويض الإشعارات باستخدام "خدمات Google Play"

يتم توجيه الرسائل ذات الأولوية القصوى التي تستوفي معايير معيّنة من خلال خادم وكيل بواسطة "خدمات Google Play" بدلاً من تقليل أولويتها. يعني ذلك أنّ "خدمات Google Play" تعرض الإشعارات نيابةً عن التطبيق، بدون الحاجة إلى بدء تشغيل التطبيق. ويتم ذلك لتوفير تجربة أفضل للمستخدم بشكلٍ عام على أجهزة Android.

يُرجى العِلم أنّ رسائل الإشعارات التي يتم توجيهها من خلال خادم وكيل تُدخِل تغييرات على كيفية الإبلاغ عن الإحصاءات المتعلقة بالرسائل التي يتم تلقّيها:

  • لكي يتم الإبلاغ عن إحصاءات الإشعارات التي يتم توجيهها من خلال خادم وكيل، يجب أن يستخدم تطبيقك حزمة تطوير البرامج (SDK) في الإصدار 24.0.0 أو الإصدارات الأحدث من "المراسلة من خلال السحابة الإلكترونية من Firebase".
  • قد تلاحظ تأخيرات أو انخفاضًا في عدد الرسائل التي يتم تلقّيها مقارنةً بالعدد قبل طرح الإشعارات التي يتم توجيهها من خلال خادم وكيل. يرجع ذلك إلى أنّه لا يتم الإبلاغ عن إحصاءات الإشعارات التي يتم توجيهها من خلال خادم وكيل إلا بعد بدء تشغيل تطبيقك، وقد لا يتم الإبلاغ عنها على الإطلاق إذا لم يؤدِّ الإشعار إلى فتح التطبيق.

إنّ توجيه رسائل الإشعارات من خلال خادم وكيل بهذه الطريقة هو السلوك التلقائي للتطبيقات التي تستخدم 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 لمعالجة ذلك في الخلفية.