Как работать с пакетами узлов "web-push" и "fcm-push" одновременно?

Я пытался настроить архитектуру веб-сервера push-уведомлений / клиентов с использованием Firebase Cloud Messaging и некоторых узловых пакетов. Пройдя несколько уроков, я действительно запутался.

Я попробовал пакет узлов "web-push", но для этого требуется gcm-key, и, как объявил Google, GCM теперь переходит на FCM. Итак, я посмотрел на другой пакет под названием "fcm-push", но он не поддерживает VAPID. Я даже не уверен, почему VAPID нужен отдельно. Итак, я просто поставлю здесь несколько прямых вопросов

  • Почему существуют два отдельных ключа, т. Е. Для GCM/FCM и VAPID?
  • После того, как я получу ключи подписки от клиента к серверу, нужно ли хранить их в базе данных? Есть ли другой способ, который может быть использован для их сохранения?
  • Похоже, пакет "fcm-push" не поддерживает ключи VAPID, и в документации упоминается только для iOS и Android.
  • С другой стороны, пакет "web-push" не поддерживает FCM.

Итак, я должен использовать оба пакета одновременно? И если да, то на какой пакет я должен полагаться, чтобы выполнять какую функцию?

2 ответа

Решение

Почему существуют два отдельных ключа, т. Е. Для GCM/FCM и VAPID?

Ключи API GCM/FCM - это устаревший, нестандартный метод аутентификации. Для новых проектов вы должны использовать VAPID, который является стандартным автоматическим способом аутентификации вашего веб-приложения с помощью push-службы (например, FCM, Mozilla autopush).

В основном с VAPID вы связываете открытый ключ с конечной точкой, когда подписываете пользователя на push-уведомления. Затем, когда вы хотите отправлять уведомления на эту конечную точку, вы должны подписать свое сообщение закрытым ключом.

Я работаю в Pushpad, и мы перешли с API-ключей GCM/FCM на VAPID несколько месяцев назад. Теперь Pushpad поддерживает VAPID из коробки: это означает, что если вы используете Pushpad, вам не нужно настраивать VAPID вручную, потому что вся конфигурация для VAPID происходит автоматически. Я настоятельно рекомендую проверить это.

После того, как я получу ключи подписки от клиента к серверу, нужно ли хранить их в базе данных? Есть ли другой способ, который может быть использован для их сохранения?

Возможно, вы путаете два разных типа ключей:

  • Пара ключей VAPID: вы генерируете один раз на своем сервере; затем вы связываете открытый ключ со всеми конечными точками, когда вы подписываете пользователей на веб-push-уведомления с использованием Javascript; Вы держите закрытый ключ на своем сервере и используете его для подписи отправленных вами уведомлений.
  • ключи, используемые для подписи полезных данных уведомлений: эти ключи различны для каждого клиента, и вам необходимо хранить их на своем сервере вместе с конечной точкой; вам нужны только эти ключи, если вы отправляете полезную нагрузку; в противном случае вы можете просто отправить сигнал, а затем работник службы несет ответственность за загрузку непрочитанных уведомлений с вашего собственного сервера приложений.

Похоже, пакет "fcm-push" не поддерживает ключи VAPID, и в документации упоминается только для iOS и Android.

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

С другой стороны, пакет "web-push" не поддерживает FCM.

Да, потому что вам нужно использовать VAPID, который является стандартом. FCM также поддерживает VAPID.

Примечание: как упоминалось в других ответах, пакет "web-push", вероятно, также поддерживает FCM - однако я не рекомендую использовать API-ключи FCM для новых проектов (используйте VAPID, который является стандартом IETF!)

Вы сказали, что мне нужно связать открытый ключ VAPID со всеми конечными точками, когда я подписываю пользователей. Что вы имеете в виду, связывая это?

Вы можете прочитать больше о VAPID в этих статьях:

web-push поддерживает VAPID и FCM. Он также поддерживает GCM, если вы предоставляете ключ API GCM для более старых версий Chrome и браузеров, таких как Opera и Samsung Internet Browser, но это не обязательно, это необязательно.

Другие вопросы по тегам