在客户端,要订阅网络推送通知,您需要subscribe
使用applicationServerKey
选项调用,如下所示:
var serviceWorkerRegistration = ...
serviceWorkerRegistration.pushManager.subscribe({
userVisibleOnly: true,
applicationServerKey: urlB64ToUint8Array("......")
}).then(function(subscription) {
...
})
您可以将subscription
对象发送到可以保存的服务器。
要向订阅者发送推送消息,服务器需要发布到endpoint
object 中的 key 指示的 URL subscription
。服务器需要使用 VAPID 向提供商(Mozilla 或 Google 或其他任何人)表明自己的身份。例如,使用 Python library pywebpush
,将进行以下调用:
import pywebpush
pywebpush.webpush(
subscription,
data,
vapid_private_key="path_to_private_key.pem",
vapid_claims={"sub": "mailto:example@example.com"},
)
这是我的问题:
serviceWorkerRegistration.pushManager.subscribe
用于发送推送消息的私有 VAPID 密钥是否与传递给客户端的公钥对应?还是它属于单独的密钥对?我的直觉告诉我它应该属于同一个密钥对,但是 VAPID 这个词只在谈论发送推送消息时才被提及,而不是在订阅时,所以我不相信这个假设是正确的。