تنظیم و مدیریت اولویت پیام Android

برای اختصاص اولویت تحویل به پیام‌های پایین‌دستی در Android دو گزینه دارید: اولویت عادی و اولویت بالا. ارسال پیام‌های با اولویت عادی و بالا به این صورت عمل می‌کند:

  • اولویت معمولی. این اولویت پیش‌فرض برای پیام‌های داده و اعلان است. پیام‌های با اولویت عادی وقتی دستگاه در حالت خواب نباشد فوراً تحویل داده می‌شوند. وقتی دستگاه در حالت چرت زدن باشد، ممکن است تحویل پیام تا زمانی که دستگاه از حالت چرت زدن خارج شود به‌تأخیر بیفتد تا باتری حفظ شود. برای پیام‌هایی که حساسیت زمانی کمتری دارند، مثل اعلان‌های ایمیل جدید، همگام نگه داشتن میانای کاربر، یا همگام‌سازی داده‌های برنامه در پس‌زمینه، اولویت ارسال عادی را انتخاب کنید.

  • اولویت بالا.FCM تلاش می‌کند پیام‌های اولویت بالا را بلافاصله ارسال کند و به FCM اجازه می‌دهد درصورت لزوم دستگاهی را که در حالت خواب است بیدار کند و برخی‌از پردازش‌های محدود (ازجمله دسترسی بسیار محدود به شبکه) را اجرا کند. پیام‌های با اولویت بالا معمولاً باید منجر به تعامل کاربر با برنامه شما یا اعلان‌های آن شود.

تصمیم‌گیری بین پیام‌های اولویت بالا و عادی

درحالی‌که پیام‌های با اولویت عادی برای به‌روزرسانی‌های عمومی مناسب هستند، وقتی می‌خواهید از تحویل فوری برای مسائل یا اقدامات فوری اطمینان حاصل کنید، اولویت بالا را انتخاب کنید. ازآنجایی‌که زمان تحویل پیام‌های با اولویت عادی می‌تواند تحت‌تأثیر حالت «خواب» قرار گیرد، تنظیم اکثر اعلان‌های نمایان برای کاربر روی اولویت بالا تضمین می‌کند که این اعلان‌ها به‌موقع تحویل داده شوند. برای مثال، اعلان‌هایی مثل پیام‌های گپ، مشکلات حساب، یا به‌روزرسانی‌های تحویل غذا باید روی اولویت بالا تنظیم شوند.

پردازش پیام برای پیام‌های با اولویت بالا و عادی

برای پیام‌های اولویت بالا و اولویت معمولی که در دستگاه Android دریافت می‌شوند، چند ثانیه برای پردازش محتوای پیام در onMessageReceived کنترل‌کننده درنظر گرفته می‌شود و برای پیام‌های اولویت بالا کمی بیشتر از پیام‌های اولویت معمولی زمان اختصاص داده می‌شود. انتظار می‌رود این زمان فقط به‌اندازه‌ای طولانی باشد که اعلان فوراً ارائه شود. اگر باید کار دیگری انجام دهید، مثلاً بار کردن تصویر از فضای ذخیره‌سازی دستگاه یا تماس با سرورهایتان برای جمع‌آوری محتوای بیشتر، باید مراحل دیگری را دنبال کنید.

روش onMessageReceived در یک رشته عامل جداگانه فراخوانی می‌شود. به‌عنوان بهترین روال، باید محتوای پیام را پردازش کنید و اعلانی بلافاصله در روش onMessageReceived نمایش دهید. نباید تماس‌های شبکه ناهمگام اضافی برقرار کنید یا پردازش بار را در رشته‌ای جداگانه در روش onMessageReceived انجام دهید، انجام این کار می‌تواند باعث شود برنامه شما قبل‌از پردازش کامل بار، خارج از چرخه حیات فرایند معتبر قرار گیرد. اگر این اتفاق بیفتد، ممکن است ببینید که برخی‌از پیام‌های FCM ارسال‌شده منجر به تأخیر یا عدم نمایش اعلان‌ها می‌شوند.

