Phonegap/PushPlugin не запускает уведомление, когда приложение находится на переднем плане (ошибка processMessage: Stack: ReferenceError)

Я успешно внедрил PushPlugin, и он запускает push-уведомления во всех состояниях, кроме случаев, когда приложение находится на переднем плане. Вот код, который я использую:

function onNotification(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>');
            console.log("RegID = " + e.regid);
        }
    break;

    case 'message':
        //if this flag is set, this notification happened while we were in the foreground.
        //you might want to play a sound to get the user's attention, throw up a dialog etc.
        if(e.foreground){
            $("#app-status-ul").append('<li>--INLINE NOTIFICATION--' + '</li>');
            //if the notification contains a soundname, play it.

            //navigator.notification.alert('--INLINE NOTIFICATION--');

            alert("You have a new alert!: " + e.payload.message);

            var my_media = new Media (../homebound.wav);
            my_media.play();
            } else {
            //otherwise we were launched because the user touched the notification in the notification tray.
            if (e.coldstart) 
                {
                    navigator.notification.alert('--COLDSTART NOTIFICATION--');
                }
                    else
                    {
                        navigator.notification.alert('--BACKGROUND NOTIFICATION--')
                    }
                }

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

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

            $status.append('<li>MESSAGE -> TIME: ' + e.payload.timeStamp + '</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;
    }

}

Я осмотрелся и ничего не нашел для этой проблемы, исправление кажется простым, но намекает на меня, потому что у меня нет опыта работы с этим плагином. Кто-нибудь сталкивался с этой проблемой и может сообщить мне, в чем проблема, заранее спасибо.

EDIT: я отлаживал приложение с помощью отладки USB и обнаружил, что приложение получает предупреждение, но ничего не запускает, я добавил предупреждение в "if(e.foreground ){alert("Вы получили новое уведомление: " + e.payload.message);" но он все еще не срабатывает, проблема явно связана с оператором if, но я не могу понять это.

EDIT 2: я обновил вопрос, чтобы ответить на комментарий, сделанный пользователем Hana Le, я получаю предупреждение об ошибке: "Ошибка процесса: Ошибка: ReferenceError: onNotification не определен"

Где это должно быть определено, чтобы заставить его работать, и почему приложение получает и запускает уведомление при работе в фоновом режиме и когда вообще не работает?


person geolaw    schedule 26.08.2014    source источник


Ответы (2)


Проблема не может быть решена внутри вашего Cordovawebview, потому что он простаивает. Вы должны включить некоторый собственный код, который запускает локальный push. Возможно, он уже включен в ваш плагин.

person malcubierre    schedule 27.08.2014
comment
есть ли какие-либо примеры этого, которые вы можете сослаться вообще? - person geolaw; 27.08.2014
comment
Используйте плагин Webintent, чтобы запустить веб-просмотр Cordova из нативного: build.phonegap.com/plugins/43 В вызове (намерении) вы можете передать параметр вашему веб-просмотру, чтобы webintent.js мог вызывать ваше уведомление js. - person malcubierre; 27.08.2014
comment
я читал о том, что это такое, но я не слишком уверен, как это помогает мне, учитывая, что push-уведомления происходят, когда приложение находится в фоновом режиме или неактивно. - person geolaw; 27.08.2014
comment
Плагин Webintent был создан для вызова бездействующих или неактивных действий (он перезагружает веб-просмотр) - person malcubierre; 27.08.2014
comment
вы были правы в том, что что-то было включено в плагин, он не вызывался правильно, с тех пор мне удалось найти ошибки и исправить их. Спасибо за ваши ответы - person geolaw; 29.08.2014

person    schedule
comment
это не решило проблему. Проблема, похоже, связана с флагом INLINE NOTIFICATION или if(e.foreground); потому что отладка отображает сообщение, а также происходят холодный запуск и фоновые уведомления. Только заметки на переднем плане ничего не делают. - person geolaw; 27.08.2014
comment
Вы сказали, что приложение получает оповещение, где срабатывает оповещение? я ничего не вижу. Убедитесь, что onNotificationGCM должен иметь область действия в окне - person Hanh Le; 27.08.2014
comment
Я закомментировал триггер оповещения navigator.notification.alert('--INLINE NOTIFICATION--'); это то, что вызывает предупреждение в двух других состояниях (холодный запуск и фон), но даже когда я использую это, ничего не происходит, когда приложение находится на переднем плане. - person geolaw; 27.08.2014
comment
Я не знаю, чем ты занимался. Вы должны тестировать код построчно, чтобы найти, где возникает проблема или не приходит сообщение. Это просто, и вы можете решить - person Hanh Le; 28.08.2014
comment
Я обновил вопрос после тестирования кода на устройстве Android и отладки через usb. - person geolaw; 29.08.2014
comment
Ошибка означает, что onNotification недоступен в объекте окна (window.onNotification не определен). Когда GCM отправляет сообщение на устройство, собственный код получает и отправляет сообщение в веб-просмотр. В веб-просмотре должна быть функция onNotification(), чтобы получать и делать что-либо - onNotification должен иметь область действия в объекте окна (window.onNotification = function(){...}) - person Hanh Le; 29.08.2014
comment
Это объяснение было идеальным, я внес небольшие изменения в свой код (не знаю точно, какая часть это исправила, но теперь он работает). Большое вам спасибо! - person geolaw; 29.08.2014