作者:徐涛 | 来源:互联网 | 2023-01-18 19:18
我在Ionic2中使用以下插件进行推送通知
http://ionicframework.com/docs/native/push/
预期行为:
当应用程序关闭时,收到通知,当用户点击通知时,应用程序打开后应打开("通知")事件.
实际行为:
我成功收到通知.但是当应用程序处于后台或关闭时,当我收到通知并点击通知时,on("notification")事件未触发.
Cordova版本 7.0.1
Android版本 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('notification')事件.应用程序关闭时不会触发.
感谢您的时间和支持.
1> Manoj Negi..:
这不是客户端代码的问题.由于通知有效负载,此问题正在发生.
来自phonegap-plugin-push的官方文档
通知的行为会有所不同,具体取决于接收应用的前台/后台状态以及您发送到应用的有效负载.
例如,如果您发送以下有效负载:phonegap-plugin-push /
{
"notification": {
"title": "Test Notification",
"body": "This offer expires at 11:30 or whatever",
"notId": 10
}
}
当您的应用程序位于前台时,将调用您已注册的任何on('notification')处理程序.但是,如果您的应用程序位于后台,则通知将显示在系统托盘中.单击系统托盘中的通知将启动应用程序,但不会调用您的on('notification')处理程序,因为具有通知有效负载的消息不会导致调用插件onMessageReceived方法.
如果您发送带有混合通知和数据对象的有效负载,如下所示:
{
"notification": {
"title": "Test Notification",
"body": "This offer expires at 11:30 or whatever",
"notId": 10
},
"data" : {
"surveyID": "ewtawgreg-gragrag-rgarhthgbad"
}
}
当您的应用程序位于前台时,您已注册的任何('通知')处理程序将被调用.如果您的应用位于后台,则通知将显示在系统托盘中.单击系统托盘中的通知将启动应用程序,并且不会调用您的on('notification')处理程序,因为具有通知有效负载的消息不会导致调用插件onMessageReceived方法.
我推荐使用此插件时推送有效负载的格式(虽然它与Google的文档不同)在100%的时间内都有效:
{
"data" : {
"title": "Test Notification",
"body": "This offer expires at 11:30 or whatever",
"notId": 10,
"surveyID": "ewtawgreg-gragrag-rgarhthgbad"
}
}
当您的应用程序位于前台时,您已注册的任何('通知')处理程序将被调用.如果您的应用位于后台,则通知将显示在系统托盘中.点击系统托盘通知将启动应用程序,和你的("通知"),处理程序将具有以下数据称为:
{
"message": "This offer expires at 11:30 or whatever",
"title": "Test Notification",
"additionalData": {
"surveyID": "ewtawgreg-gragrag-rgarhthgbad"
}
}
链接到文档