Ionic Push Android push-уведомление, возвращающее неопределенное сообщение

Я уже некоторое время пытаюсь заставить push-уведомления Android работать для моего приложения (iOS уже завершена) и все уладить, кроме того, что уведомление действительно отображается на устройстве Android.

Регистрация идентификатора устройства и отправка на сервер GCM, похоже, работают нормально, но когда я проверяю, что возвращает сообщение в ответе от GCM, я продолжаю получать undefined.

Все ответы при отправке сообщения в GCM — это успех, правильный идентификатор устройства, связанный с ним идентификатор сообщения и т. д. Кто-нибудь может указать мне правильное направление? Ниже вы увидите фрагмент кода только с образцом «оповещения», используемого для отображения того, что возвращается, что в конечном итоге будет использоваться в качестве уведомления в «push».

Это оповещение

alert('message = ' + e.message + ' payload message: ' + e.payload.message +
       ' e payload msgcnt: ' + e.payload.msgcnt + ' e.msg: ' + e.msg);

похоже, ничего не возвращается, чтобы отобразить толчок.

function onDeviceReady() {
    console.log('deviceready');
    try {
        pushNotification = window.plugins.pushNotification;
        if (device.platform == 'android' || device.platform == 'Android' || device.platform == 'amazon-fireos') {
            console.log('PN register');
            pushNotification.register(successHandler, errorHandler, {
                "senderID": "177718756870",
                "ecb": "onNotification"
            });     // required!
            console.log('after PN register');

        } else {
            console.log('PN register');
            pushNotification.register(tokenHandler, errorHandler, {
                "badge": "true",
                "sound": "true",
                "alert": "true",
                "ecb": "onNotificationAPN"
            }); // required!
            console.log('after PN register');
        }
    }
    catch (err) {
        txt = "There was an error on this page.\n\n";
        txt += "Error description: " + err.message + "\n\n";
        console.log("ERROR", txt);

    }

}

var pushNotification;

// handle GCM notifications for Android
window.onNotification = function(e) {

    console.log('EVENT RECEIVED ' + e.event)
    console.log("regID BEFORE CHECKS = " + e.regid);

    switch( e.event )
    {

        case 'registered':
            if ( e.regid.length > 0)
            {
                console.log("regID = " + e.regid);

                var data =
                {
                    'device_id': e.regid,
                    'platform': device.platform,
                    'os_version': device.version,
                    'app_version': lawnmowerConfig.versionString,
                    'device_model': device.model
                };

                localStorage.setItem('push_data', JSON.stringify(data));
            }
            break;

       case 'message':
           console.log('Inside case message: ' + e.regid)

           if (e.foreground)
           {
               // Add something to play a sound once working
           }
           else
           {    
                if (e.coldstart) {
                    console.log("coldstart");

                }
                else {

                    console.log("not coldstart");

                }
           }

           alert('message = ' + e.message + ' payload message: ' + e.payload.message + ' e payload msgcnt: ' + e.payload.msgcnt + ' e.msg: ' + e.msg);

           break;

           case 'error':
                alert('GCM error = ' + e.msg);

           break;

           default:
                // Testing using these alerts instead
                alert('An unknown GCM event has occurred');

           break;
    }
};

function tokenHandler (result) {
    console.log('push token handler');
    console.log(result);
    var data =
    {
        'device_id': result,
        'platform': device.platform,
        'os_version': device.version,
        'app_version': lawnmowerConfig.versionString,
        'device_model': device.model
    };
    localStorage.setItem('push_data', JSON.stringify(data));
}

function successHandler (result) {

    console.log('success handler push success');
    console.log("result: " + result);
}

function errorHandler (error) {
    console.log('push error');
}

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

person parchambeau    schedule 26.05.2015    source источник
comment
Вы нашли какое-нибудь решение?   -  person Salman Ullah Khan    schedule 07.04.2016


Ответы (1)


Регистрация идентификатора устройства и отправка на сервер GCM, похоже, работают нормально, но когда я проверяю, что возвращает сообщение в ответе от GCM, я продолжаю получать undefined.

Это означает, что когда вы проверяете "что такое сообщение...", вы ссылаетесь на еще не определенную переменную. В этой строке:

alert('message = ' + e.message + ' payload message: ' + e.payload.message +
      ' e payload msgcnt: ' + e.payload.msgcnt + ' e.msg: ' + e.msg);

нет переменной e.message. Данные, которые вы отправляете с вашего сервера, присоединяются к e.payload, а значение e.event устанавливается равным message. Я думаю, что ваша проблема может быть решена, если вы удалите e.message. Что-то типа:

alert('event = ' + e.event + ' payload message: ' + e.payload.message +
      ' e payload msgcnt: ' + e.payload.msgcnt + ' e.msg: ' + e.msg);

Примечание. Чтобы обнаружить проблемы с переменными (область действия и/или объявление), выполняйте отладку одной переменной за раз. Это поможет вам точно определить проблему и проследить ее происхождение.

Я бы посоветовал вам использовать

alert("Payload message: " + e.payload.message);
person Ajoy    schedule 27.05.2015