FCM معمولاً پیامها را بلافاصله پس از ارسال تحویل میدهد. با این حال، این ممکن است همیشه امکانپذیر نباشد. به عنوان مثال، ممکن است دستگاه در دسترس نباشد یا FCM عمداً پیامها را به تأخیر بیندازد تا از مصرف بیش از حد منابع توسط یک برنامه و تأثیر منفی بر عمر باتری جلوگیری کند.
در این موارد، FCM پیام را ذخیره کرده و در اسرع وقت آن را ارسال میکند. اگرچه این در بیشتر موارد خوب است، اما برخی برنامهها وجود دارند که نیاز دارند اعلانها بدون تأخیر ارسال شوند. به عنوان مثال، اعلانی برای تماس دریافتی یا دعوت به یک رویداد.
در اندروید و وب، میتوانید حداکثر طول عمر یک پیام را مشخص کنید. مقدار باید مدت زمانی از 0 تا 2,419,200 ثانیه (28 روز) باشد و مربوط به حداکثر مدت زمانی است که FCM پیام را ذخیره و سعی در ارسال آن دارد. به طور پیشفرض، درخواستهایی که حاوی این فیلد نیستند، حداکثر چهار هفته طول میکشند.
در iOS، میتوانید هدر apns-expiration را در شیء ApnsConfig تنظیم کنید. برای جزئیات بیشتر، به مستندات اپل در مورد ارسال درخواستهای اعلان به APNها مراجعه کنید.
در اینجا به برخی از کاربردهای احتمالی این ویژگی اشاره میکنیم:
- تماسهای ورودی چت تصویری
- رویدادهای دعوتنامه در حال انقضا
- رویدادهای تقویم
یکی دیگر از مزایای مشخص کردن طول عمر یک پیام این است که 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 ارسال میکند و یک شناسه پیام دریافت میکند، به این معنی نیست که پیام قبلاً به دستگاه تحویل داده شده است. در عوض، به این معنی است که برای تحویل پذیرفته شده است. زمان تحویل پیام به عوامل زیادی بستگی دارد.
اگر دستگاه متصل باشد اما در حالت Doze باشد، یک پیام با اولویت پایین توسط FCM ذخیره میشود تا زمانی که دستگاه از Doze خارج شود. اگر collapse_key تنظیم شده باشد و یک پیام موجود با همان کلید فروپاشی و توکن ثبت نام منتظر تحویل باشد، پیام قدیمی حذف شده و سپس پیام جدید جای آن را میگیرد. با این حال، اگر کلید فروپاشی تنظیم نشده باشد، هر دو پیام جدید و قدیمی برای تحویل در آینده ذخیره میشوند.
اگر دستگاه به FCM متصل نباشد، پیام تا زمان برقراری اتصال ذخیره میشود. وقتی اتصال برقرار شد، FCM تمام پیامهای در انتظار را به دستگاه ارسال میکند. اگر دستگاه دیگر هرگز متصل نشود، پیام در نهایت منقضی میشود و از حافظه FCM حذف میشود. مهلت پیشفرض چهار هفته است، مگر اینکه پرچم ttl تنظیم شده باشد. اگر برنامه هنگام تلاش FCM برای ارسال پیام به دستگاه، حذف شده باشد، FCM آن پیام را فوراً حذف میکند و توکن ثبت نام را نامعتبر میکند. تلاشهای بعدی برای ارسال پیام به آن دستگاه منجر به خطای NotRegistered میشود.
برای دستگاههای اندروید، اگر دستگاه بیش از یک ماه به FCM متصل نشده باشد، FCM همچنان پیام را میپذیرد اما بلافاصله آن را حذف میکند. اگر دستگاه ظرف چهار هفته از آخرین پیام دادهای که برای آن ارسال کردهاید متصل شود، برنامه کلاینت شما فراخوانی onDeletedMessages() را دریافت میکند.
برای کسب اطلاعات بیشتر در مورد تحویل پیامها در پلتفرمهای اندروید یا اپل، میتوانید از داشبورد گزارشدهی FCM استفاده کنید که تعداد پیامهای ارسالی و باز شده در دستگاههای اپل و اندروید را به همراه دادههای مربوط به نمایش برای برنامههای اندروید ثبت میکند.