تنظیم طول عمر پیام

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

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

در Android و وب، می‌توانید حداکثر طول عمر پیام را مشخص کنید. این مقدار باید مدت‌زمانی بین ۰ تا ۲٬۴۱۹٬۲۰۰ ثانیه (۲۸ روز) باشد و با حداکثر مدت‌زمانی که FCM پیام را ذخیره می‌کند و برای ارسال آن تلاش می‌کند مطابقت داشته باشد. به‌طور پیش‌فرض، درخواست‌هایی که این فیلد را ندارند حداکثر چهار هفته دوام می‌آورند.

در iOS، می‌توانید سرصفحه apns-expiration را در شیء ApnsConfig تنظیم کنید. برای جزئیات بیشتر، به اسناد Apple درباره ارسال درخواست‌های اعلان به 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 می‌شود.

برای دستگاه‌های Android، اگر دستگاه بیش‌از یک ماه به FCM متصل نشده باشد، FCM همچنان پیام را می‌پذیرد اما فوراً آن را دور می‌اندازد. اگر دستگاه ظرف چهار هفته از آخرین پیام داده‌ای که به آن ارسال کردید متصل شود، برنامه کارخواه شما onDeletedMessages() فراخوانی برگشتی را دریافت می‌کند.

برای دریافت اطلاعات آماری بیشتر درباره ارسال پیام‌ها در پلاتفرم‌های Android یا Apple، می‌توانید از داشبورد گزارش‌دهی FCM استفاده کنید که تعداد پیام‌های ارسال‌شده و بازشده در دستگاه‌های Apple و Android را به‌همراه داده‌های مربوط به ظهورها برای برنامه‌های Android ثبت می‌کند.