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

اولویت‌بندی پایین FCM اولویت بالا در Android

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

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

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

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

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

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

کارسازی پیام‌های اعلان به این روش رفتار پیش‌فرض برای برنامه‌هایی است که از Android Q+ و خدمات Google Play نسخه ۱۹۰۵۴۰۰۰ یا بالاتر استفاده می‌کنند. پیام‌های ارسال‌شده ازطریق HTTP v1 API پراکسی می‌شوند، اما پیام‌های ارسال‌شده ازطریق کنسول Firebase یا APIهای قدیمی پراکسی نخواهند شد. توجه داشته باشید که این ویژگی درحال‌حاضر در مرحله بتا است و ممکن است تغییر کند.

اگرچه اکیداً توصیه می‌کنیم نمایندگی را فعال نگه دارید تا از مزایای آن برای باتری و حافظه دستگاه بهره‌مند شوید، می‌توانید به یکی از این روش‌ها از این عملکرد انصراف دهید:

  • در سطح برنامه: در مانیفست برنامه، دستور <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 را برای انجام این کار در پس‌زمینه زمان‌بندی کنید.