Android端Firebase推送通知:Postman发送无法即时送达求助
解决Postman发送FCM通知在Android后台/关闭时延迟、丢失的问题
先修正Postman请求体的几个关键问题,这是推送异常的主要原因:
一、调整Postman请求体配置
你的请求体存在参数位置错误、字段取值不合理的问题,直接导致FCM无法按高优先级推送,修正后的请求体如下:
{ "to": "你的设备有效FCM令牌", "priority": "high", "notification": { "title": "title notification", "body": "DEMO TEXT !!", "subtitle": "Sending app" }, "data": { "OrganizationId": "1", "bodyText": "New Announcement assigned", "organization": "DOS", "sound": "app_sound.wav" }, "android": { "priority": "high", "ttl": "86400s" } }
修正说明:
- 根层级添加
priority: "high":这是FCM识别高优先级推送的核心,之前放在notification或data内不生效,高优先级消息不会被Android系统后台节流 - 调整
ttl取值:你之前设置为1秒,消息未即时送达就会被直接丢弃,改为86400秒(1天)给足送达缓冲时间 - 自定义参数移至
data字段:notification仅支持FCM标准字段,自定义的OrganizationId放在data内才能被正确解析 - 明确Android平台优先级:单独配置
android.priority: "high",确保Android系统精准识别高优先级消息,避免厂商系统拦截
二、Ionic+Capacitor客户端配套配置
仅修改请求体不够,客户端需确保后台/关闭状态下能正常接收通知:
1. 配置AndroidManifest和通知渠道
在android/app/src/main/AndroidManifest.xml中添加权限和默认渠道配置:
<!-- 允许应用重启后接收通知、唤醒设备 --> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <!-- 指定默认高优先级通知渠道 --> <meta-data android:name="com.google.firebase.messaging.default_notification_channel_id" android:value="@string/default_notification_channel_id" />
在android/app/src/main/res/values/strings.xml中定义渠道ID:
<string name="default_notification_channel_id" translatable="false">high_priority_channel</string>
2. 代码中创建高优先级通知渠道
应用启动时创建高优先级渠道,避免系统静音或延迟通知:
import { FirebaseNotifications } from '@capacitor-firebase/notifications'; async function initNotificationChannel() { await FirebaseNotifications.createChannel({ id: 'high_priority_channel', name: '紧急通知', description: '用于重要公告推送', importance: 5, // Android最高优先级 visibility: 'public', sound: 'app_sound.wav' // 音频文件需放在android/app/src/main/res/raw目录下 }); } // 在应用初始化阶段调用 initNotificationChannel();
3. 正确监听通知事件
注册通知监听,即使应用关闭,系统也会自动展示通知:
import { FirebasePush } from '@capacitor-firebase/push'; // 监听通知接收(后台/关闭时系统自动展示通知,此处可处理自定义数据) FirebasePush.addListener('notificationReceived', (event) => { console.log('收到通知:', event); if (event.data?.OrganizationId) { // 处理自定义业务逻辑 } }); // 初始化时获取FCM令牌 async function initPush() { const { token } = await FirebasePush.getToken(); console.log('FCM令牌:', token); // 将令牌传递至服务器保存,用于后续推送 } initPush();
三、其他排查要点
- 确认
to字段的FCM令牌为当前设备的有效令牌,令牌过期会导致推送失败 - Postman的
Authorization密钥必须是Firebase项目的服务器密钥(可在Firebase控制台>项目设置>云消息传递中获取) - 国产安卓手机(小米、华为等)需将应用加入后台白名单,允许自启动和后台运行,否则系统会拦截后台通知
- 可在Firebase控制台>云消息传递>报告中查看推送状态,确认消息是被送达还是被系统拒绝
内容的提问来源于stack exchange,提问作者Jorge D
相关产品推荐
相关产品推荐

