شما دو گزینه برای تعیین اولویت تحویل به پیامهای پاییندستی در اندروید دارید: عادی و با اولویت بالا. تحویل پیامهای با اولویت عادی و بالا به این صورت انجام میشود:
اولویت عادی. این اولویت پیشفرض برای پیامهای داده و اعلان است. پیامهای با اولویت عادی بلافاصله زمانی که دستگاه در حالت خواب نیست، تحویل داده میشوند. وقتی دستگاه در حالت Doze است، ممکن است تحویل به تأخیر بیفتد تا باتری تا زمان خروج دستگاه از حالت Doze حفظ شود. برای پیامهای کماهمیتتر، مانند اعلانهای ایمیل جدید، همگامسازی رابط کاربری یا همگامسازی دادههای برنامه در پسزمینه، اولویت تحویل عادی را انتخاب کنید.
اولویت بالا. FCM تلاش میکند پیامهای با اولویت بالا را فوراً ارسال کند و FCM اجازه میدهد در صورت لزوم دستگاه در حال خواب را بیدار کند و برخی پردازشهای محدود (از جمله دسترسی بسیار محدود به شبکه) را اجرا کند. پیامهای با اولویت بالا معمولاً باید منجر به تعامل کاربر با برنامه شما یا اعلانهای آن شوند.
تصمیمگیری بین پیامهای با اولویت بالا و معمولی
اگرچه پیامهای با اولویت عادی برای بهروزرسانیهای عمومی مناسب هستند، اما وقتی نیاز به اطمینان از تحویل فوری موارد یا اقدامات فوری دارید، اولویت بالا را انتخاب کنید. از آنجایی که زمان تحویل پیامهای با اولویت عادی میتواند تحت تأثیر حالت Doze قرار گیرد، تنظیم اکثر اعلانهای قابل مشاهده کاربر روی اولویت بالا، تحویل سریع آنها را تضمین میکند. به عنوان مثال، اعلانهایی مانند پیامهای چت، مشکلات مربوط به حساب کاربری یا بهروزرسانیهای تحویل غذا باید روی اولویت بالا تنظیم شوند.
پردازش پیام برای پیامهای با اولویت بالا و معمولی
برای پیامهای دریافتی چه با اولویت بالا و چه با اولویت معمولی در دستگاه اندروید، چند ثانیه برای پردازش بار داده پیام در هندلر onMessageReceived زمان در نظر گرفته میشود، که زمان اختصاص داده شده به پیامهای با اولویت بالا کمی بیشتر از پیامهای با اولویت معمولی است. انتظار میرود این زمان فقط به اندازهای باشد که بتوان بلافاصله یک اعلان را نمایش داد. اگر مجبور به انجام کار اضافی مانند بارگذاری تصویر از حافظه دستگاه یا فراخوانی سرورهای خود برای جمعآوری محتوای اضافی هستید، باید مراحل اضافی را انجام دهید.
متد onMessageReceived در یک thread worker جداگانه فراخوانی میشود. به عنوان بهترین روش، شما باید payload پیام را پردازش کرده و بلافاصله یک اعلان را در متد onMessageReceived نمایش دهید. شما نباید فراخوانیهای شبکهای غیرهمزمان اضافی انجام دهید یا پردازش payload را در یک thread جداگانه در متد onMessageReceived انجام دهید، انجام این کار میتواند باعث شود برنامه شما قبل از پردازش کامل payload، خارج از چرخه حیات معتبر فرآیند قرار گیرد. اگر این اتفاق بیفتد، ممکن است شاهد باشید که برخی از پیامهای FCM که ارسال میشوند منجر به تأخیر یا از دست رفتن اعلانها میشوند.
اگر برای پردازش پیام خود به زمان بیشتری نیاز دارید، به عنوان مثال برای دریافت یک imageUrl موجود در payload پیام خود، باید از ساختاری مانند WorkManager یا سرویس پیشزمینه برای گسترش چرخه عمر برنامه استفاده کنید. هنگام بازنویسی متد onMessageReceived برای تأیید پردازش کامل اعلانهای خود، باید از راهنماییهای زیر استفاده کنید.
- برای اعلانهای با اولویت بالا: یک کار تسریعشده را با استفاده از Android
WorkManagerشروع کنید تا تأیید کنید که اعلان با اولویت بالای شما زمان پردازش اولویتبندیشده را دریافت میکند تا اجرای رندر اعلان شما تا زمان تکمیل تأیید شود. خبر خوب این است که اگر نگران تمام شدن سهمیههای کار تسریعشده در نتیجه پردازش FCM با اولویت بالا هستید، نیازی به نگرانی نیست. یک معافیت کوتاه برای کارهای تسریعشدهای که بلافاصله پس از ارسال FCM با اولویت بالاonMessageReceivedبرنامهریزی میشوند، وجود دارد. - برای اعلانهای اولویتدار معمولی: به جای آن، یک
WorkRequestمعمولی را با استفاده از AndroidWorkManagerشروع کنید. این کار تأیید میکند که کار اضافی مورد نیاز برای پردازش اعلان شما در نهایت پردازش میشود، بدون اینکه از پردازش اولویتبندیشده استفاده شود و مشکلات مصرف باتری غیرضروری ایجاد شود.
تنظیم اولویت برای پیامها
شما میتوانید با استفاده از Admin SDK ، FCM REST API و کنسول Firebase برای کاربران خود اعلان ارسال کنید. برای تغییر تنظیمات اولویت خود از Admin SDK و FCM REST API، باید فایل JSON payload پیام را بهروزرسانی کنید. میتوانید از نمونه کد زیر برای مشاهده نحوه تنظیم اولویت بالا استفاده کنید. برای اعلانهای ارسالی از کنسول، تنظیم فیلدهای اعلان مخصوص اندروید پشتیبانی نمیشود.
{
"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 آزمایش کنید
برای اطمینان از اینکه اعلانهای اولویت بالای شما هنگام دریافت توسط کاربر به درستی دریافت و پردازش میشوند، این دستورالعملها را برای آزمایش اعلانهای خود دنبال کنید:
- با استفاده از دستورالعملهای موجود در بخش «برنامهتان را با Doze آزمایش کنید»، دستگاه خود را روی حالت Doze تنظیم کنید.
- از طریق برنامه خود در دستگاه آزمایشی، به توکن ثبت FCM خود دسترسی پیدا کنید. برای اطلاعات بیشتر در مورد نحوه دسترسی به توکن، به «ارسال پیام آزمایشی به یک برنامه پسزمینه» مراجعه کنید.
- پس از دریافت توکن FCM ، با استفاده از کد ارسال اعلان FCM یا یک دستور cURL که پارامترهای پیکربندی آن با اعلان اولویت بالای شما مطابقت دارد، اعلان اولویت بالای خود را به دستگاه آزمایشی ارسال کنید.
اولویتزدایی از FCM با اولویت بالا در اندروید
پیامهای با اولویت بالا در اندروید برای محتوای حساس به زمان و قابل مشاهده توسط کاربر در نظر گرفته شدهاند و باید منجر به اعلانهای کاربر شوند. اگر FCM الگویی را تشخیص دهد که در آن پیامها منجر به اعلانهای کاربر نمیشوند، ممکن است پیامهای شما از اولویت عادی خارج شوند یا برای رسیدگی به سرویسهای Google Play واگذار شوند .
FCM هنگام تعیین اولویتبندی یا پروکسی کردن پیامها، از ۷ روز رفتار پیام استفاده میکند؛ این تصمیم را برای هر نمونه از برنامه شما به طور مستقل انجام میدهد. اگر در پاسخ به پیامهای با اولویت بالا، اعلانها به گونهای نمایش داده شوند که برای کاربر قابل مشاهده باشد، پیامهای با اولویت بالای آینده شما تحت تأثیر قرار نخواهند گرفت.
واگذاری اعلان با سرویسهای گوگل پلی
پیامهای اعلان با اولویت بالا که معیارهای خاصی را برآورده میکنند، به جای اینکه از اولویت خارج شوند، توسط سرویسهای گوگل پلی پروکسی میشوند. این بدان معناست که اعلانها توسط سرویسهای گوگل پلی به نمایندگی از برنامه نمایش داده میشوند، بدون اینکه نیازی به اجرای برنامه باشد. این کار برای ارائه یک تجربه کاربری کلی بهتر در دستگاههای اندروید انجام میشود.
توجه داشته باشید که پیامهای اعلان پروکسیشده، تغییراتی در نحوه گزارش تحلیلهای مربوط به پیامهای دریافتی ایجاد میکنند:
- برای اینکه گزارشهای تحلیلی مربوط به اعلانهای پروکسیشده قابل مشاهده باشند، برنامه شما باید از FCM SDK نسخه ۲۴.۰.۰ یا بالاتر استفاده کند.
- ممکن است متوجه تأخیر یا کاهش تعداد پیامهای دریافتی در مقایسه با تعداد قبل از معرفی اعلانهای پروکسی شوید. دلیل این امر این است که تجزیه و تحلیل اعلانهای پروکسی فقط پس از شروع برنامه شما گزارش میشود و اگر اعلان منجر به باز شدن برنامه نشود، ممکن است اصلاً گزارش نشود.
پراکسی کردن پیامهای اعلان به این روش، رفتار پیشفرض برنامههایی است که از اندروید Q+ و سرویسهای گوگل پلی نسخه ۱۹۰۵۴۰۰۰ یا بالاتر استفاده میکنند. پیامهای ارسالی از طریق HTTP v1 API پراکسی میشوند، اما پیامهای ارسالی از طریق کنسول فایربیس یا 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 میتواند گزارش دهد که چند درصد از کل پیامهای شما به اندروید از اولویت خارج میشوند. برخی از پیامها ممکن است از گزارشهای دادههای تجمیعی حذف شوند، اما در کل باید یک نمای کلی از نرخهای از اولویت خارج شدن پیامها ارائه دهند. برای اطلاعات بیشتر و نمونه کد برای پرسوجو از API، به مقاله ما در مورد دادههای تحویل تجمیعی مراجعه کنید. همچنین میتوان آن را از کاوشگر API بررسی کرد.
اعلانهای پروکسیشده. اعلانهای پروکسیشده در معیارهای تحویل فعلی FCM یا GA محاسبه نمیشوند، بنابراین ممکن است تا ۱۵٪ کاهش در معیارهای تحویل اعلان را تجربه کنید. برای گزارش پیامهای پروکسیشده، از API دادههای تحویل تجمیعی FCM استفاده کنید.
ProxyNotificationInsightPercentsدرصد اعلانهای پروکسیشده موفق و همچنین جزئیات پیامهایی را که نمیتوانند با موفقیت پروکسی شوند، گزارش میدهد.
عیبیابی تأخیرهای اعلان
مطمئن شوید که اعلانهای برنامه شما فعال هستند. اگر کاربر مجوز اعلانها را برای برنامه شما غیرفعال کرده باشد، هیچ یک از اعلانهای شما ارسال نخواهد شد، در نتیجه، پیامهای شما از اولویت خارج میشوند. قبل از ارسال پیامهای با اولویت بالا به یک نمونه برنامه، باید تأیید کنید که اعلانها فعال هستند .
هنگام پردازش اعلان خود، از برقراری تماسهای اضافی شبکه خودداری کنید. از آنجا که بخش کوچکی از جمعیت تلفنهای همراه اندروید در شبکههای با تأخیر بالا قرار دارند، قبل از نمایش اعلان، از برقراری اتصال به سرورهای خود خودداری کنید. تماس مجدد با سرور قبل از پایان زمان پردازش مجاز ممکن است برای کاربرانی که در شبکههای با تأخیر بالا هستند، خطرناک باشد.
در عوض، محتوای اعلان را در پیام FCM قرار دهید و بلافاصله آن را نمایش دهید. اگر نیاز به همگامسازی محتوای درونبرنامهای اضافی در اندروید دارید، میتوانید یک کار را با WorkManager برنامهریزی کنید تا در پسزمینه آن را مدیریت کند.