На стороне клиента, чтобы подписаться на push-уведомления, вам нужно вызвать subscribe
с опцией applicationServerKey
, например:
var serviceWorkerRegistration = ...
serviceWorkerRegistration.pushManager.subscribe({
userVisibleOnly: true,
applicationServerKey: urlB64ToUint8Array("......")
}).then(function(subscription) {
...
})
Вы можете отправить объект subscription
на сервер, где его можно будет сохранить.
Чтобы отправить push-сообщение подписчику, серверу необходимо опубликовать сообщение по адресу, указанному ключом endpoint
в объекте subscription
. Сервер должен идентифицировать себя для провайдера (Mozilla, Google или кого-то другого) с помощью VAPID. Например, используя библиотеку Python pywebpush
, можно было бы сделать такой вызов:
import pywebpush
pywebpush.webpush(
subscription,
data,
vapid_private_key="path_to_private_key.pem",
vapid_claims={"sub": "mailto:[email protected]"},
)
Вот мой вопрос:
Является ли закрытый ключ VAPID, используемый для отправки push-сообщения, тем, который соответствует открытому ключу, переданному serviceWorkerRegistration.pushManager.subscribe
на стороне клиента? Или он принадлежит к отдельной паре ключей? Моя интуиция подсказывает мне, что он должен принадлежать одной и той же паре ключей, но термин VAPID упоминается только при разговоре об отправке push-сообщений, а не при подписке, поэтому я не уверен, что это предположение верно.