Обычно 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 установлен, и существует сообщение с тем же ключом collapse_key и регистрационным токеном, ожидающее доставки, старое сообщение удаляется, и на его место приходит новое. Однако, если параметр collapse_key не установлен, для будущей доставки сохраняются как новое, так и старое сообщения.
Если устройство не подключено к FCM , сообщение сохраняется до установления соединения. После установления соединения FCM доставляет все ожидающие сообщения на устройство. Если устройство так и не подключается снова, сообщение в конечном итоге истекает по таймауту и удаляется из хранилища FCM . Таймаут по умолчанию составляет четыре недели, если не установлен флаг ttl . Если приложение было удалено, когда FCM пытается доставить сообщение на устройство, FCM немедленно удаляет это сообщение и аннулирует токен регистрации. Последующие попытки отправки сообщения на это устройство приведут к ошибке NotRegistered .
Для устройств Android, если устройство не подключалось к FCM более месяца, FCM всё равно принимает сообщение, но немедленно его удаляет. Если устройство подключается в течение четырёх недель после последнего отправленного вами сообщения, ваше клиентское приложение получает обратный вызов onDeletedMessages() .
Для получения более подробной информации о доставке сообщений на платформах Android или Apple вы можете использовать панель отчетов FCM , которая регистрирует количество отправленных и открытых сообщений на устройствах Apple и Android, а также данные о показах приложений Android.