首页 > 解决方案 > 在将 Firebase Cloud Messaging 与 Django-Push-Notifications 结合使用时,如何使用 TTL 来防止消息积压?

问题描述

我正在使用django-push-notifications在 Django 中使用 Firebase Cloud Messaging,通过桌面通知向我们的用户发送推送通知。

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

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

根据 FCM 文档的这一部分,似乎答案是设置 TTL=0,但我的尝试并没有产生预期的行为。

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

这是我尝试过的:

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

标签: djangofirebasedjango-rest-frameworkfirebase-cloud-messagingdjango-push-notifications

解决方案


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

{
  "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 消息的生存时间设置在 下webpush/headers/TTL,而您将其添加到顶层。


推荐阅读