cordova - phonegap-plugin-push on ("notification") 事件在应用程序处于后台时未触发

标签 cordova push-notification ionic2 cordova-plugins phonegap-pushplugin

我在 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/

相关文章:

ios - 即使 iPhone 未连接到 Internet 也收到设备 token

node.js - 设置 "firebase javascript"与 "ionic serve"一起使用

cordova - Ionic 2 设备就绪未在 2000 毫秒内触发

java - postgresql - java - 当数据库中发生某些事情时唤醒应用程序

angular - Ionic 2 异常处理不起作用?

android - Cordova 构建安卓

ios5 - 如何将回调值传递给 JavaScript 形式的 iOS 原生代码?

ios - 将 deviceToken 从 Objective C 复制到 JavaScript

javascript - Cordova 游戏 - 试图让我的网站发布在线高分

ios - 从 Swift 3 中的锁屏清除本地通知