Android推送通知始终位于底部,如何使其显示在通知栏顶部?
让FCM推送通知显示在通知栏顶部的解决方案
嘿,这个问题我做项目时也踩过坑!要让FCM推送的通知一收到就顶在通知栏最上方,核心是调整通知的优先级/重要性等级,不同平台的配置方式略有区别,我给你详细拆解下:
Android 端配置
1. 通过FCM控制台/HTTP API发送通知消息
如果是直接发送FCM通知消息(非数据消息),需要把推送优先级设为高:
- 在FCM控制台发送时:找到「高级选项」,把「优先级」改成「高」(默认可能是「正常」)。
- 通过HTTP API发送时:在请求体里添加
"priority": "high",同时针对Android配置,可在android字段里重复设置强化优先级:
{ "to": "DEVICE_TOKEN", "notification": { "title": "重要通知", "body": "这会显示在通知栏顶部" }, "priority": "high", "android": { "priority": "high" } }
2. 本地构建通知(接收数据消息时)
如果是接收FCM数据消息后,自己在客户端构建通知展示,必须手动设置通知优先级和渠道重要性:
- 首先针对Android O及以上版本,创建高优先级通知渠道(这一步是核心,渠道优先级会覆盖单个通知的设置):
// Kotlin 示例 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { val channelId = "high_priority_channel" val channelName = "高优先级通知" val channel = NotificationChannel(channelId, channelName, NotificationManager.IMPORTANCE_HIGH).apply { description = "用于展示需要置顶的重要通知" enableVibration(true) setShowBadge(true) } val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager notificationManager.createNotificationChannel(channel) }
- 然后构建通知时,设置优先级为
PRIORITY_HIGH:
val notification = NotificationCompat.Builder(this, "high_priority_channel") .setContentTitle("置顶通知") .setContentText("我出现在通知栏顶部啦") .setSmallIcon(R.drawable.ic_notification) .setPriority(NotificationCompat.PRIORITY_HIGH) // 关键设置 .build() NotificationManagerCompat.from(this).notify(NOTIFICATION_ID, notification)
iOS 端配置
iOS的推送优先级由APNS控制,要让通知置顶显示,需要:
- 通过FCM控制台发送时:在「高级选项」里把「APNS优先级」设为
10(立即推送,会唤醒设备并显示在顶部),不要选5(后台静默推送)。 - 通过HTTP API发送时:在请求头里添加
apns-priority: 10,或者在apns字段里设置优先级:
{ "to": "DEVICE_TOKEN", "notification": { "title": "iOS置顶通知", "body": "这会显示在通知栏顶部" }, "apns": { "headers": { "apns-priority": "10" } } }
另外要确保用户在iOS设置里给你的App开启了「通知」权限,并且允许「横幅」显示(这个是用户端设置,开发者只能引导开启)。
常见坑提醒
- 区分「通知消息」和「数据消息」:FCM通知消息由系统自动展示,优先级由推送配置决定;数据消息需要客户端自己处理,必须手动设置通知优先级。
- Android渠道优先级是核心:如果你的App已经创建了低优先级的渠道,即使单个通知设了高优先级,也会被渠道限制,所以一定要确保使用高优先级渠道。
内容的提问来源于stack exchange,提问作者Santosh Aln
相关产品推荐
相关产品推荐

