Android应用退出状态下setBackgroundMessageHandler无法触发求助
Expo托管工作流中Android退出状态下FCM setBackgroundMessageHandler不触发的解决办法
核心问题原因
在Expo托管工作流里,Android应用退出状态下,FCM如果收到带notification字段的消息,会直接由系统展示通知,不会触发你的setBackgroundMessageHandler;另外,Expo的Headless任务配置没到位也会导致后台处理器无法执行。
具体解决步骤
注册Expo Headless任务
单独新建一个文件(比如firebaseBackgroundMessage.js),内容如下:import messaging from '@react-native-firebase/messaging'; export default async (message) => { console.log('remoteMessage', message); // 这里可以添加你需要的后台逻辑,比如存储数据、创建本地通知 return Promise.resolve(); };然后在
app.json中添加Headless任务注册:{ "expo": { "android": { "headlessTasks": [ { "taskName": "firebaseBackgroundMessage", "jsPath": "./firebaseBackgroundMessage.js" } ] } } }修改FCM请求载荷
删除请求中的notification字段,仅保留data和priority字段。因为带notification的消息在Android退出状态下会被系统直接处理,无法触发自定义的后台处理器。修改后的请求载荷:{ "to": "f5WjEw4...", "data": { "body": "This is an FCM notification that displays an image!", "title": "FCM Notification" }, "priority": "high" }如果需要展示通知,可以在
setBackgroundMessageHandler里用react-native-firebase的通知模块手动创建本地通知。调整App.js的Headless处理逻辑
确保Android的Headless模式能正常执行逻辑,修改后的代码:import messaging from '@react-native-firebase/messaging'; messaging().setBackgroundMessageHandler(async remoteMessage => { console.log('remoteMessage', remoteMessage); // 可在此添加本地通知创建等逻辑 }); function HeadlessCheck({ isHeadless }) { if (isHeadless) { return null; } return <App />; } export default HeadlessCheck;确认配置完整性
检查项目中的google-services.json是否正确放置,确保Expo构建时已读取到该文件,FCM的Android相关配置全部生效。
内容的提问来源于stack exchange,提问作者Bruno Ascenção
相关产品推荐
相关产品推荐

