Как задать срок хранения письма

Обычно FCM доставляет сообщения сразу после отправки. Однако это не всегда возможно. Например, устройство может быть недоступно или FCM может намеренно задерживать сообщения, чтобы предотвратить чрезмерное потребление ресурсов и негативное влияние на время работы от батареи.

В таких случаях FCM сохраняет сообщение и доставляет его, как только это становится возможным. В большинстве случаев это не проблема, но некоторые приложения требуют, чтобы уведомления отправлялись без задержки. Например, уведомление о входящем вызове или приглашение на мероприятие.

В Android и веб-версии можно указать максимальный срок хранения сообщения. Значение должно быть в диапазоне от 0 до 2 419 200 секунд (28 дней) и соответствует максимальному периоду времени, в течение которого FCM хранит и пытается доставить письмо. По умолчанию запросы, в которых нет этого поля, действуют не более четырех недель.

В iOS заголовок apns-expiration можно задать в объекте ApnsConfig. Дополнительную информацию можно найти в документации Apple по отправке запросов на уведомления в APNs.

Вот несколько примеров использования этой функции:

  • Входящие вызовы в видеочате
  • События, связанные с истечением срока действия приглашений
  • Мероприятия в календаре

Ещё одно преимущество указания срока действия сообщения заключается в том, что 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 и получает в ответ идентификатор сообщения, это не означает, что сообщение уже доставлено на устройство. Это означает, что письмо было принято для доставки. Время доставки зависит от многих факторов.

Если устройство подключено, но находится в спящем режиме, сообщение с низким приоритетом сохраняется в FCM, пока устройство не выйдет из спящего режима. Если задан параметр collapse_key и есть сообщение с тем же ключом collapse key и токеном регистрации, ожидающее доставки, старое сообщение удаляется и заменяется новым. Если же ключ свертывания не задан, то для последующей доставки сохраняются и новые, и старые сообщения.

Если устройство не подключено к FCM, сообщение хранится до тех пор, пока не будет установлено подключение. Когда подключение установлено, FCM доставляет на устройство все ожидающие сообщения. Если устройство так и не подключится к сети, срок действия сообщения истечет и оно будет удалено из хранилища FCM. По умолчанию время ожидания составляет четыре недели, если не установлен флаг ttl. Если приложение было удалено, когда FCM пытается доставить сообщение на устройство, FCM немедленно удаляет это сообщение и аннулирует токен регистрации. При попытке отправить сообщение на такое устройство будет возвращаться ошибка NotRegistered.

Если устройство Android не подключалось к FCM более месяца, FCM принимает сообщение, но сразу же удаляет его. Если устройство подключится в течение четырех недель после отправки последнего сообщения с данными, ваше клиентское приложение получит обратный вызов onDeletedMessages().

Чтобы получить больше статистики о доставке сообщений на платформах Android или Apple, вы можете использовать панель отчетов FCM, на которой регистрируется количество отправленных и открытых сообщений на устройствах Apple и Android, а также данные о показах для приложений Android.