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

如何使用@capacitor/push-notifications插件修改接收的推送通知

@capacitor/push-notifications 修改推送展示内容的实现方案

首先明确核心结论:官方@capacitor/push-notifications插件本身不支持拦截、修改通知中心展示的推送内容。
这个插件提供的pushNotificationReceived事件仅在应用处于前台活跃状态时才会触发到JS层;当应用在后台运行、或被系统杀死时,FCM推送到达设备后会直接由系统渲染展示到通知中心,整个过程不会执行任何JS层代码,根本没有时机在JS侧完成解密再修改展示内容。

可落地的实现路径

要实现「收到加密推送→客户端解密→再展示到通知中心」的需求,必须在原生层完成拦截处理,具体可以按以下两种方式落地:

  • 基于现有插件扩展原生拦截能力
    • Android侧:自定义继承FirebaseMessagingService的类,重写onMessageReceived方法,在方法内拿到原始加密的推送payload完成解密,再手动构建通知调用系统API展示。注意发送FCM消息时不要携带notification字段,仅传输data字段,这样系统收到推送后不会自动弹出通知,会将消息完整流转到你自定义的Service中处理。
    • iOS侧:新增Notification Service Extension靶机,这是iOS系统官方提供的通知前置拦截扩展,推送到达后系统会先将payload传入这个扩展,你可以在扩展代码内完成解密,修改通知的标题、正文、附带素材后,再交给系统渲染展示。要触发这个扩展,FCM推送payload里必须携带mutable-content: 1字段。
      上述原生修改不需要你重写整个推送插件,只需要在Capacitor生成的原生工程里添加对应代码即可,解密完成后的消息如果需要同步给前端JS层,仍然可以复用原有插件的消息传递逻辑。
  • 替换为支持前置拦截的第三方推送插件
    如果不想自行编写原生代码,可以选择已经封装好上述原生拦截能力的社区推送插件,这类插件一般会直接暴露通知展示前的原生处理回调,支持在回调内完成解密等自定义逻辑后再触发通知展示,不需要手动写原生扩展。

避坑提示:不要尝试在JS层实现后台推送的解密逻辑。所有混合框架的JS执行线程都仅在应用前台活跃时处于运行状态,应用后台、杀进程场景下JS线程完全挂起,只有用户点击通知拉起应用后JS层才能拿到消息数据,这个时点通知早已展示完成,根本无法满足解密后再展示的需求。

内容的提问来源于stack exchange,提问作者mtnair

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 18:57:49