web-push уведомления с firebase cloud messaging

Вообще, вопрос наверное несколько общий, но тем не менее, может кто подскажет.
С месяц назад прикрутил проекту отправку вэб-пуш уведомления с помощью Firebase cloud messaging. Вроде все работает исправно, но загвоздка в том, что не всегда клиенты получают уведомление. При этом я вообще не вижу в документации, насколько вообще гарантирована доставка уведомлений клиенту.

Пользователь может подписаться на три вида уведомлений, отправляются в разное время.

Из текущих наблюдений со своих девайсов и браузеров.

  1. мой тлф с хромом. получаю все уведомления. за месяц бывало пару случаев, когда не получал.

  2. фаирфокс на компе подписан на 2 вида уведомлений:

    • включаю вечером комп, получаю только последнее уведомление.
    • если включаю между первым и вторым, то вижу и первое.
    • сегодня браузер был онлайн во время доставки второго - я его не увидел.
    • когда тестирую отправку с открытым бразуером то ни разу не встречал, чтобы не доставилось.
  3. на другом телефоне обычно приходит, но сегодня третье не пришло.

Поэтому хочется знать, где вообще есть толковое описание механизма доставки, и насколько гарантируется эта самая доставка. В консоли firebase есть подобие аналитики, там вообще не ясно какие данные рисует. То 10 отправок то 30 с следующий день. Аналитика доставки для вэб-пуш не считается.

Если при отправке приходит ответ не 200, то в коде выбрасывается исключение. Но в логах у меня таких исключений нет. То есть все сообщения приняты в доставку.

Хочу попробовать залоггировать все ответы сервера, но кажется мне, что ничего интересного там не будет. Инвалид-токены если есть, то удаляются. А при ответе 200 там вроде ничего другого и не бывает.

В общем хочется понять, почему я хотя бы в своем десктопном фаирфоксе получаю после оффлайна только последнее сообщение. collapse ключ не используется, да и он не для вэб-пушей. Оправляется стандартное уведомление с notification а не data полями.

service-worker фактически вообще пустой, кроме базовых конфигурационных настроек там только сама инициализация

 const messaging = firebase.messaging(); 

фактически мануалы говорят

If the device is not connected to FCM, the message is stored until a connection is established (again respecting the collapse key rules). When a connection is established, FCM delivers all pending messages to the device.

Поэтому я и ожидаю, что получу оба уведомления после оффлайна. Установленные лимиты отправки не превышаются, речь идет от нескольких десятках подписчиков.
Отправка реализована на пхп. Отправляется сразу пачке клиентов. Поскольку число клиентов мало, то каждое оповещение отправляется всем сразу одним запросом (http/json), что в целом исключает предположения, что при отправке одному уходит, а другому возникает какая-то ошибка.

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


Ответы (0 шт):