如何同时使用“web-push”和“fcm-push”节点包?

我一直在尝试使用Firebase云消息传递和一些节点包来设置Web推送通知服务器/客户端体系结构。 经过多个教程,我真的很困惑。

我尝试了“web-push”节点包,但它需要gcm-key,正如谷歌宣布的那样,GCM现在正在转向FCM。 所以,我看了另一个名为“fcm-push”的软件包,但它不支持VAPID。 我甚至不确定为什么VAPID需要分开。 所以,我会在这里提出一些直接的问题 –

  • 为什么有两个单独的键,即GCM / FCM和VAPID?
  • 一旦我从客户端获得订阅密钥到服务器,我是否需要将它们存储在数据库中? 有没有其他方法可以用来保存它们?
  • 它看起来像“fcm-push”包不支持VAPID键,它的文档只提到它的iOS和Android。
  • 另一方面,“web-push”包不支持FCM。

那么,我应该同时使用这两个软件包吗? 如果是的话,那么我应该依靠什么软件包来完成哪个function?

为什么有两个单独的键,即GCM / FCM和VAPID?

GCM / FCM api密钥是一种传统的,非标准的身份validation方法。 对于新项目, 您应该使用VAPID ,这是一种使用推送服务(例如FCM,Mozilla autopush)对您的Web应用进行身份validation的标准自动方式。

基本上使用VAPID,当您订阅用户推送通知时,您将公钥与端点相关联。 然后,当您要将通知发送到该端点时,您必须使用私钥对您的消息进行签名。

我在Pushpad工作,几个月前我们已经从GCM / FCM API key迁移到VAPID。 现在,Pushpad支持VAPID:这意味着如果使用Pushpad,则不需要手动configurationVAPID,因为VAPID的所有configuration都会自动发生。 我强烈build议检查一下 。

一旦我从客户端获得订阅密钥到服务器,我是否需要将它们存储在数据库中? 有没有其他方法可以用来保存它们?

可能你混淆了两种不同的密钥:

  • VAPID密钥对 :您在服务器上生成一次; 那么当您将用户订阅到使用Javascript的Web推送通知时,您将公钥关联到所有端点; 您将私钥保存在您的服务器上,并使用它来签署您发送的通知
  • 用于签署通知有效负载的密钥:这些密钥对于每个客户端都是不同的,您需要将它们与端点一起存储在服务器上; 如果您发送有效载荷则只需要这些密钥 ; 否则你只能发送一个信号 ,然后服务人员负责从你自己的应用服务器下载未读的通知

它看起来像“fcm-push”包不支持VAPID键,它的文档只提到它的iOS和Android。

FCM也用于向本机应用程序发送推送通知,但VAPID是仅用于Web推送的标准。 可能该gem是用来与本地应用程序,而不是与networking推送。

另一方面,“web-push”包不支持FCM。

是的,因为你需要使用VAPID,这是标准的。 FCM也支持VAPID。

注意 :正如其他答案中所提到的,“web-push”包也可能支持FCM – 但是我不build议在新项目中使用FCM API键(使用VAPID,这是IETF标准!)

你说我需要在订阅用户时将VAPID公钥关联到所有的端点。 联想到底是什么意思?

您可以在这些文章中阅读更多有关VAPID的信息:

  • 通过Mozilla推送服务发送VAPID识别WebPush通知
  • networking推送互操作性获胜

web-push支持VAPID和FCM。 如果您为旧版Chrome浏览器和浏览器(例如Opera和三星Internet浏览器)提供GCM API密钥,则它也支持GCM,但不是必需的,它是可选的。