Ionic FCM插件onNotification函数失效,调试无法接收通知
解决FCM onNotification()回调不触发的问题
看起来你现在的核心问题是:后台能收到通知,但onNotification()订阅没有日志输出,也就是这个回调没生效。咱们一步步来排查:
1. 先搞懂FCM消息的两种类型差异
FCM的消息分两种,通知消息(notification payload)和数据消息(data payload),混合发送时的行为和APP状态直接相关:
- 当APP处于后台时,系统会自动把notification payload展示在通知栏,这时候
onNotification()不会触发,只有当用户点击通知栏消息时,才会把消息数据传给这个回调。 - 当APP处于前台时,系统不会自动弹通知,
onNotification()会直接触发,你需要在回调里自己处理弹窗逻辑。
所以你测试的时候,一定要确保APP是前台活跃状态(打开着,没退到后台),再发请求试试,看控制台有没有日志输出。
2. 修正你的请求Payload格式
你现在把content_available、priority这些参数放在了notification对象里,其实这些是顶层全局参数,不属于notification的子属性。正确的JSON格式应该是这样:
{ "registration_ids": [ "your_device_token" ], "notification": { "title": "New request", "body": "Your action required to accept.", "sound": "default", "click_action": "FCM_PLUGIN_ACTIVITY" }, "data": { "key": "value" }, "content_available": false, "priority": "high" }
格式错误可能导致FCM插件无法正确解析消息,调整后再测试。
3. 检查onNotification()的订阅时机
要确保这个订阅是在APP初始化的早期就执行,比如在app.component.ts的ngOnInit()方法里(如果你用的是Ionic/Angular),别被其他异步逻辑阻塞。如果订阅太晚,可能消息已经到达但回调还没注册上,自然不会有日志。
另外,确认你的FCM插件版本和项目框架版本兼容,比如用@ionic-native/fcm的话,要对应上你的Ionic版本,旧版本插件可能存在回调不触发的bug,必要时可以尝试更新插件。
4. 测试纯数据消息排查问题
你可以先发送一个只有data字段的消息,这种消息不管APP在前台还是后台,onNotification()都会触发(后台时点击通知也会触发),这样能快速排查是不是notification payload的问题。请求示例:
{ "registration_ids": [ "your_device_token" ], "data": { "title": "New request", "body": "Your action required to accept.", "key": "value" }, "priority": "high" }
如果这时候onNotification()能打印出数据,说明是混合消息的处理逻辑问题,再针对性调整。
5. 检查平台专属配置
- Android端:确保
AndroidManifest.xml里正确配置了click_action对应的Activity,比如你的click_action是FCM_PLUGIN_ACTIVITY,要保证这个Activity存在,并且有正确的intent filter,不然点击通知后也无法触发回调。 - iOS端:确保已经开启了远程通知权限,并且在
AppDelegate里正确处理了FCM的回调方法(比如didReceiveRemoteNotification),把消息转发给FCM插件。
按照上面的步骤逐一排查,应该能解决onNotification()不生效的问题。
内容的提问来源于stack exchange,提问作者Trishant Pahwa

