Ionic应用FCM通知数据保存问题:关闭后点击通知无法保存求助
解决Ionic应用关闭后点击FCM通知无法保存数据的问题
这个问题其实挺常见的,核心原因是App冷启动时(完全关闭后通过通知打开),FCM的通知数据不会通过常规的onNotification()订阅返回——因为此时App还没完成初始化,订阅逻辑还没执行,而触发App启动的通知数据会被存在启动参数里。下面是具体的解决方案:
1. 区分三种通知场景
FCM通知在Ionic里有三种触发场景,我们需要分别处理:
- 前台运行:App在前台时,
onNotification()会直接收到完整数据 - 后台运行:App在后台挂着,点击通知打开App,
onNotification()里的wasTapped会为true - 冷启动:App完全关闭,点击通知启动App,这时候必须通过初始化方法获取启动时携带的通知数据
2. 修改你的代码逻辑
你需要在platform.ready()里同时处理常规订阅和冷启动数据获取,用FCM插件提供的getInitialNotification()方法(如果你的插件版本较旧,可能是getInitialPushPayload()):
platform.ready().then(() => { // 第一步:处理冷启动时的通知数据(App完全关闭后点击通知启动) fcm.getInitialNotification().then(initialData => { if (initialData) { // 这里执行你的数据保存逻辑 this.saveNotification(initialData); } }); // 第二步:处理前台/后台的通知 fcm.onNotification().subscribe(data => { if (data.wasTapped) { // 后台收到通知,点击后打开App的情况 this.saveNotification(data); } else { // 前台直接收到通知的情况 this.saveNotification(data); } }); }); // 封装统一的保存方法,避免重复代码 private saveNotification(notificationData: any) { // 把你的数据赋值逻辑移到这里 this.con.notification_title = notificationData.notification_title; this.con.notification_body = notificationData.notification_body; // 持久化到本地(比如用Ionic Storage) this.storage.set('latest_notification', notificationData) .then(() => console.log('通知数据已保存')) .catch(err => console.error('保存失败:', err)); }
3. 关键注意事项
- FCM Payload格式:确保你的推送Payload同时包含
notification和data字段,或者直接使用纯data消息。如果只发notification字段,冷启动时可能无法获取到自定义的notification_title等数据——FCM会把这些字段放在系统通知栏,但不会传递给App的启动参数。 - 插件版本验证:确认你的
cordova-plugin-fcm-with-dependecy-updated(或你使用的FCM插件)版本支持getInitialNotification()方法,部分旧版本可能方法名不同。 - 测试方式:测试冷启动场景时,一定要完全关闭App(比如在手机的应用管理里划掉它),而不是仅仅后台挂着,否则会被识别为后台场景。
这样修改后,无论App是前台、后台还是完全关闭状态,点击通知都能正确保存数据了。
内容的提问来源于stack exchange,提问作者DarrenChand
相关产品推荐
相关产品推荐

