预期行为:单击通知后触发事件。实际行为:
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) => {
该方法被调用。它不在等待用户单击通知。在我的应用中,我将根据通知中的有效负载数据导航到某个页面。
现在由于该功能的立即触发,尽管用户处于某个页面的中间,但他将在收到通知后立即将其重定向到某个页面。
我希望用户单击通知,只有之后
pushObject.on('notification').subscribe((notification: any) => {
应触发方法。预先感谢。
您可以在通知有效负载上检查.additionaldata.foreground属性,并且如果值为false,则只能触发应用内行为。当用户单击通知时,您的应用将被带到前景。此属性是关于在设备上收到通知时是否在该应用程序中的应用。
如果在设备上接收到通知时,您的应用程序位于前景(在大多数情况下,您都可以迫使您强制显示Notfication时的显示,
UI通知本身(在系统通知托盘中)将被抑制您的应用程序位于前景,但这是一个不同的话题)。
如果您的应用收到通知时,此属性是错误的,则意味着您的应用在设备上收到通知时在后台。当用户单击通知启动或激活您的应用程序时,我认为是"普通"案例。
。以上不涵盖所有情况;有关确切行为的更多详细信息,请访问https://github.com/phonegap/phonegap-plugin-push/blob/blob/master/master/docs/payload.md#push-message-message-arrives-arrives-arrives-with-app-in-foreground/p>
不幸的是,有一种情况在iOS 11中无法很好地处理,即:如果您的应用在前景中,但是当收到通知时,设备就会入睡/OFF。唤醒设备时,您的应用仍在前景。用户拉下通知列表,然后单击"旧"通知。在这种情况下,额外的data.foreground属性将是正确的。
在iOS 10和更早之前,该前景属性在最后一个情况下设置为False,这意味着您可以依靠它来区分是否单击的通知。
我不确定如何区分案例(如何知道用户是否真的单击通知)。