如何同时使用 "web-push" 和 "fcm-push" 节点包?
How to work with "web-push" and "fcm-push" node packages simultaneously?
我一直在尝试使用 Firebase 云消息传递和一些节点包来设置网络推送通知 server/client 架构。看了很多教程,真是一头雾水
我尝试了 "web-push" 节点包,但它需要 gcm-key,正如 Google 宣布的那样,GCM 现在正在转向 FCM。因此,我查看了另一个名为 "fcm-push" 的包,但它不支持 VAPID。我什至不确定为什么单独需要 VAPID。所以,我在这里直接提出一些问题-
- 为什么有两个单独的密钥,即 GCM/FCM 和 VAPID?
- 一旦我从客户端获得订阅密钥到服务器,我是否需要将它们存储在数据库中?还有其他方法可以保存吗?
- 看起来 "fcm-push" 包不支持 VAPID 密钥,documentation 只在 iOS 和 Android 中提到它。
- 另一方面,"web-push" 软件包不支持 FCM。
那么,我应该同时使用这两个包吗?如果是,那么我应该依靠什么包来完成哪个功能?
Why are there two separate keys, i.e., for GCM/FCM and VAPID?
GCM/FCM api 密钥是一种传统的非标准身份验证方法。
对于新项目您应该使用 VAPID,这是一种 standard 使用推送服务(例如 FCM、Mozilla autopush)自动验证您的 Web 应用程序的方法。
基本上,当您为用户订阅推送通知时,您可以使用 VAPID 将 public 键关联到端点。然后,当您想要向该端点发送通知时,您必须使用私钥对您的消息进行签名。
我在Pushpad and we have migrated from GCM/FCM api keys to VAPID some months ago. Now Pushpad supports VAPID out of the box: this means that if you use Pushpad you don't need to configure VAPID manually because all the configuration for VAPID happens automatically. I strongly recommend to check it out工作。
Once I get the subscription keys from the client to the server, do I need to store those in a database? Is there any other method that can be used to save them?
您可能混淆了两种不同类型的键:
- VAPID 密钥对:您在服务器上生成一次;然后,当您使用 Javascript 为用户订阅网络推送通知时,您将 public 键关联到所有端点;您将私钥保存在您的服务器上,并使用它来签署您发送的通知
- 用于对通知负载进行签名的密钥:这些密钥对于每个客户端都是不同的,您需要将它们与端点一起存储在您的服务器上; 只有在发送负载时才需要这些密钥;否则你可以只发送一个 信号 然后 service worker 负责从你自己的应用程序服务器下载未读通知
It looks like "fcm-push" package doesn't support VAPID keys and it's documentation only mentions it for iOS and Android.
FCM 也用于向 native 应用程序发送推送通知,但 VAPID 是仅用于网络推送的标准。可能 gem 用于本机应用程序而不是网络推送。
On the other hand, "web-push" package doesn't support FCM.
是的,因为您需要使用标准的 VAPID。 FCM 也支持 VAPID。
注意:如其他答案中所述,“web-push”包可能也支持 FCM - 但是我不建议使用 FCM api 键对于新项目(使用 VAPID,这是 IETF 标准!)
you said that I need to associate the VAPID public key to all the endpoints when I subscribe users. What do you exactly mean by associating it?
您可以在这些文章中阅读有关 VAPID 的更多信息:
web-push
确实支持 VAPID 和 FCM。如果您为旧 Chrome 版本和浏览器(例如 Opera 和三星互联网浏览器)提供 GCM API 密钥,它也支持 GCM,但这不是必需的,它是可选的。
我一直在尝试使用 Firebase 云消息传递和一些节点包来设置网络推送通知 server/client 架构。看了很多教程,真是一头雾水
我尝试了 "web-push" 节点包,但它需要 gcm-key,正如 Google 宣布的那样,GCM 现在正在转向 FCM。因此,我查看了另一个名为 "fcm-push" 的包,但它不支持 VAPID。我什至不确定为什么单独需要 VAPID。所以,我在这里直接提出一些问题-
- 为什么有两个单独的密钥,即 GCM/FCM 和 VAPID?
- 一旦我从客户端获得订阅密钥到服务器,我是否需要将它们存储在数据库中?还有其他方法可以保存吗?
- 看起来 "fcm-push" 包不支持 VAPID 密钥,documentation 只在 iOS 和 Android 中提到它。
- 另一方面,"web-push" 软件包不支持 FCM。
那么,我应该同时使用这两个包吗?如果是,那么我应该依靠什么包来完成哪个功能?
Why are there two separate keys, i.e., for GCM/FCM and VAPID?
GCM/FCM api 密钥是一种传统的非标准身份验证方法。 对于新项目您应该使用 VAPID,这是一种 standard 使用推送服务(例如 FCM、Mozilla autopush)自动验证您的 Web 应用程序的方法。
基本上,当您为用户订阅推送通知时,您可以使用 VAPID 将 public 键关联到端点。然后,当您想要向该端点发送通知时,您必须使用私钥对您的消息进行签名。
我在Pushpad and we have migrated from GCM/FCM api keys to VAPID some months ago. Now Pushpad supports VAPID out of the box: this means that if you use Pushpad you don't need to configure VAPID manually because all the configuration for VAPID happens automatically. I strongly recommend to check it out工作。
Once I get the subscription keys from the client to the server, do I need to store those in a database? Is there any other method that can be used to save them?
您可能混淆了两种不同类型的键:
- VAPID 密钥对:您在服务器上生成一次;然后,当您使用 Javascript 为用户订阅网络推送通知时,您将 public 键关联到所有端点;您将私钥保存在您的服务器上,并使用它来签署您发送的通知
- 用于对通知负载进行签名的密钥:这些密钥对于每个客户端都是不同的,您需要将它们与端点一起存储在您的服务器上; 只有在发送负载时才需要这些密钥;否则你可以只发送一个 信号 然后 service worker 负责从你自己的应用程序服务器下载未读通知
It looks like "fcm-push" package doesn't support VAPID keys and it's documentation only mentions it for iOS and Android.
FCM 也用于向 native 应用程序发送推送通知,但 VAPID 是仅用于网络推送的标准。可能 gem 用于本机应用程序而不是网络推送。
On the other hand, "web-push" package doesn't support FCM.
是的,因为您需要使用标准的 VAPID。 FCM 也支持 VAPID。
注意:如其他答案中所述,“web-push”包可能也支持 FCM - 但是我不建议使用 FCM api 键对于新项目(使用 VAPID,这是 IETF 标准!)
you said that I need to associate the VAPID public key to all the endpoints when I subscribe users. What do you exactly mean by associating it?
您可以在这些文章中阅读有关 VAPID 的更多信息:
web-push
确实支持 VAPID 和 FCM。如果您为旧 Chrome 版本和浏览器(例如 Opera 和三星互联网浏览器)提供 GCM API 密钥,它也支持 GCM,但这不是必需的,它是可选的。