تنظیم و مدیریت اولویت پیام 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"
          }
      }
  }
}

اعلان‌های اولویت بالای خود را در حالت Doze آزمایش کنید

برای اطمینان از اینکه اعلان‌های اولویت بالای شما به‌درستی دریافت و پردازش می‌شوند وقتی کاربر آن‌ها را دریافت می‌کند، این دستورالعمل‌ها را برای آزمایش اعلان‌هایتان دنبال کنید:

  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 را روی DENY در شیء AndroidNotification برای درخواست ارسال تنظیم کنید.

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

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

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

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

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

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

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

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