Android端React Native应用后台时Firebase远程推送无横幅通知弹出问题
适配指定版本的后台heads-up推送横幅配置方案
适配运行版本:@react-native-firebase/messaging@^10.5.0、react-native@0.63.4
Android端强制基础配置
- 通知渠道配置(Android 8.0+必备):系统仅会为绑定高优先级渠道的通知触发heads-up横幅弹窗
- 创建渠道时必须将重要性等级设置为
HIGH,低优先级渠道的通知只会收纳在状态栏通知栏,不会弹出横幅 - 渠道一旦创建完成,其优先级、展示规则都由系统托管,代码侧的后续修改不会生效。若之前配置过低优先级渠道,需要升级渠道版本号,通过用户重装应用或更新版本完成渠道重建后才能生效
- 创建渠道时必须将重要性等级设置为
- 权限配置:
- 校验应用全局通知开关未被用户手动关闭
- 适配Android 13+动态权限规则,主动申请
POST_NOTIFICATIONS权限,无权限时系统会直接拦截所有通知展示
推送载荷的触发规则
应用处于后台状态时,Firebase Messaging仅会自动渲染携带notification字段的合法载荷,纯data字段的消息不会自动生成系统通知,自然无法触发横幅弹窗
- 可自动触发横幅的合法载荷要求:
- 在notification层级将Android端通知优先级设置为
PRIORITY_HIGH - 载荷内指定的
notification_channel_id必须与端侧创建的高优先级渠道ID完全匹配
- 在notification层级将Android端通知优先级设置为
- 纯data推送的特殊处理:若业务场景仅使用data字段传输推送内容,需要在后台消息回调中手动创建通知实例,将通知优先级设置为最高等级、绑定对应高优先级渠道后再触发展示,才能唤起heads-up横幅
对应库版本的特殊处理
- 当前使用的
@react-native-firebase/messaging@10.5.0版本,后台收到的纯data消息不会自动生成通知,需要在入口文件注册的后台消息处理器中手动调用通知展示API,示例参考:// 注册全局后台消息处理逻辑 messaging().setBackgroundMessageHandler(async remoteMessage => { // 从自定义data字段提取通知内容,手动构造高优先级通知 await notifications().displayNotification({ notification: { id: Date.now().toString(), title: remoteMessage.data.pushTitle, body: remoteMessage.data.pushContent, android: { channelId: '预先创建的高优先级通知渠道ID', priority: notifications.AndroidNotificationPriority.HIGH } } }) }) - 核对
AndroidManifest.xml配置:确认未拦截Firebase默认通知接收服务的响应流程,未关闭系统通知的横幅展示权限声明
内容的提问来源于stack exchange,提问作者Deepali Jadhav
相关产品推荐
相关产品推荐

