仅在 Android 11 上,当应用程序在后台且屏幕关闭时,10 - 30 分钟内不会收到高优先级推送消息。
这在运行Android 11的Pixel 4XL上展出。 常规电池优化已关闭。 特定于应用程序的电池优化也已关闭。 设备已连接到 WiFi 网络。在4G连接上显示了相同的行为。
根据我对文档的理解,高优先级的 fcm 消息应立即传递,而不限于打瞌睡周期。
即使是打瞌睡周期,这种行为在关闭屏幕后的 3 分钟内仍然很明显,这不足以激活深度打瞌睡。
fcm 消息在设备插入时工作正常。
如何让我的应用及时接收推送消息?
未提供有效负载的通知节点。只有数据。 优先级设置为高。
我在Android 11中也遇到了同样的问题,尤其是在Moto G6和G8上。 由于FCM是我们应用程序的支柱,所以我想出了这个
class YourFCMServiceClass : FirebaseMessagingService(){
override fun onMessageReceived(remoteMessage: RemoteMessage) {
//Your handler Code
}
override fun onCreate() {
super.onCreate()
if (Build.VERSION.SDK_INT >= 26) {
val CHANNEL_ID = "your_channel_id"
val channel = NotificationChannel(
CHANNEL_ID,
"channel_name",
NotificationManager.IMPORTANCE_NONE
)
(getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager).createNotificationChannel(
channel
)
val notification: Notification = NotificationCompat.Builder(this, CHANNEL_ID)
.setContentTitle("")
.setContentText("").build()
startForeground(1, notification)
}
}
}
然后手动启动 FCM 服务foreground service
并实现设备reboot
的BroadcastReceiver
,并再次按foreground service
手动启动服务
class BootReceiver : BroadcastReceiver() {
override fun onReceive(context: Context?, p1: Intent?) {
conetxt.startForegroundService(Intent(context, YourFCMServiceClass::class.java))
}
}
这对我来说很好用。