Flutter中FCM推送通知无法以Heads-up悬浮弹窗形式显示求助
FCM实现Heads-up悬浮弹窗推送的配置要点
一、先明确Heads-up弹窗的触发前提
Heads-up悬浮窗只会在以下场景触发:
- 设备处于未锁屏状态
- 应用处于后台或已被杀死(前台时需自行构建通知逻辑)
- 通知优先级达到系统要求的阈值
二、针对FCM消息类型的配置调整
FCM消息分两种类型,对应不同的配置方式:
1. 通知消息(FCM直接推送展示)
如果是通过FCM控制台或后端发送通知消息,必须配置:
- 将通知的
priority设为high(Android)或10(iOS) - 可选添加
visibility字段设为public,确保锁屏状态下也能显示弹窗 - 后端发送的JSON示例:
{ "to": "DEVICE_TOKEN", "notification": { "title": "推送标题", "body": "推送内容", "priority": "high", "visibility": "public" } }
2. 数据消息(App自行处理展示)
如果发送的是数据消息,需要在App端构建通知时手动设置高优先级:
- 创建
NotificationCompat.Builder时,调用setPriority(NotificationCompat.PRIORITY_HIGH)或setPriority(NotificationCompat.PRIORITY_MAX) - 同时设置提示效果(如声音、震动),确保系统识别为高优先级通知
- Android代码示例:
NotificationCompat.Builder builder = new NotificationCompat.Builder(context, CHANNEL_ID) .setSmallIcon(R.drawable.ic_notify_icon) .setContentTitle("推送标题") .setContentText("推送内容") .setPriority(NotificationCompat.PRIORITY_HIGH) .setDefaults(Notification.DEFAULT_ALL); NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context); notificationManager.notify(NOTIFY_ID, builder.build());
三、检查系统侧权限与设置
- 确认App已获取通知权限,并且开启了「悬浮通知」「横幅通知」选项(不同品牌手机路径不同,一般在「设置→通知管理→对应App」中开启)
- 部分国产ROM(小米、华为、vivo等)有单独的「通知弹窗权限」,需手动开启
- 关闭设备的「免打扰模式」,该模式会屏蔽Heads-up弹窗
四、Android版本适配(API 26+)
Android 8.0及以上系统必须创建通知渠道,并将渠道的importance设为IMPORTANCE_HIGH或IMPORTANCE_MAX:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { NotificationChannel channel = new NotificationChannel(CHANNEL_ID, "高优先级通知渠道", NotificationManager.IMPORTANCE_HIGH); channel.setDescription("用于展示Heads-up悬浮弹窗"); NotificationManager notificationManager = context.getSystemService(NotificationManager.class); notificationManager.createNotificationChannel(channel); }
内容的提问来源于stack exchange,提问作者Nijat Naghiyev
相关产品推荐
相关产品推荐

