2015-07-08 2 views
1

Я видел несколько похожих предметов, но никто не был в том же контексте (с угловым, не используя ионный). Я использую cordova 5.0.0 (cordova -version в cmd показывает 5.0.0, в модуле модуля модуля я вижу 3.6.4)Кордова + Угловая + PushPlugin - Обратный звонок не срабатывает

У меня есть приложение на основе углов, которое работает внутри приложения Cordova. Я пытаюсь добавить push-уведомление, используя PushPlugin.

Я могу (внутри основного модуля) вызвать метод push-плагина и в Android (в настоящее время только на устройстве, на котором я тестирую) вызывается обработчик «success». Экб хотя и никогда не вызывается независимо от того, где я помещаю функцию обратного вызова.

В моем app.js:

angular.module('myApp', [...]).config().run(['$rootScope',..., 
function($rootScope,...) { 
    // etc etc... 
    document.addEventListener("deviceready", function(){ 
     var pushNotification = window.plugins.pushNotification; 
     pushnotification.register(
      successHandler, 
      errorHandler, 
      { 
       "senderID":"<sender_id>", 
       "ecb":"window.onNotification" 
      }); 
    }); 

    // this is invoked 
    function successHandler (result) { 
     alert('result = ' + result); 
    }; 

    function errorHandler (error) { 
     alert('error = ' + error); 
    }; 

    // option 1: 
    function onNotification(e) {...}; 

    // option 2: 
    var onNotification = function(e) {...}; 

    // option 3 
    // (tried below and above the call to register 
    // though I believe it doesn't matter): 
    window.onNotification = function(e) {...}; 
}]); 

// option 4: 
var onNotification = function(e) {...}; 

До сих пор ни один из них не работает. Я предполагаю, что я делаю что-то не так, но я не уверен, что.

Это что-то с объемом? Может ли это быть чем-то еще? Какие? Как диагностировать?

EDIT: Я проверил LogCat и некоторые вещи не имеет смысла:

I/chromium  (3981): [INFO:CONSOLE(217)] "registering with GCM", source: file:///android_asset/www/js/app.js (217) 
V/PushPlugin  (3981): execute: action=register 
V/PushPlugin  (3981): execute: data=[{"senderID":"SENDER_ID","ecb":"window.onNotification"}] 
V/PushPlugin  (3981): execute: jo={"senderID":"SENDER_ID","ecb":"window.onNotification"} 
V/PushPlugin  (3981): execute: ECB=window.onNotification senderID=SENDER_ID 
D/GCMRegistrar (3981): resetting backoff for com.my.app 
V/GCMRegistrar (3981): Registering app com.my.app of senders SENDER_ID 
W/ActivityManager(1254): Unable to start service Intent {act=com.google.android.c2dm.intent.REGISTER pkg=com.google.android.gsf (has extras) } U=0: not found 

версия плагина я вижу (Cordova список плагинов) является 2.4.0. Почему цель - c2dm? Не следует ли использовать новый GCM?

+1

Я, кажется, проблема с объемом. См. Этот [пример] (http://stackoverflow.com/a/30634495/1761793). Экб должен быть доступен в глобальном масштабе, когда плагин пробуждает ваше приложение. Прикрепите свою функцию к глобальному «окну» и назовите ее как «window.onNotification». – Ajoy

+1

Также см. Это (лучше) [ответ] (http://stackoverflow.com/a/25427145/1761793). – Ajoy

+0

Я сделал, как было предложено, добавив 'onNotification' как свойство в' window' и используя полное имя '' window.onNotification "' как значение для ecb. Я все еще не получаю обратный вызов ... может быть, я вообще не получаю ответа? как я могу это проверить? –

ответ

1

Как оказалось, это была проблема с эмулятором.

Все приведенные выше комментарии верны в отношении области действия обратного вызова события уведомления (ecb), тем не менее, что привело меня к тому, что работа с кодом в emulattor была распечатана logcat. Предупреждение о невозможности запустить намерение службы регистрации, так как оно отсутствует (см. Последнюю строку отрывка журнала в вопросе), было актуальной проблемой.

Googling для этого предупреждения, я нашел это обсуждение: not notification on Android with GCM - ответ от 2015-07-01 от hmedney предлагает использовать в эмуляторе другую цель устройства. После изменения эмулятора для использования «API Google (системный образ x86) (Google Inc.) - API уровня 19» вызывается функция onNotification, и я вижу в своем журнале идентификатор регистрации.