在后台phonegap android中没有收到推送通知

时间:2016-02-09 07:34:01

标签: android cordova push-notification

我正在使用此插件中的数据进行推送通知 cordova plugin add com.phonegap.plugins.pushplugin

my cordova version 5.4.1

我已安装5.0版的Android版

我在

版本下安装了以下插件
 device 1.1.1
 file 4.1.0
 media 2.1.0
 phonegap-plugin-push 1.5.3

但我的应用程序仅在Foreground中正常工作,在应用程序关闭或后台模式时不会被触发

我的deviceReadyFunction如下

var pushNotification;

document.addEventListener('deviceready', onDeviceReady, true);

function onDeviceReady() 
{
pushNotification = window.plugins.pushNotification;
if (device.platform == 'android' || device.platform == 'Android') {
    $("#app-status-ul").append('<li>registering android</li>');
    pushNotification.register(successHandler, errorHandler, {"senderID":"114019398228","ecb":"onNotificationGCM"});     // required!
} else {
    $("#app-status-ul").append('<li>registering iOS</li>');
    pushNotification.register(tokenHandler, errorHandler, {"badge":"true","sound":"true","alert":"true","ecb":"onNotificationAPN"});    // required!
}
}

function onNotificationGCM(e) 
{
$("#app-status-ul").append('<li>EVENT -> RECEIVED:' + e.event + '</li>');
switch (e.event) {
    case 'registered':
        if (e.regid.length > 0) 
        {
            $("#app-status-ul").append('<li>REGISTERED -> REGID:' + e.regid + "</li>");
        }
    break;

    case 'message':

    $("#app-status-ul").append('<li> Fore Ground ::' + JSON.stringify(e.foreground) + "</li>");
    if (e.foreground)
    {
        $("#app-status-ul").append('<li>--INLINE NOTIFICATION--' + '</li>');
        // if the notification contains a soundname, play it.
        var my_media = new Media("beep.wav");
        my_media.play();

    }
    else
    {   
        // otherwise we were launched because the user touched a notification in the notification tray.
        if (e.coldstart)
            $("#app-status-ul").append('<li>--COLDSTART NOTIFICATION--' + '</li>');
        else
            $("#app-status-ul").append('<li>--BACKGROUND NOTIFICATION--' + '</li>');
    }

    $("#app-status-ul").append('<li>MESSAGE -> MSG: ' + e.payload.Notice + '</li>');

    break;

    case 'error':
        $("#app-status-ul").append('<li>ERROR -> MSG:' + e.msg + '</li>');
    break;

    default:
        $("#app-status-ul").append('<li>EVENT -> Unknown, an event was received and we do not know what it is</li>');
    break;
}
}

1 个答案:

答案 0 :(得分:2)

我认为问题在于您使用的是已弃用的插件版本。而不是

cordova plugin add com.phonegap.plugins.pushplugin

使用

cordova plugin add phonegap-plugin-push

并将您的代码基于此文档:

https://github.com/phonegap/phonegap-plugin-push

我给你留下了一些有用的代码:

        var PushNotificationManager = {

        GOOGLE_SENDER_ID: Config.notifications.SENDER_ID,

        push: null,

        registerDeviceAndroid: function () {

            var that = this,
                deferredValue = $.Deferred();

            that.push = PushNotification.init({ 
                    "android": {
                        "senderID": that.GOOGLE_SENDER_ID,
                        "iconColor": "gray",
                        "icon": "icon_notification",
                        "forceShow": true
                    },
                    "ios": {}, 
                    "windows": {} 
            });

            that.push.on('registration',

                function (deviceToken) {

                    log("[PushNotificationManager] Token: " + deviceToken.registrationId, Config.notifications.message.info);

                    that.manageNotifications();

                    deferredValue.resolve(deviceToken.registrationId);

                },
                function () {
                    deferredValue.reject('[PushNotificationManager] Error al registrar el notificador.');
                }, {
                    senderID: this.GOOGLE_SENDER_ID,
                    ecb: 'window.onAndroidNotification'
            });

            setTimeout(function () {

                if (deferredValue.state() === 'pending') {
                    deferredValue.reject('[PushNotificationManager] No se obtuvo respuesta del servidor.');
                }
            }, 10000);

            return deferredValue.promise();
        },

        registerDeviceIOS: function () {

            var that = this,
                deferredValue = $.Deferred();

            that.push = PushNotification.init({ 
                    "android": {},
                    "ios": {
                        "alert": "true",
                        "badge": "true",
                        "clearBadge": "true",
                        "sound": "true"},
                    "windows": {} 
            });

            that.push.on('registration', function (deviceToken) {

                log("[PushNotificationManager] Token: " + deviceToken.registrationId, Config.notifications.message.info);

                that.manageNotifications();

                deferredValue.resolve(deviceToken.registrationId);

            }, function (e) {

                        deferredValue.reject('[PushNotificationManager] Error al registrar el notificador.');
                        log(e, Config.notifications.message.error);
            }, {
                        'badge': 'false',
                        'sound': 'true',
                        'alert': 'true',
                        'ecb': 'window.onIosNotification'
            });

            return deferredValue.promise();
        },

        manageNotifications: function () {

            var that = this;

            if ( !_.isNull(that.push) && !_.isUndefined(that.push) ) {

                that.push.on('notification', function (data) {
                    /*window.localStorage["cold"] = "true";
                    window.localStorage["data"] = JSON.stringify(data);*/
                    console.log(data);
                    if (data.additionalData.foreground != true){


                        if(data.additionalData.coldstart == true ) {



                        } else {


                        }
                    }

                    that.push.finish();

                    // To make visible item selection

                });

            }
        }
    };