我最近在我的Angular应用中实现了推送通知。一切正常。我请求用户的许可,并将SubscriptionInfo
发送到我的django后端,我将其存储在数据库中以获取实际的通知。
SubscriptionInfo
看起来像这样:
{
"endpoint": "https://fcm.googleapis.com/fcm/send/cbx2QC6AGbY:APA91bEjTzUxaBU7j-YN7ReiXV-MD-bmk2pGsp9ZVq4Jj0yuBOhFRrUS9pjz5FMnIvUenVqNpALTh5Hng7HRQpcUNQMFblTLTF7aw-yu1dGqhBOJ-U3IBfnw3hz9hq-TJ4K5f9fHLvjY",
"expirationTime": null,
"keys": {
"p256dh": "BOXYnlKnMkzlMc6xlIjD8OmqVh-YqswZdut2M7zoAspl1UkFeQgSLYZ7eKqKcx6xMsGK7aAguQbcG9FMmlDrDIA=",
"auth": "if-YFywyb4g-bFB1hO9WMw=="
}
}
现在在测试期间,后端在发送订阅时抛出了错误410 GONE
(我不知道为什么,删除后端中的行并在前端中重新允许通知已解决了该问题),表明订阅不再有效,应删除。当然,我必须以某种方式通知前端,删除“本地”通知令牌并重新征求用户的许可。通知前端不是问题,但是,由于一个用户可以有多个设备(或浏览器)来接收通知,因此我必须以某种方式签入前端,必须“续订”哪个订阅。
因此,我考虑过使用某种uid
(由浏览器名称,版本等组成),但是,这会带来一些问题:
然后,我考虑使用SubscriptionInfo
中已经包含的一些信息,例如端点或键的某些部分。每个订阅的终结点一定要不同,对吗?在请求通知权限时(“生成” SubscriptionInfo
),每次允许通知都会得到一个不同的端点,对吗? (大致)这是我将如何处理跟踪通知“状态”的方法:
Notification.permission
是否为granted
:SubscriptionInfo
发送到后端。SubscriptionInfo
标记为GONE / FAILED(或者可以删除)也许我想得太过分了,因为我真的找不到关于此类问题的任何信息。还是subscriptionInfo
如此持久,以至于只有在用户手动撤消通知权限后它才变得无效,从而仅在后端删除SubscriptionInfo
就足够了吗?