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

如何在Ionic应用中获知设备接收推送通知的时机

Ionic 5/Cordova 11/Angular 11 推送通知在Android/iOS不同状态下的接收逻辑

你的猜测完全正确——仅修改Ionic应用层代码无法覆盖所有应用状态下的推送通知处理,后台和完全关闭状态的通知接收依赖原生系统配置、推送服务参数以及厂商特定设置。结合你的技术栈,具体接收逻辑和配置要点如下:

Android 端

  • 前台运行:推送通知会直接触发Ionic代码中注册的onNotificationReceived回调,你可以在Angular服务里自定义处理逻辑,比如弹窗提示、更新本地数据等。
  • 后台驻留:普通通知会先由Android系统通知栏接管,用户点击后才会唤醒应用并触发回调;如果是纯数据推送(无通知栏展示内容),需要在AndroidManifest.xml中把主Activity的launchMode设为singleTop,同时推送payload里要包含content_available: true,才能让应用在后台唤醒并处理数据。另外国内小米、华为等厂商有专属推送通道,必须在对应厂商平台注册应用并配置SDK,否则后台/关闭状态可能收不到通知。
  • 完全关闭:系统会直接在通知栏展示通知,用户点击后启动应用,此时可以在应用初始化逻辑中读取推送携带的payload(需确保推送插件保留启动参数)。

iOS 端

  • 前台运行:iOS默认不会自动弹出系统通知,需要在Ionic代码中配合cordova-plugin-local-notification手动调用原生API展示通知,同时onNotificationReceived回调会正常触发。
  • 后台驻留:如果推送payload的aps字段包含content-available: 1,iOS会唤醒应用的后台进程触发回调(此时应用不会前台启动,仅支持少量后台操作);普通通知会显示在通知栏,用户点击后唤醒应用并传递payload。
  • 完全关闭:仅静默通知(aps含content-available: 1且无alert等展示字段)或普通通知能被系统接收并展示,用户点击后启动应用,可在初始化阶段读取启动参数中的payload。必须在config.xml中开启远程通知后台模式:
<platform name="ios">
  <config-file parent="UIBackgroundModes" target="*-Info.plist">
    <array>
      <string>remote-notification</string>
    </array>
  </config-file>
</platform>

核心注意事项

  • 选择支持后台唤醒的推送插件,比如@ionic-native/firebase-messaging或cordova-plugin-fcm-with-dependecy-updated,这些插件会帮你处理基础原生配置,但部分细节(如Android启动模式、iOS后台权限)仍需手动调整原生文件。
  • 推送payload必须严格符合对应平台格式要求:Android区分notification和data字段,iOS依赖aps结构参数。
  • 应用层代码仅能处理前台状态的主动回调,后台和关闭状态的通知接收核心是原生系统的推送通道配置,必须确保权限、后台模式全部正确开启。

内容的提问来源于stack exchange,提问作者Aldo Fernando Saia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 20:15:34