You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firebase+Phonegap-plugin-push:如何发送静默消息并更新应用?

解决phonegap-plugin-push的onNotification回调未触发问题

我之前在把FCM集成到Ionic应用时也碰到过一模一样的问题,核心原因是你发送的APNs payload格式不符合phonegap-plugin-push的要求,导致推送被识别成了静默推送,根本不会触发onNotification回调。下面一步步帮你排查修复:

1. 先分析你的Payload问题

看你当前发送的FCM数据结构:

'message': { 
    'token': '<my-device-token>', 
    'data': { 'yup': 'okay' }, 
    'apns': { 
        'payload': { 
            'aps': { 
                'data': 'here is my data', 
                'badge': 1, 
                'content-available': 1 
            }, 
            'notId': 2 
        } 
    } 
}

这里有两个致命问题:

  • 缺少aps.alert字段:APNs规则里,没有alert的推送会被标记为静默推送,这类推送只会偷偷唤醒应用后台处理,完全不会触发onNotification回调(只会触发onBackgroundMessage,如果配置了的话)。
  • 自定义数据放错了位置:aps是APNs的标准字段集合,自定义数据应该放在payload的根层级(和aps同级),塞到aps里插件根本解析不到。

2. 修正后的Payload结构

调整后的FCM发送数据应该是这样的:

'message': { 
    'token': '<my-device-token>', 
    'data': { 'yup': 'okay' },  # 这个FCM的data字段会被插件传到回调的additionalData里
    'apns': { 
        'payload': { 
            'aps': { 
                'alert': {  # 必须加alert字段,哪怕是简单文本或空对象都可以
                    'title': '你的通知标题',
                    'body': '你的通知内容'
                },
                'badge': 1, 
                'content-available': 1  # 如果不需要后台唤醒应用可以直接删掉
            }, 
            'notId': 2,  # 保持和aps同级,插件能识别这个字段
            'custom_data': 'here is my data'  # 自定义数据放在payload根层级
        } 
    } 
}

3. 确认应用端的插件配置

还要确保你的Ionic应用里正确注册了回调,并且iOS配置开了alert权限:

const push = PushNotification.init({
  android: {
    senderID: "你的FCM Sender ID"
  },
  ios: {
    alert: "true",  // 必须开这个,否则收不到通知触发回调
    badge: "true",
    sound: "true"
  },
  windows: {}
});

// 确认回调注册没问题
push.on('notification', function(notification) {
  console.log('通知已接收:', notification);
  // 这里处理你的通知逻辑,比如弹提示、更新UI
  // notification.additionalData里会包含你发送的data和custom_data
});

push.on('error', function(error) {
  console.error('推送插件出错:', error.message);
});

4. 额外注意点

  • 如果应用在前台,部分版本的phonegap-plugin-push不会自动弹通知,但onNotification回调依然会触发,你可以在回调里手动处理通知显示。
  • content-available:1是给后台数据同步用的,如果你不需要后台唤醒应用,直接删掉这个字段就行,省得浪费系统资源。

调整完Payload再测试推送,onNotification回调应该就能正常触发了!

内容的提问来源于stack exchange,提问作者J. Hesters

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:28:01