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

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

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

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

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