我的 PushRegistration 对象上不存在 keys 属性

owe*_*ncm 3 service-worker web-push progressive-web-apps

我正在尝试在渐进式网络应用程序中实现推送通知,并在 Chrome 中使用新的有效负载支持。

我正在尝试将端点和密钥发送到服务器,但在 PushSubscription 对象上看不到 keys 属性...

如何访问密钥以便将它们发送到服务器?

owe*_*ncm 6

密钥可用,但正如您所注意到的,不能直接以这种方式使用。

您可以选择:

  1. 调用JSON.stringify(subscription)将创建一个包含序列化键的字符串(JSON.parse如果你真的想要的话,你可以这样做),或者
  2. 使用 获取特定键subscription.getKey('p256dh'),它返回一个 ArrayBuffer,然后自己将其转换为字符串,例如btoa(String.fromCharCode.apply(null, new Uint8Array(subscription.getKey('p256dh'))))

请注意,第一种方法创建“URL 安全 Base 64”编码密钥,而第二种方法创建“Base 64(非 URL 安全)”。虽然 web-push Node 库将接受键的任一编码,但您可能需要小心为库选择哪种编码。