问题描述
我在两个平台上都使用FCM插件(https://ionicframework.com/docs/native/fcm)遇到了问题,问题是当应用关闭/被杀死时,我无法处理通知, onNotification()方法未触发(在背景和前景中均能正常工作)
this.fcm.onNotification().subscribe((payload) => {
if (payload.wasTapped) {
console.log('Notification received in background');
} else {
console.log('Notification received in foreground');
}
console.log('Notification payload: ',payload);
});
{
"to" : <device-key>,"collapse_key" : "app-key","notification" : {
"body" : "body","title": "title"
},"data" : {"parameter":"1"},"android": {
"notification": {
"click_action": "FCM_PLUGIN_ACTIVITY"
}
}
}
用于IOS环境的离子信息输出:
Ionic:
Ionic CLI : 6.11.10 (/usr/local/lib/node_modules/@ionic/cli)
Ionic Framework : @ionic/angular 5.3.3
@angular-devkit/build-angular : 0.901.12
@angular-devkit/schematics : 9.1.12
@angular/cli : 9.1.12
@ionic/angular-toolkit : 2.3.3
Cordova:
Cordova CLI : 10.0.0
Cordova Platforms : ios 6.1.1
Cordova Plugins : cordova-plugin-fcm-with-dependecy-updated: ^7.3.1
System:
ios-sim : 8.0.2
NodeJS : v14.13.0 (/usr/local/Cellar/node/14.13.0/bin/node)
npm : 6.14.8
OS : macOS Catalina
Xcode : Xcode 12.0.1 Build version 12A7300
解决方法
我相信您的订阅是在构造函数内或在 onInit 函数内。
应用是在前台还是后台都没有关系,因为应用正在运行,订阅会被调用。
但是当应用程序被杀死时,订阅如何被调用?。收到通知后,点按它。然后只有应用程序启动。仅在应用启动后,订阅才有效。
您需要做的是,在应用启动时调用 fcm.getInitialPushPayload()
。
将以下内容放入构造函数中。
this.platform.ready().then(() => {
this.fcm.getInitialPushPayload().then((payload) => {
if(payload.wasTapped) {
console.log("Received FCM when app is closed -> ",JSON.stringify(payload));
// call your function to handle the data
this._handlePushNotificationData(payload);
}
});
}
现在,当应用程序关闭时,当您点击收到的通知时,应用程序将启动并调用上述函数。然后您的数据将在回调中可用。