我一直在尝试使用Firebase Cloud Messaging和一些节点软件包来设置Web推送服务器/客户端体系结构。经过多个教程后,我真的很困惑。
我尝试了" Web-Push"节点软件包,但是它需要GCM-键,并且随着Google宣布,GCM现在正在转移到FCM。因此,我查看了另一个称为" FCM-PUSH"的软件包,但它不支持Vapid。我什至不确定为什么要单独需要Vapid。所以,我只是在这里提出一些直接问题 -
- 为什么有两个单独的键,即GCM/FCM和VAPID?
- 一旦将订阅键从客户端到服务器,我是否需要将它们存储在数据库中?还有其他方法可以用来保存它们吗?
- 看起来" FCM-PUSH"软件包不支持Vapid键,并且文档仅提及iOS和Android。
- 另一方面," Web-Push"软件包不支持FCM。
那么,我应该同时使用两个软件包吗?如果是,那么我应该依靠什么包来执行哪个功能?
为什么有两个单独的键,即gcm/fcm和vapid?
GCM/FCM API密钥是一种遗产,非标准的身份验证方法。对于新项目,您应该使用VAPID ,这是一种使用PUSH服务来验证您的Web应用程序的标准方法(例如FCM,Mozilla Autopush(。
基本上,当您订阅用户以推送通知时,您将公共密钥与端点相关联。然后,当您想将通知发送到该端点时,必须使用私钥签署消息。
我在Pushpad工作,我们已经从GCM/FCM API键迁移到了几个月前VAPID。现在,PushPad支持VAPID开箱即用:这意味着,如果您使用PushPad,则无需手动配置VAPID,因为VAPID的所有配置都会自动发生。我强烈建议检查一下。
从客户端到服务器的订阅密钥后,我是否需要将这些密钥存储在数据库中?还有其他方法可以用来保存它们吗?
您可能会混淆两种不同类型的键:
- vapid键对:您在服务器上生成一次;然后,当您使用JavaScript订阅Web推送通知时,将公共密钥与所有端点相关联;您将私钥保留在服务器上,并使用它来签署发送的通知
- 密钥用于签名通知有效载荷:每个客户端都不同,您需要将它们与端点一起存储在服务器上;您只需要在发送有效载荷时才需要这些键。否则,您只需发送信号,然后服务工作者负责从您自己的应用程序服务器下载未阅读的通知
看起来" fcm-push"软件包不支持VAPID键,它的文档仅针对iOS和Android提及。
fcm还用于将推送通知发送到本机应用程序,但VAPID仅是Web推动的标准。大概是该宝石本来可以与本机应用一起使用,而不是与Web推送一起使用。
另一方面," Web-Push"软件包不支持FCM。
是的,因为您需要使用VAPID,这是标准。FCM也支持Vapid。
注意:如其他答案中所述," web-push"软件包也可能支持FCM - 但是我不建议将FCM API键用于新项目(使用VAPID,这是IETF标准!(
(您说过,当我订阅用户时,我需要将VAPID公共密钥与所有端点相关联。与之关联到底是什么意思?
您可以在这些文章中阅读有关Vapid的更多信息:
- 通过Mozilla的Push Service发送VAPID确定的WebPush通知
- Web推动互操作性获胜
web-push
确实支持VAPID和FCM。如果您为较旧的Chrome版本和浏览器(例如Opera和Samsung Internet浏览器(提供GCM API密钥,它也支持GCM,但这不是可选的。