Flutter FCM通知问题:未及时查看后打开APP无法看到通知
FCM通知延迟打开应用后不显示的解决排查方案
应用整体运行正常,但FCM通知送达后,用户间隔一段时间再打开应用就无法看到通知,以下是常见的排查和解决方向:
1. 检查通知渠道优先级设置
低优先级的通知容易被系统自动清理,确保你的FCM通知渠道设置了足够高的优先级:
NotificationChannel channel = new NotificationChannel("fcm_channel_id", "FCM通知", NotificationManager.IMPORTANCE_HIGH); NotificationManager notificationManager = getSystemService(NotificationManager.class); notificationManager.createNotificationChannel(channel);
发送通知时指定该渠道ID,避免使用默认的低优先级渠道。
2. 确认系统通知清理规则
部分安卓设备会在内存不足或后台应用被回收时清理旧通知:
- 发送通知时设置
setAutoCancel(false),避免通知被自动取消; - 检查应用的「通知历史」权限是否开启(部分国产ROM需要手动开启),确保系统保留通知记录;
- 避免设置过短的
setTimeoutAfter(),如果需要通知长期保留,不要设置自动超时。
3. 区分FCM消息类型并处理
- 通知消息:FCM会直接展示,但如果应用被完全杀死,系统可能不会保留通知。此时在应用启动时调用
FirebaseMessaging.getInstance().getInitialMessage(),获取启动时触发的FCM消息,重新构建并展示通知; - 数据消息:FCM不会自动展示,需要你自己将通知内容存储到本地数据库(如Room),应用启动时从数据库读取未展示的通知并重新推送。
4. 适配安卓12+的通知权限
安卓12及以上版本需要明确申请通知权限:
- 在
AndroidManifest.xml中添加权限声明:
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
- 在应用启动时请求权限:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { if (ContextCompat.checkSelfPermission(this, Manifest.permission.POST_NOTIFICATIONS) != PackageManager.PERMISSION_GRANTED) { ActivityResultContracts.RequestPermission requestPermission = new ActivityResultContracts.RequestPermission(); registerForActivityResult(requestPermission, isGranted -> { // 处理权限申请结果 }).launch(Manifest.permission.POST_NOTIFICATIONS); } }
示例截图


内容的提问来源于stack exchange,提问作者s6 lite61
相关产品推荐
相关产品推荐

