跟踪推送通知

时间:2020-03-04 19:07:05

标签: django angular typescript push-notification

我最近在我的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就足够了吗?

0 个答案:

没有答案