提问者:小点点

当使用带有Django-Push-Notifications的Firebase云消息传递时,如何使用TTL来防止消息积压?


我正在使用Django中的Firebase云消息传递,使用django-push-notifications通过桌面通知向用户提供推送通知。

在浏览器完全关闭后(例如当计算机关闭时),我们的用户在下次启动时会收到先前发送的所有通知的积压。

虽然在某些情况下,用户希望接收全部积压的消息,但这并不是其中之一。

答案似乎是按照FCM文档的这一节设置TTL=0,但我的尝试并没有导致所需的行为。

请帮助我在这个上下文中更好地理解TTL。如果TTL是正确的方法,那么使用django-push-notifications在send_message()中格式化TTL的正确方法是什么,这样消息不会在不立即传递的情况下累积?

以下是我的尝试:

devices.send_message(
    body,
    TTL=0,
    time_to_live=0,
    link='blah',
    extra={'title': 'blah blah', 'icon': '/foo/bar.png'}
)

共1个答案

匿名用户

您发送的格式似乎与您链接的文档中的格式不同。从文档中可以看到:

{
  "message":{
    "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "data":{
      "Nick" : "Mario",
      "body" : "great match!",
      "Room" : "PortugalVSDenmark"
    },
    "apns":{
      "headers":{
        "apns-expiration":"1604750400"
      }
    },
    "android":{
      "ttl":"4500s"
    },
    "webpush":{
      "headers":{
        "TTL":"4500"
      }
    }
  }
}

因此,这里的关键是在webpush/headers/TTL下设置webpush消息的生存时间,同时将其添加到顶层。