为什么有两个单独的键,即 GCM/FCM 和 VAPID?
GCM/FCM api 密钥是一种传统的、非标准的身份验证方法。对于新项目,您应该使用 VAPID,这是一种使用推送服务(例如 FCM、Mozilla autopush)验证您的 Web 应用程序的标准、自动方式。
基本上,当您订阅用户推送通知时,您可以使用 VAPID 将公钥关联到端点。然后,当您想向该端点发送通知时,您必须使用私钥签署您的消息。
我在Pushpad工作,几个月前我们已经从 GCM/FCM api 密钥迁移到 VAPID。现在 Pushpad 支持开箱即用的 VAPID:这意味着如果您使用 Pushpad,则无需手动配置 VAPID,因为 VAPID 的所有配置都是自动发生的。我强烈建议检查一下。
一旦我从客户端获得订阅密钥到服务器,我需要将它们存储在数据库中吗?有没有其他方法可以用来保存它们?
可能您混淆了两种不同的键:
- VAPID 密钥对:您在服务器上生成一次;然后,当您使用 Javascript 为用户订阅网络推送通知时,您将公钥与所有端点相关联;您将私钥保存在您的服务器上,并使用它来签署您发送的通知
- 用于签署通知负载的密钥:这些密钥对于每个客户端都是不同的,您需要将它们与端点一起存储在您的服务器上;如果您发送有效负载,则只需要这些密钥;否则你可以只发送一个信号,然后服务工作者负责从你自己的应用程序服务器下载未读通知
看起来“fcm-push”包不支持 VAPID 密钥,它的文档只提到了 iOS 和 Android。
FCM 也用于向本机应用程序发送推送通知,但 VAPID 是仅用于 Web 推送的标准。可能该 gem 旨在与本机应用程序一起使用,而不是与 Web 推送一起使用。
另一方面,“web-push”包不支持 FCM。
是的,因为您需要使用标准的 VAPID。FCM 也支持 VAPID。
注意:正如其他答案中提到的,“web-push”包可能也支持 FCM - 但是我不建议对新项目使用 FCM api 密钥(使用 VAPID,这是 IETF 标准!)
您说我订阅用户时需要将 VAPID 公钥关联到所有端点。关联它到底是什么意思?
您可以在以下文章中阅读有关 VAPID 的更多信息: