[英]Nodejs Firebase cloud messaging delayed delivery on android
我正在尝试将一些高优先级的数据消息从 nodejs 后端推送到 android 客户端。 这是我的代码,
var payload = {
data
};
var options = {
priority: "high",
timeToLive: 0,
ttl: 0,
android: {
priority: "high",
timeToLive: 0,
ttl: 0,
},
};
admin.messaging()
.sendToDevice(deviceFcmId, payload, options)
.then(function (response) {})
.catch(function (response) {
console.error("error sendNotification", response);
});
如您所见,我正在使用priority "high"
和timeToLive: 0
。 但这不会唤醒处于Doze
模式的设备,或者有时即使设备处于解锁的 state 中,消息也会延迟几分钟。 这是一个语音通话应用程序,因此交付延迟应该是最小的。 我在 StackOverflow 上搜索过类似的帖子,但对我没有任何帮助。 我在这里想念什么? 提前致谢。
来自官方文档
Android 上的高优先级消息适用于时间敏感、用户可见的内容,并应导致面向用户的通知。 如果 FCM 检测到消息不会导致面向用户的通知的模式,则您的消息的优先级可能会降低为正常优先级。 FCM 使用 7 天的消息行为来确定是否取消消息的优先级; 它为您的应用程序的每个实例独立做出此决定。 如果作为对高优先级消息的响应,通知以用户可见的方式显示,那么您未来的高优先级消息将不会被取消优先级。
这意味着您的 android 应用程序应该几乎只显示通知(确保应用程序启用了通知)。 如果您滥用这一点,而是在接收推送时尝试直接做其他事情(例如打开与后端的连接或执行任何其他计算成本高的任务),那么您的消息可能会降级为正常优先级。
在单个设备上,您可以通过检查getPriority()
返回的值是否低于getOriginalPriority()
来验证消息是否已被取消优先级。 对于所有消息,您可以查询数据 API 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.