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