如何在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
相关产品推荐
相关产品推荐

