FCM معمولاً پیامها را بلافاصله پساز ارسال تحویل میدهد. بااینحال، این کار همیشه ممکن نیست. برای مثال، ممکن است دستگاه دردسترس نباشد یا FCM عمداً پیامها را بهتأخیر بیندازد تا از مصرف بیشازحد منابع توسط برنامه و تأثیر منفی آن بر عمر باتری جلوگیری کند.
در این موارد، FCM پیام را ذخیره میکند و در اسرع وقت آن را ارسال میکند. اگرچه این امر در اکثر موارد مشکلی ایجاد نمیکند، اما برخیاز برنامهها نیاز دارند اعلانها بدون تأخیر ارسال شوند. برای مثال، اعلانی برای تماس ورودی یا دعوت به رویداد.
در Android و «وب»، میتوانید حداکثر طول عمر پیام را مشخص کنید. مقدار باید مدتزمانی از ۰ تا ۲٬۴۱۹٬۲۰۰ ثانیه (۲۸ روز) باشد و با حداکثر مدت زمانی که FCM پیام را ذخیره و تلاش میکند آن را ارسال کند مطابقت دارد. بهطور پیشفرض، درخواستهایی که این فیلد را ندارند، حداکثر چهار هفته طول میکشند.
در iOS، میتوانید سرایند apns-expiration را در
ApnsConfig
شیء تنظیم کنید. برای جزئیات بیشتر، به اسناد Apple درباره ارسال درخواستهای اعلان به APNs مراجعه کنید.
در اینجا چند مورد از کاربردهای احتمالی این ویژگی آورده شده است:
- تماسهای ورودی گپ تصویری
- رویدادهای دعوت منقضیشونده
- رویدادهای تقویم
مزیت دیگر مشخص کردن طول عمر پیام این است که
FCM برای پیامهایی با مقدار
زمان زنده بودن ۰ ثانیه، از محدودسازی پیام جمعشدنی استفاده نمیکند. بهخاطر داشته باشید که مقدار ttl صفر به این معنی است که پیامهایی که نمیتوانند فوراً تحویل داده شوند دور انداخته میشوند. بااینحال، چون این پیامها هرگز ذخیره نمیشوند، این روش بهترین تأخیر را برای ارسال پیامهای اعلان فراهم میکند.
در اینجا نمونهای از درخواستی که شامل ttl است آورده شده است:
{
"message":{
"token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
"data":{
"Nick" : "Mario",
"body" : "great match!",
"Room" : "PortugalVSDenmark"
},
"apns":{
"headers":{
"apns-expiration":"1604750400"
}
},
"android":{
"ttl":"4500s"
},
"webpush":{
"headers":{
"TTL":"4500"
}
}
}
}
طول عمر پیام
وقتی سرور برنامه پیامی را در FCM پست میکند و شناسه پیام را دریافت میکند، به این معنی نیست که پیام قبلاً به دستگاه تحویل داده شده است. درعوض، این یعنی برای ارسال پذیرفته شده است. زمان تحویل پیام به عوامل زیادی بستگی دارد.
اگر دستگاه متصل باشد اما در حالت «بهخواب رفتن» باشد، پیام با اولویت پایین تا زمانی که دستگاه از حالت «بهخواب رفتن» خارج شود توسط
FCM ذخیره میشود. اگر collapse_key تنظیم شده باشد و
پیام موجودی با همان کلید
جمعشونده و
رمز ثبتنام درانتظار تحویل وجود داشته باشد، پیام قدیمی دور انداخته میشود و سپس
پیام جدید جای آن را میگیرد. بااینحال، اگر کلید جمعکردن تنظیم نشده باشد، هر دو پیام جدید و قدیمی برای ارسال در آینده ذخیره میشوند.
اگر دستگاه به FCM متصل نباشد، پیام تا زمانی که اتصال برقرار شود ذخیره میشود. وقتی اتصال برقرار میشود، FCM
همه پیامهای معلقه را به دستگاه تحویل میدهد. اگر دستگاه هرگز دوباره متصل نشود، پیام درنهایت منقضی میشود و از فضای ذخیرهسازی FCM دور انداخته میشود. مهلت پیشفرض چهار هفته است، مگر اینکه پرچم ttl تنظیم شده باشد. اگر برنامه هنگام تلاش FCM برای ارسال پیام به دستگاه
حذف شده باشد، FCM آن پیام را بلافاصله دور میاندازد و
کد ثبت را نامعتبر میکند. تلاشهای بعدی برای ارسال پیام به آن دستگاه منجر به خطای NotRegistered میشود.
برای دستگاههای Android، اگر دستگاه بیشاز یک ماه به FCM متصل نشده باشد، FCM همچنان پیام را میپذیرد اما بلافاصله آن را دور میاندازد. اگر دستگاه ظرف چهار هفته پساز آخرین پیام دادهای که به آن ارسال کردهاید متصل شود، برنامه مشتری شما
onDeletedMessages()
بازخوانی را دریافت میکند.
برای دریافت اطلاعات آماری بیشتر درباره ارسال پیامها در پلاتفرمهای Android یا Apple، میتوانید از FCM داشبورد گزارشدهی استفاده کنید، که تعداد پیامهای ارسالشده و بازشده در دستگاههای Apple و Android را بههمراه دادههای ظهور برای برنامههای Android ثبت میکند.