اگر برای پردازش پیام خود به زمان بیشتری نیاز دارید، مثلاً برای واکشی imageUrl موجود در بار پیام، باید از ساختاری مانند WorkManager یا سرویس پیش‌زمینه‌ای برای تمدید چرخه حیات برنامه استفاده کنید. وقتی از روش برای ملغی کردنonMessageReceived درستی‌سنجی اعلان‌هایتان استفاده می‌کنید، باید از دستورالعمل‌های زیر پیروی کنید تا مطمئن شوید اعلان‌هایتان به‌طور کامل پردازش می‌شوند.

  • برای اعلان‌های اولویت بالا: بااستفاده از Android WorkManager، کار تسریع‌شده‌ای را شروع کنید تا تأیید کنید که اعلان اولویت بالای شما زمان پردازش اولویت‌بندی‌شده‌ای را برای تأیید اینکه اجرای پردازاندن اعلان شما تا تکمیل ادامه می‌یابد دریافت می‌کند. خبر خوب این است که اگر نگران تمام شدن سهمیه کار تسریع‌شده درنتیجه پردازش FCM با اولویت بالا هستید، نیازی به نگرانی نیست. برای کارهای تسریع‌شده‌ای که بلافاصله پس‌از ارسال FCM onMessageReceived با اولویت بالا زمان‌بندی شده‌اند، معافیت کوتاهی وجود دارد.
  • برای اعلان‌های اولویت عادی: معمولیWorkRequest را بااستفاده از WorkManager Android شروع کنید. این کار تأیید می‌کند که کار اضافی موردنیاز برای پردازش اعلان شما درنهایت پردازش می‌شود، بدون اینکه از پردازش اولویت‌بندی‌شده استفاده شود و مشکلات غیرضروری مصرف باتری ایجاد شود.

تنظیم اولویت برای پیام‌ها

می‌توانید بااستفاده از Admin SDK، FCM REST API، و کنسول Firebase برای کاربران اعلان ارسال کنید. برای تغییر تنظیم اولویت از 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. بااستفاده از دستورالعمل‌های آزمایش برنامه با Doze، دستگاهتان را روی حالت Doze تنظیم کنید.
  2. از برنامه در دستگاه آزمایشی، به کد ثبت FCM دسترسی پیدا کنید. برای کسب اطلاعات بیشتر درباره نحوه دسترسی به کد، ارسال پیام آزمایشی به برنامه پس‌زمینه‌ای را ببینید.
  3. پس‌از دریافت کردن کد FCM، اعلان اولویت بالای خود را بااستفاده از کد ارسال اعلان FCM یا دستور cURL که پارامترهای پیکربندی آن با اعلان اولویت بالای شما مطابقت دارد به دستگاه آزمایشی ارسال کنید.

کاهش اولویت FCM با اولویت بالا در Android

پیام‌های اولویت بالا در Android برای محتوای حساس به زمان و قابل‌مشاهده برای کاربر درنظر گرفته شده‌اند و باید به اعلان‌های سَمت کاربر منجر شوند. اگر FCM الگویی را شناسایی کند که در آن پیام‌ها منجر به اعلان‌های سَمت کاربر نمی‌شوند، ممکن است اولویت پیام‌هایتان به اولویت عادی کاهش یابد یا برای رسیدگی به خدمات Google Play واگذار شود.

‫FCM هنگام تعیین اینکه پیام‌ها را از اولویت بیندازد یا ازطریق پراکسی ارسال کند، از ۷ روز رفتار پیام استفاده می‌کند؛ این تعیین را به‌طور مستقل برای هر نمونه از برنامه‌تان انجام می‌دهد. اگر در پاسخ به پیام‌های با اولویت بالا، اعلان‌ها به‌گونه‌ای نمایش داده شوند که برای کاربر قابل‌مشاهده باشد، پیام‌های با اولویت بالای شما در آینده تحت‌تأثیر قرار نخواهند گرفت.

واگذاری اعلان با «خدمات Google Play»

پیام‌های اعلان با اولویت بالا که معیارهای خاصی را برآورده می‌کنند، به‌جای اینکه اولویتشان کاهش یابد، توسط خدمات Google Play پروکسی می‌شوند. این یعنی اعلان‌ها توسط خدمات Google Play ازطرف برنامه نمایش داده می‌شود، بدون اینکه نیازی به راه‌اندازی برنامه باشد. این کار برای ارائه تجربه کاربری کلی بهتر در دستگاه‌های Android انجام می‌شود.

