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

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

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

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

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

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

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

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

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

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

  • بالنسبة إلى الإشعارات ذات الأولوية العالية: ابدأ مهمة مُعجَّلة باستخدام WorkManager على Android للتأكّد من أنّ الإشعار ذا الأولوية العالية يحصل على وقت معالجة ذي أولوية للتأكّد من أنّ عملية عرض الإشعار تعمل حتى نهايتها. الخبر السار هو أنّه إذا كنت قلقًا بشأن استنفاد حصص المهام المُعجَّلة نتيجةً لمعالجة مراسلة Firebase السحابية ذات الأولوية العالية، فلا داعي لذلك. هناك إعفاء قصير للمهام السريعة التي تتم جدولتها على الفور بعد إرسال onMessageReceived من FCM ذات الأولوية العالية.
  • بالنسبة إلى الإشعارات ذات الأولوية العادية: ابدأ عادية 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) من 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 لمعالجة ذلك في الخلفية.