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

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

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

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

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

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

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

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

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

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

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

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

می‌توانید با استفاده از Admin SDK ، FCM REST API و کنسول Firebase اعلان‌ها را برای کاربران خود ارسال کنید. برای تغییر تنظیمات اولویت خود از Admin SDK و FCM REST API، باید پیام JSON payload را به روز کنید. می توانید از نمونه کد زیر برای مشاهده نحوه تنظیم اولویت روی بالا استفاده کنید. برای اعلان‌های ارسال شده از کنسول، تنظیم فیلدهای اعلان مخصوص 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 برای محتوای حساس به زمان و قابل مشاهده توسط کاربر هستند و باید منجر به اعلان‌هایی برای کاربر شوند. اگر FCM الگویی را تشخیص دهد که در آن پیام‌ها به اعلان‌های کاربر منجر نمی‌شوند، پیام‌های شما ممکن است در اولویت عادی قرار نگیرند یا به سرویس‌های Google Play واگذار شوند .

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

تفویض اعلان با خدمات Google Play

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

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

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

پروکسی کردن پیام‌های اعلان به این روش، رفتار پیش‌فرض برنامه‌هایی است که از Android Q+ و خدمات Google Play نسخه 19054000 یا بالاتر استفاده می‌کنند. پیام‌هایی که از طریق 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 تنظیم کنید.

اندازه گیری اولویت بندی پیام در اندروید

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

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

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

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

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

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

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