loh*_*loh 7 push-notification node.js progressive-web-apps
也许我误解了一些东西,但我读过的关于推送通知的每一篇文章/教程似乎都忽略了这个细节。
作为参考,web-push的sendNotification方法接受pushSubscription、payload和options。
要在任何时间点向用户发送通知,用户的pushSubscription数据需要存储在数据库中并在需要时检索以供使用,对吗?因此,如果用户为多个设备启用了推送通知,则pushSubscription需要为每个设备存储数据。
我想我的问题是...您如何知道设备何时不再使用,以便您可以删除过时的pushSubscription数据?或者假设,无论出于何种原因,为同一用户+设备PushManager生成一个新的...您怎么知道用新的替换旧的?pushSubscriptionpushSubscription
解决方案是为用户构建一个设备管理器来管理每个设备及其关联的推送订阅吗?
我认为你有这个权利——一个很好的实现是你向浏览器显示启用了推送通知的实现。另一种方法是,如果当前使用的浏览器未启用推送通知,您只需提示启用推送通知。
我发现当推送通知消失时,推送端点将返回 HTTP 410 Gone 状态代码。因此,如果我收到推送尝试的响应,我会删除该推送条目。
顺便说一句,我在实践中发现,如果推送太多通知,Microsoft Edge 推送服务器通常会返回 HTTP 406 不可接受的状态代码。因此,在完美的世界中,在发送了许多通知的应用程序中,我们会提醒用户该问题。以下是该响应的示例:
{
"name": "WebPushError",
"message": "Received unexpected response code",
"statusCode": 406,
"headers": {
"content-length": "0",
"retry-after": "900",
"x-wns-notificationstatus": "appthrottled",
"x-wns-status": "appthrottled",
"x-wns-msg-id": "_redacted_",
"x-wns-debug-trace": "_redacted_",
"ms-cv": "_redacted_.0",
"strict-transport-security": "max-age=31536000; includeSubDomains",
"date": "Fri, 21 Oct 2022 15:55:28 GMT",
"connection": "close"
},
"body": "",
"endpoint": "https://wns2-bl2p.notify.windows.com/w/?token=_redacted_"
}
Run Code Online (Sandbox Code Playgroud)
我惊讶地发现并没有很多关于在整体上实现推送通知的可靠技术文章。一旦了解了细节,情况还不错,但这绝对是一个需要更多文档和讨论的领域。