FCM обычно доставляет сообщения сразу после их отправки. Однако это не всегда возможно. Например, устройство может быть недоступно, или FCM может намеренно задерживать сообщения, чтобы приложение не потребляло слишком много ресурсов и не разряжало аккумулятор.
В таких случаях FCM сохраняет сообщение и доставляет его как можно скорее. Хотя в большинстве случаев это приемлемо, некоторые приложения требуют немедленной отправки уведомлений. Например, уведомления о входящем звонке или приглашении на мероприятие.
На Android и в веб-версии можно указать максимальный срок жизни сообщения. Значение должно быть от 0 до 2 419 200 секунд (28 дней) и соответствует максимальному периоду времени, в течение которого FCM хранит сообщение и пытается его доставить. По умолчанию запросы, не содержащие этого поля, хранятся не более четырёх недель.
В iOS заголовок apns-expiration
можно задать в объекте ApnsConfig . Подробнее см. в документации Apple « Отправка запросов на уведомления в 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.