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

يتوفّر لك خياران لتحديد أولوية التسليم للرسائل الواردة على 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

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

  1. اضبط جهازك على وضع "الاستراحة" باتّباع التعليمات الواردة في مقالة اختبار تطبيقك باستخدام وضع "الاستراحة".
  2. الوصول إلى رمز تسجيل FCM من تطبيقك على الجهاز الاختباري لمزيد من المعلومات حول كيفية الوصول إلى الرمز المميّز، يُرجى الاطّلاع على مقالة إرسال رسالة اختبارية إلى تطبيق في الخلفية.
  3. بعد الحصول على رمز 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 API عبر خادم وكيل، ولكن لن يتم توجيه الرسائل المرسَلة من خلال وحدة تحكّم 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().

  • كل الرسائل: يمكن لواجهة برمجة التطبيقات FCM Aggregate Delivery Data API أن تعرض النسبة المئوية لجميع رسائلك التي يتم خفض أولويتها على أجهزة Android. قد يتم حذف بعض الرسائل من تقارير البيانات المجمّعة، ولكن من المفترض أن تقدّم هذه التقارير بشكل عام نظرة شاملة على معدّلات خفض أولوية الرسائل. يمكنك الاطّلاع على مقالتنا حول بيانات التسليم المجمّعة لمزيد من المعلومات والرموز النموذجية لإرسال طلبات البحث إلى واجهة برمجة التطبيقات، ويمكنك أيضًا استكشافها من خلال مستكشف واجهة برمجة التطبيقات.

  • الإشعارات الوكيلة: لن يتم احتساب الإشعارات التي يتم إرسالها عبر الخادم الوكيل في مقاييس التسليم الحالية في "مراسلة Firebase السحابية" أو "إحصاءات Google"، لذا قد تلاحظ انخفاضًا يصل إلى% 15 في مقاييس تسليم الإشعارات. لإعداد تقارير عن الرسائل التي تم توجيهها عبر خادم وكيل، استخدِم FCM Aggregate Delivery Data API. ProxyNotificationInsightPercents يعرض النسبة المئوية للإشعارات التي تم إرسالها بنجاح عبر الخادم الوكيل، بالإضافة إلى تفاصيل الرسائل التي لا يمكن إرسالها بنجاح عبر الخادم الوكيل.

تحديد المشاكل في تأخُّر الإشعارات وحلّها

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

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

    بدلاً من ذلك، يمكنك تضمين محتوى الإشعار في رسالة FCM وعرضه على الفور. إذا كنت بحاجة إلى مزامنة محتوى إضافي داخل التطبيق على Android، يمكنك جدولة مهمة باستخدام WorkManager للتعامل مع ذلك في الخلفية.