我在 Ionic2 中使用以下插件进行推送通知
http://ionicframework.com/docs/native/push/
预期行为:
当应用程序关闭并收到通知时,当用户点击通知时,应在应用程序打开后触发 on("notification") 事件。
实际行为:
我成功收到通知。但是当应用程序在后台或关闭时,当我收到通知并点击通知时, on("notification") 事件不会触发。
Cordova 版 7.0.1
安卓版 6.2.3
我的代码:
this.platform.ready().then(() => {
this.pushsetup();
});
private pushOptions: PushOptions;
private pushObject: PushObject;
pushsetup() {
// to check if we have permission
this.push.hasPermission()
.then((res: any) => {
if (res.isEnabled) {
console.log('We have permission to send push notifications');
// configuration of push notification
this.pushOptions = {
android: {
senderID: 'XXXXXXXXXXX',
icon: 'icon_notification'
},
ios: {
alert: 'true',
badge: true,
sound: 'false',
senderID: 'XXXXXXXXXXX'
},
windows: {}
};
this.pushObject = this.push.init(this.pushOptions);
// attach push events
this.storage.get('isPushRegistered')
.then(isPushRegistered => {
if( !isPushRegistered ){
this.pushObject.on('registration').subscribe((registration: any) => {
console.log('Device registered', registration)
this.storage.set('isPushRegistered', true)
});
}
})
this.pushObject.on('notification').subscribe((notification: any) => {
console.log('Received a notification', notification)
});
this.pushObject.on('error').subscribe(error => console.error('Error with Push plugin', error));
}
});
}
所以,在我的代码中,你可以看到 this.pushObject.on('通知') 事件。关闭应用程序时不会触发。
感谢您的时间和支持。
最佳答案
这不是客户端代码的问题。发生此问题的原因是通知负载。
来自 phonegap-plugin-push 的官方文档
Notifications behave differently depending on the foreground/background state of the receiving app and the payload you send to the app.
For instance if you send the following payload: phonegap-plugin-push/
{
"notification": {
"title": "Test Notification",
"body": "This offer expires at 11:30 or whatever",
"notId": 10
}
}
When your app is in the foreground, any on('notification') handlers you have registered will be called. However, if your app is in the background, the notification will show up in the system tray. Clicking on the notification in the system tray will start the app but your on('notification') handler will not be called as messages that have notification payloads will not cause the plugins onMessageReceived method to be called.
If you send a payload with a mix of notification & data objects like this:
{
"notification": {
"title": "Test Notification",
"body": "This offer expires at 11:30 or whatever",
"notId": 10
},
"data" : {
"surveyID": "ewtawgreg-gragrag-rgarhthgbad"
}
}
When your app is in the foreground any on('notification') handlers you have registered will be called. If your app is in the background, the notification will show up in the system tray. Clicking on the notification in the system tray will start the app and your on('notification') handler will not be called as messages that have notification payloads will not cause the plugins onMessageReceived method to be called.
My recommended format for your push payload when using this plugin (while it differs from Google's docs) works 100% of the time:
{
"data" : {
"title": "Test Notification",
"body": "This offer expires at 11:30 or whatever",
"notId": 10,
"surveyID": "ewtawgreg-gragrag-rgarhthgbad"
}
}
When your app is in the foreground any on('notification') handlers you have registered will be called. If your app is in the background, then the notification will show up in the system tray. Clicking on the notification in the system tray will start the app, and your on('notification') handler will be called with the following data:
{
"message": "This offer expires at 11:30 or whatever",
"title": "Test Notification",
"additionalData": {
"surveyID": "ewtawgreg-gragrag-rgarhthgbad"
}
}
Link to the docs
关于cordova - phonegap-plugin-push on ("notification") 事件在应用程序处于后台时未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46176345/