10

我正在向订阅了优先级参数设置为高的一个主题的一小组设备(少于 5 个)发送推送消息

高优先级。FCM 尝试立即传递高优先级消息,允许 FCM 服务在可能的情况下唤醒睡眠设备并打开与您的应用服务器的网络连接。例如,具有即时消息、聊天或语音呼叫警报的应用程序通常需要打开网络连接并确保 FCM 将消息无延迟地传递到设备。仅当消息时间紧迫且需要用户立即交互时才设置高优先级,但请注意,与正常优先级消息相比,将消息设置为高优先级更容易消耗电池电量。

但是当我将设备置于空闲状态时,它会带来很大的延迟。在 Nougat 7.1 上延迟超过 10 分钟。这种类型的推送需要少于 10 秒的延迟。

设置time_to_live为 0 仅解决 Marshmallow 上的问题。牛轧糖仍然失败。

所以,我只看到 3 个可能的问题原因

  1. 发送到主题的消息不能是高优先级。但是向每个设备发送独立的消息会增加应用服务器的负载。我需要从 Firebase 数据库加载新令牌,因此结果将是 - 5 个用户的 10 个 http 请求而不是 1 个。

  2. 应用程序必须在白名单中。但根据文档,如果我使用 FCM,这是不可接受的。而且我不想要它,因为它会导致电池耗尽。

  3. 漏洞?https://github.com/firebase/quickstart-android/issues/100

如果真正的原因是第一位的,那么为什么文档中没有描述呢?

4

2 回答 2

3

通过设置time_to_live为 0 解决了问题。根据文档,此设置的优先级为“现在或从不”

指定消息生命周期的另一个优点是 FCM 从不限制 time_to_live (TTL) 值为 0 秒的消息。换句话说,FCM 保证“现在或永远”必须传递的消息尽最大努力。请记住,time_to_live 值为 0 意味着无法立即传递的消息将被丢弃。但是,由于此类消息从不存储,因此这为发送通知消息提供了最佳延迟。

UPD:仅针对 Marshmallow 解决。关于牛轧糖仍然是一个问题。

UPD2:只是不要使用主题,它们不打算立即发送推送。

于 2016-11-15T10:04:00.853 回答
0

根据Firebase 文档

主题消息针对吞吐量而不是延迟进行了优化。为了快速、安全地传递到单个设备或小组设备,请将消息定位到注册令牌,而不是主题。

于 2020-05-10T12:20:44.937 回答