توجه داشته باشید که پیام‌های اعلان پراکسی‌شده تغییراتی در نحوه گزارش‌دهی تجزیه‌وتحلیل‌های مربوط به پیام‌های دریافتی ایجاد می‌کنند:

  • برای اینکه تجزیه‌وتحلیل‌های مربوط به اعلان‌های پراکسی‌شده گزارش شود، برنامه‌تان باید از FCM SDK نسخه ۲۴.۰.۰ یا بالاتر استفاده کند.
  • ممکن است متوجه تأخیر یا کاهش در تعداد پیام‌های دریافتی نسبت به تعداد پیام‌ها قبل‌از معرفی اعلان‌های پراکسی‌شده شوید. دلیل این امر این است که تجزیه‌وتحلیل برای اعلان‌های پراکسی‌شده فقط زمانی گزارش می‌شود که برنامه‌تان شروع شود، و اگر اعلان منجر به باز شدن برنامه نشود، ممکن است اصلاً گزارش نشود.

پراکسی کردن پیام‌های اعلان به این روش، رفتار پیش‌فرض برای برنامه‌هایی است که از Android Q+‎ و خدمات 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 را در شیء AndroidNotification برای درخواست ارسال روی DENY تنظیم کنید.

سنجش اولویت‌زدایی پیام در Android

  • پیام‌های فردی. در زمان تحویل، می‌توانید با مقایسه اولویت تحویل‌شده پیام (از getPriority()) با اولویت اصلی آن (از getOriginalPriority()) تعیین کنید که اولویت پیام کاهش یافته است یا نه.

  • همه پیام‌ها. FCM Aggregate Delivery Data API می‌تواند گزارش دهد که چند درصد از کل پیام‌های شما به Android اولویت کمتری دریافت می‌کنند. ممکن است برخی‌از پیام‌ها از گزارش‌های داده‌های تجمیعی حذف شوند، اما به‌طور کلی باید نمای جهانی از نرخ‌های لغو اولویت پیام ارائه دهند. برای اطلاعات بیشتر و کد نمونه برای پُرسمان کردن میانای برنامه‌سازی کاربردی، مقاله ما درباره داده‌های ارائه تجمیعی را ببینید؛ همچنین می‌توانید آن را در کاوشگر میانای برنامه‌سازی کاربردی کاوش کنید.

  • اعلان‌های پروکسی‌شده. اعلان‌های پراکسی در سنجه‌های ارائه FCM یا GA کنونی شمارش نمی‌شوند، بنابراین ممکن است تا ۱۵٪ کاهش در سنجه‌های ارائه اعلان تجربه کنید. برای گزارش‌دهی درباره پیام‌های پراکسی‌شده، از FCM Aggregate Delivery Data API استفاده کنید. ProxyNotificationInsightPercents درصد اعلان‌های با موفقیت پروکسی‌شده و همچنین جزئیات پیام‌هایی را که نمی‌توانند با موفقیت پروکسی شوند گزارش می‌کند.

عیب‌یابی کردن تأخیر اعلان‌ها

  • مطمئن شوید که اعلان‌ها در نمونه برنامه شما فعال باشد. اگر کاربر اجازه اعلان را برای برنامه‌تان غیرفعال کرده باشد، هیچ‌کدام از اعلان‌هایتان پست نخواهد شد و درنتیجه، اولویت پیام‌هایتان کاهش خواهد یافت. قبل‌از ارسال پیام‌های اولویت بالا به نمونه برنامه، باید تأیید کنید که اعلان‌ها فعال هستند.

  • هنگام پردازش اعلان، از برقراری تماس‌های شبکه‌ای اضافی خودداری کنید. ازآنجایی‌که بخش کوچکی از کاربران تلفن همراه Android در شبکه‌های با تأخیر بالا هستند، قبل‌از نمایش اعلان، از باز کردن اتصال به سرورهایتان خودداری کنید. تماس برگشتی با سرور قبل‌از پایان زمان پردازش مجاز ممکن است برای کاربران در شبکه‌های با تأخیر بالا خطرناک باشد.

    به‌جای آن، محتوای اعلان را در پیام FCM بگنجانید و آن را فوراً نمایش دهید. اگر نیاز دارید برای محتوای درون‌برنامه‌ای بیشتر در Android همگام‌سازی کنید، می‌توانید WorkManager را برای انجام این کار در پس‌زمینه زمان‌بندی کنید.