我正在通过FCM发送一条高优先级的数据信息。
curl -X POST -H "Authorization: Bearer ya29.c.b0AXv..." -H "Content-Type: application/json" -d '{
"message": {
"topic" : "mytopic",
"data": {
"message": "my_unique_data"
},
"android":{
"priority":"high"
},
}
}' https://fcm.googleapis.com/v1/projects/myproject/messages:send在收到-我打电话通知。如果Android是活动的,这是可行的。
但是,如果智能手机的屏幕关闭,智能手机静止了一段时间,我再次发送数据消息,直到我移动手机,通知才会出现。
我想Android是在打瞌睡模式,但是文档中说,高优先级的消息FCM会让智能手机摆脱这种模式。
请帮我解决问题。
发布于 2022-08-18 13:51:15
发生这种情况的原因有两个(来自这里):
因此,听起来您的应用程序的FCM配额被取消了优先级,您需要弄清楚哪种方案适用。
发布于 2022-08-18 13:52:31
一般来说,你是正确的,如下文所述:
FCM被优化为与Doze和App备用空闲模式一起工作。FCM高优先级消息可以让你可靠地唤醒你的应用程序来吸引用户。在Doze或App备用模式下,系统传递消息,并允许应用程序临时访问网络服务和部分唤醒,然后将设备或应用程序返回到空闲状态。对于时间敏感的、用户可见的通知,请考虑使用高优先级的消息来启用Doze模式下的传递。高优先级消息预计会导致通知。有关更多信息,请参见FCM关于高优先级消息的指导。
然而,他们也提到:
最重要的是,所有应用程序都应该能够通过正确管理网络连接、警报、作业和同步,以及使用FCM消息来支持Doze。对于一组狭窄的用例,这可能是不够的。对于这种情况,系统提供了一个可配置的应用程序列表,这些应用程序部分不受Doze和App备用优化的限制。部分豁免的应用程序可以在Doze和App备用期间使用网络并持有部分唤醒锁。然而,其他限制仍然适用于应用程序,就像对其他应用程序一样。例如,应用程序的作业和同步被推迟(在API级别23及以下),并且它的常规AlarmManager警报不会触发。应用程序可以通过调用isIgnoringBatteryOptimizations()来检查其当前是否在豁免列表中。
有时,OEM也会改变打瞌睡模式的行为,这会产生与Google文档中所述功能略有不同的功能。所以我建议按照他们在文件中的提示:
用户可以在设置>电池>电池优化中手动配置豁免应用程序列表。或者,该系统为应用程序提供了要求用户豁免它们的方法:大多数应用程序都应该调用包含ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS的意图。满足可接受用例的应用程序可以调用包含ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS意图操作的意图,让用户直接将应用程序添加到豁免列表中,而无需进入系统设置。注意: Google政策禁止应用程序请求直接豁免安卓6.0+ (Doze和App备用)的电源管理功能,除非该应用的核心功能受到不利影响。应用程序可以通过调用isIgnoringBatteryOptimizations()来检查其当前是否在豁免列表中。
我相信这能解决你的问题
博士- https://developer.android.com/training/monitoring-device-state/doze-standby
https://stackoverflow.com/questions/73404037
复制相似问题