我发送推送消息给订阅一个主题的小组设备(少于5个),优先级参数设置为高
高优先级。 FCM尝试传递高优先级消息 立即,允许FCM服务唤醒睡眠设备 可能并打开与您的应用服务器的网络连接。应用程序 例如,通常的即时消息,聊天或语音呼叫警报 需要打开网络连接并确保FCM提供 消息延迟到设备。只有在设置时才设置高优先级 消息是时间关键的,需要用户立即 交互,但要注意将邮件设置为高优先级 与普通优先级相比,电池消耗更多 消息。
但是当我将设备置于IDLE状态时,它会带来很大的延迟。在Nougat 7.1延迟超过10分钟。这种类型的推动需要不到10秒的延迟。
将time_to_live
设置为0仅在Marshmallow上解决问题。牛轧糖仍然失败。
所以,我只看到3个可能的问题原因
发送给主题的邮件不能具有高优先级。但是向每个设备发送独立消息会增加应用服务器负载。我需要从Firebase数据库加载新的令牌,因此结果将是 - 对5个用户而不是1个用户的10个http请求。
应用必须在白名单中。但根据docs,如果我使用FCM,这是不可接受的。我不想要它,因为它会导致电池耗尽。
错误? https://github.com/firebase/quickstart-android/issues/100
如果真正的原因是第一个,那么为什么它没有在文档中描述?
答案 0 :(得分:0)
问题通过将time_to_live
设置为0来解决。根据文档,此设置优先于"现在或从不"
指定消息生命周期的另一个好处是FCM 永远不会限制time_to_live(TTL)值为0秒的消息。 换句话说,FCM保证必须为消息尽最大努力 交付"现在或从未。"请记住,time_to_live值为0 表示不能立即传递的消息被丢弃。 但是,因为这些消息永远不会被存储,所以这提供了 发送通知消息的最佳延迟。
UPD:仅针对棉花糖解决。关于Nougat仍然是一个问题。
UPD2:只是不使用主题,它们不会毫不拖延地发送推送。
答案 1 :(得分:0)
优化了主题消息的吞吐量,而不是延迟。为了快速,安全地传送到单个设备或小型设备组,target messages to registration tokens,而不是主题。