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

时间:2017-06-27 10:01:38

标签: node.js google-cloud-messaging firebase-cloud-messaging web-push vapid

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

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

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

那么,我应该同时使用这两个包吗?如果是,那么我应该依赖哪个包来做哪个功能?

2 个答案:

答案 0 :(得分:2)

  

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

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

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

我在Pushpad工作,几个月前我们已经从GCM / FCM api密钥迁移到VAPID。现在,Pushpad支持开箱即用的VAPID:这意味着如果您使用Pushpad,则无需手动配置VAPID,因为VAPID的所有配置都会自动发生。我强烈建议check it out

  

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

可能你会混淆两种不同的键:

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

看起来“fcm-push”软件包不支持VAPID密钥,它的文档仅提及iOS和Android。

FCM还用于向原生应用发送推送通知,但VAPID仅适用于网络推送。宝石可能意味着与原生应用程序一起使用,而不是与网络推送一起使用。

  

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

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

注意:正如其他答案所述,“web-push”软件包也可能支持FCM - 但是我不建议对新项目使用FCM api密钥(使用VAPID,这是IETF标准!)

  

你说我需要在订阅用户时将VAPID公钥与所有端点关联。通过关联它到底意味着什么?

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

答案 1 :(得分:0)

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