React Native集成Airship后安卓端通知已接收但不显示问题咨询
安卓端Airship推送接收后不展示通知排查方案
核心原因:你接收到的是Airship发送的纯数据类型推送,Firebase默认不会为纯数据消息自动弹出通知,需要要么调整Airship推送类型,要么自行实现通知展示逻辑。
1 优先检查Airship默认推送逻辑
- 确认Airship后台推送配置:发推送时不要选择「仅数据(Data Only)」类型,选择带通知内容的普通推送类型,Airship SDK默认会自动解析通知内容并展示到通知栏,不需要手动处理Firebase消息回调
- 确认你添加的
setBackgroundMessageHandler逻辑是否拦截了Airship的默认处理:如果你不需要自定义数据推送的处理逻辑,可以直接删除这段代码,避免覆盖Airship的默认消息接收逻辑,恢复自动通知展示
2 若需保留自定义数据推送处理,补充通知展示逻辑
如果业务需要使用纯数据推送自行控制通知展示,需要在消息回调中调用本地通知API主动弹出通知,示例代码如下(以Notifee本地通知库为例,也可替换为项目中使用的其他本地通知库):
import messaging from '@react-native-firebase/messaging'; import notifee, { AndroidImportance } from '@notifee/react-native'; messaging().setBackgroundMessageHandler(async (remoteMessage) => { console.log('Message handled in the background!', remoteMessage); // 从Airship自定义字段提取通知内容 const alertText = remoteMessage.data['com.urbanairship.push.ALERT']; if (!alertText) return; // 安卓8.0及以上必须先创建通知渠道 const channelId = await notifee.createChannel({ id: 'default_push_channel', name: '默认通知', importance: AndroidImportance.HIGH, }); // 弹出本地通知 await notifee.displayNotification({ title: '通知标题', // 可根据业务自定义,也可从Airship数据字段提取 body: alertText, android: { channelId, smallIcon: 'ic_stat_notification', // 替换为项目内的通知小图标资源名 }, }); });
同时需要在前台消息回调onMessage中补充相同的通知展示逻辑,否则应用前台运行时也不会弹出通知。
3 检查基础配置项
- 通知权限:安卓13及以上系统需要动态申请
POST_NOTIFICATIONS权限,未授权的应用无法展示任何通知;国产安卓系统还需要手动打开应用的自启动、后台弹出通知权限 - 通知图标:安卓通知小图标必须为透明背景的单色图标,资源配置错误会导致通知无法正常展示
- 通知渠道:安卓8.0及以上系统所有通知必须绑定合法的通知渠道,未创建渠道的通知会被系统直接丢弃
4 特殊场景排查
- 确认应用没有被系统电池优化、后台活动限制拦截,部分系统会禁止第三方应用在后台弹出通知
- 检查AndroidManifest.xml配置,确认Airship SDK、Firebase SDK的相关服务、接收器配置完整,没有被其他自定义配置覆盖
内容的提问来源于stack exchange,提问作者Faisal Suhaibani
相关产品推荐
相关产品推荐

