预期行为:单击通知后触发事件。实际行为:
pushObject.on('notification').subscribe((notification: any) => {在应用程序处于前台时,通知一到达就会被触发。客户端代码如下:
const options: PushOptions = {
ios: {
alert: 'true',
badge: true,
sound: 'false'
},
};
const pushObject: PushObject = this.push.init(options);
pushObject.on('notification').subscribe((notification: any) => console.log('Received a notification', notification));
pushObject.on('registration').subscribe((registration: any) => console.log('Device registered', registration));
pushObject.on('error').subscribe(error => console.error('Error with Push plugin', error));服务器端有效载荷示例:
{
"aps": {
"alert": "Testing.. (15)",
"badge": 1,
"sound": "default",
"content-available": 1
}
}对问题的解释:在收到通知后应用程序处于前台时的
pushObject.on('notification').subscribe((notification: any) => {该方法正在被调用。它不是等待用户点击notification.In我的应用程序,我将导航到特定的页面,这取决于通知中的有效负载数据。
现在,由于这个函数的立即触发,虽然用户处于某个页面的中间,但在收到通知后,他将立即被重定向到某个页面。
我希望用户单击通知,然后再单击通知。
pushObject.on('notification').subscribe((notification: any) => {方法应该被触发。提前谢谢。
发布于 2017-11-23 00:32:41
您可以检查通知有效负载上的.additionalData.foreground属性,并且只有当值为false时才触发app中的行为。当用户单击通知时,您的应用程序将被带到前台。此属性是关于在设备上收到通知时应用程序是否位于前台。
如果您的应用程序在设备上收到通知时位于前台,ui通知本身(在系统通知栏中)将被禁止(在大多数情况下--在应用程序处于前台时,您可以强制显示标识,但这是不同的主题)。
如果当应用程序收到通知时,此属性为false,则意味着当在设备上收到通知时,应用程序处于后台。当用户单击通知启动或激活应用程序时,情况就是如此,我认为这是“普通”情况。
上面没有涵盖所有的案例;更多关于具体行为的细节可以在这里找到,https://github.com/phonegap/phonegap-plugin-push/blob/master/docs/PAYLOAD.md#push-message-arrives-with-app-in-foreground
不幸的是,IOS 11中有一种情况不能很好地处理,那就是:如果你的应用程序在前台,但是当收到通知时,设备处于休眠状态/关闭状态。当你唤醒设备时,你的应用程序仍然处于前台。用户拉下通知列表并单击“旧”通知。在这种情况下,additionalData.foreground属性将为true。
在IOS 10和更早的时候,在最后一种情况下,这个前台属性被设置为false,这意味着您可以依赖它来区分单击或未单击的通知。
我还不确定如何区分这些情况(如何知道用户是否实际单击了通知)。
https://stackoverflow.com/questions/46314420
复制相似问题