预期行为: 单击通知后触发事件。 实际行为:
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) => {
应该触发方法。提前谢谢。
答案 0 :(得分:0)
您可以检查通知有效内容上的.additionalData.foreground属性,并仅在值为false时触发应用内行为。当用户点击通知时,您的应用将被带到前台。此属性是关于在设备上收到通知时应用程序是否在前台。
如果您的应用在设备上收到通知时位于前台,则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,这意味着您可以依赖它来区分被点击的通知。
我不确定(还)如何区分案例(如何知道用户是否实际点击了通知)。