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

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

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

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

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

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

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

Ещё одно преимущество указания срока жизни сообщения заключается в том, что FCM не применяет к сообщениям с нулевым значением параметра time to live ограничение на показ сворачиваемых сообщений. Обратите внимание, что значение 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.