gpt4 book ai didi

push-notification - Web Push API - 在后端存储订阅

转载 作者:行者123 更新时间:2023-12-04 20:32:43 27 4
gpt4 key购买 nike

我在这个 Google 教程的帮助下实现了一个 Web Push API:
https://developers.google.com/web/fundamentals/getting-started/codelabs/push-notifications/

本教程包括一个方法,可用于将订阅发送到后端服务器:

function updateSubscriptionOnServer(subscription) {
// TODO: Send subscription to application server
...
}

我想将订阅与用户标识符一起存储,以便我可以选择要向哪些用户发送通知。现在我想知道,我必须将订阅的哪一部分存储在数据库中。我的订阅对象如下所示:
{"endpoint":"https://fcm.googleapis.com/fcm/send/...","keys":{"p256dh":"...","auth":"..."}}

我应该创建一个包含整个 JSON 订阅的列 (Id|User_Id|Subscription) 的“订阅”表吗?什么是最佳实践? JSON 的有效性是无限的吗?在取消订阅的情况下,我可以使用哪个字段来标识订阅?

最佳答案

为了允许匿名网络推送用户使用我们的服务,我们想出了一个想法 散列订阅 并使用哈希作为后端的主键 (id)。

// pseudo-code
const id = hash(subscription);
https.post(`${SERVER}/subscription/${id}`, subscription).then(...);

正如我正确理解的那样,订阅不会随着时间的推移而改变,因此,散列是一个常数。不会发生冲突,因为每个订阅都是唯一的,您可以选择适当的哈希函数(例如 SHA-512)。

然后,您可以在 Service Worker 中重新验证订阅或处理 pushsubscriptionchange事件,只要您可以访问原始订阅并重新创建哈希/ID。

这应该涵盖大多数情况。但是,当通过 Google 和 Firefox 的推送服务器发送推送通知时,您仍然需要尊重无效订阅的响应代码 ( HTTP 401 ) 并将它们从您的数据库中删除。

Javascript Crypto functionality对于可用的哈希函数。支持 FF 和 Chrome。

关于push-notification - Web Push API - 在后端存储订阅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42505120/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com