У меня есть служба, которая использует Firebase Cloud Messaging для связи со своими клиентами Android с помощью сообщений данных FCM с набором параметров collapse_key
. Из документации о складных ключах:
При появлении более нового сообщения, отображающего более старый поток, связанное сообщение становится неактуальным для клиентского приложения, и FCM заменяет старое сообщение. Например, отправка на синхронизацию или устаревшие уведомления.
Это то, что я ищу. Мне не нужны все обновления, нужно только последнее. Но мне это нужно КАК МОЖНО СКОРЕЕ, если пользователь в сети.
Тем не менее, я получаю странное ограничение скорости, которое не приводит ни к какому коду ошибки HTTP. Это довольно легко воспроизвести, просто сделайте 20 последовательных сообщений с данными и наблюдайте за андроидом FirebaseMessagingService.onMessageReceived
:
for i in {1..20}; do
curl -v -X POST --header "Authorization: key=$SERVER_KEY" \
--Header "Content-Type: application/json" \
https://fcm.googleapis.com/fcm/send \
-d "{\"to\":\"$CLIENT_TOKEN\", \
\"data\":{\"counter\":\"$i\"}, \
\"priority\":\"high\", \
\"collapse_key\": \"test\" \
}"
done
Приведенный выше скрипт bash немного сложен для чтения, но у меня есть интересующая вас переменная counter
.
После нескольких полученных сообщений (counter=~10
) он останавливается, и вам нужно переключить состояние сети, чтобы получить последнее сообщение с помощью counter=20
. Последнее сообщение также появляется через несколько минут (обычно ~ 10 минут), когда запрашивается регистрация в пожарной части (?).
Удаление collapse_key
из приведенной выше команды curl приводит к получению всех 20 сообщений (где counter={1..20}
).
Итак, вопрос: это ошибка? Или я закрываю (/скорость ограничена), потому что я "злоупотребляю" интерфейсом (поскольку все запросы возвращают ответ 200
, я думал, что все в порядке).