[英]Android app not waking up from doze mode even with High priority Message
[英]Why Android does not exit DOZE mode, despite the high priority of the message in FCM?
我正在通过 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 使智能手机退出此模式。
请帮忙解决问题。
发生这种情况有两个原因(从这里):
因此,听起来您的应用的 FCM 配额已被取消优先级,您需要确定适用哪种情况
一般来说,您是正确的,如下所述:
FCM 已针对 Doze 和 App Standby 空闲模式进行了优化。 FCM 高优先级消息让您能够可靠地唤醒您的应用以吸引用户。 在 Doze 或 App Standby 模式下,系统传递消息并让应用程序临时访问网络服务和部分唤醒锁,然后将设备或应用程序返回到空闲 state。 对于时间敏感、用户可见的通知,请考虑使用高优先级消息以在打盹模式下启用传递。 高优先级消息预计会导致通知。 有关详细信息,请参阅 FCM 关于高优先级消息的指南。
然而,他们也提到:
几乎所有应用程序都应该能够通过正确管理网络连接、警报、作业和同步以及使用 FCM 消息来支持打盹。 对于一组狭窄的用例,这可能还不够。 对于这种情况,系统提供了一个可配置的应用程序列表,这些应用程序部分地免于打盹和应用程序待机优化。 部分豁免的应用程序可以在打盹和应用程序待机期间使用网络并保持部分唤醒锁定。 但是,其他限制仍然适用于该应用程序,就像它们对其他应用程序一样。 例如,应用程序的作业和同步被延迟(在 API 级别 23 及以下),并且其常规 AlarmManager 警报不会触发。 应用程序可以通过调用 isIgnoringBatteryOptimizations() 来检查它当前是否在豁免列表中。
有时,OEM 也会更改打盹模式的行为,从而创建与 Google 文档中所述的功能略有不同的功能。 所以我建议按照他们在文档中的提示:
用户可以在设置 > 电池 > 电池优化中手动配置豁免应用列表。 或者,系统为应用程序提供请求用户豁免它们的方法:大多数应用程序应调用包含 ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS 的意图。 满足可接受用例的应用程序可以改为调用包含 ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS 意图操作的意图,让用户直接将应用程序添加到豁免列表,而无需进入系统设置。 注意:Google Play 政策禁止应用请求直接免除 Android 6.0+(打盹和应用待机)中的电源管理功能,除非应用的核心 function 受到不利影响。 应用程序可以通过调用 isIgnoringBatteryOptimizations() 来检查它当前是否在豁免列表中。
我相信这应该可以解决您的问题
文档 - https://developer.android.com/training/monitoring-device-state/doze-standby
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.