代码之家  ›  专栏  ›  技术社区  ›  Kirankumar Dafda

后台phonegap android中未收到推送通知

  •  -1
  • Kirankumar Dafda  · 技术社区  · 10 年前

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

    my cordova version 5.4.1

    我已经安装了android版本5.0.0

    我已经安装了以下版本的插件

     device 1.1.1
     file 4.1.0
     media 2.1.0
     phonegap-plugin-push 1.5.3
    

    但我的应用程序仅在前景模式下运行良好,在应用程序关闭或后台模式下不会启动

    我的设备ReadyFunction如下

    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 回复  |  直到 10 年前
        1
  •  2
  •   Víctor    10 年前

    我认为问题是您使用的是该插件的不推荐版本。而不是

    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
    
                    });
    
                }
            }
        };