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

Hit*_*yay 2 push-notification cordova cordova-plugins phonegap-pushplugin ionic2

我在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));
            }
        });
}
Run Code Online (Sandbox Code Playgroud)

因此,在我的代码中,您可以看到this.pushObject.on('notification')事件.应用程序关闭时不会触发.

感谢您的时间和支持.

Man*_*egi 7

这不是客户端代码的问题.由于通知有效负载,此问题正在发生.

来自phonegap-plugin-push的官方文档

通知的行为会有所不同,具体取决于接收应用的前台/后台状态以及您发送到应用的有效负载.

例如,如果您发送以下有效负载:phonegap-plugin-push /

{
  "notification": {
    "title": "Test Notification",
    "body": "This offer expires at 11:30 or whatever",
    "notId": 10
  }
}
Run Code Online (Sandbox Code Playgroud)

当您的应用程序位于前台时,将调用您已注册的任何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"
    }
}
Run Code Online (Sandbox Code Playgroud)

当您的应用程序位于前台时,您已注册的任何('通知')处理程序将被调用.如果您的应用位于后台,则通知将显示在系统托盘中.单击系统托盘中的通知将启动应用程序,并且不会调用您的on('notification')处理程序,因为具有通知有效负载的消息不会导致调用插件onMessageReceived方法.

我推荐使用此插件时推送有效负载的格式(虽然它与Google的文档不同)在100%的时间内都有效:

{
    "data" : {
        "title": "Test Notification",
        "body": "This offer expires at 11:30 or whatever",
        "notId": 10,
        "surveyID": "ewtawgreg-gragrag-rgarhthgbad"
    }
}
Run Code Online (Sandbox Code Playgroud)

当您的应用程序位于前台时,您已注册的任何('通知')处理程序将被调用.如果您的应用位于后台,则通知将显示在系统托盘中.点击系统托盘通知将启动应用程序,和你的("通知"),处理程序具有以下数据称为:

{
    "message": "This offer expires at 11:30 or whatever",
    "title": "Test Notification",
    "additionalData": {
        "surveyID": "ewtawgreg-gragrag-rgarhthgbad"
    }
}
Run Code Online (Sandbox Code Playgroud)

链接到文档