1

Я считаю, что эта проблема выглядит этот вопрос:Ионные Framework PushPlugin: onNotificationGMC не уволен и не может получить RegID

Cordova Push Plugin: onNotificationGMC is not fired and cannot obtain regID

Но я использую Ионные Framework. Я это руководство в создании PushProcessingService:

http://intown.biz/2014/04/11/android-notifications/

//factory for processing push notifications. 
angular.module('starter.pusher', []) 
     .factory('PushProcessingService', function(MyService) { 
      function onDeviceReady() { 
       console.info('NOTIFY Device is ready. Registering with GCM server'); 
       alert('NOTIFY Device is ready. Registering with GCM server'); 
       //register with google GCM server 
       var pushNotification = window.plugins.pushNotification; 
       pushNotification.register(gcmSuccessHandler, gcmErrorHandler, {'senderID': 'myappid', 'ecb': 'onNotificationGCM'}); 
      } 
      function gcmSuccessHandler(result) { 
       console.info('NOTIFY pushNotification.register succeeded. Result = ' + result); 
       alert('NOTIFY pushNotification.register succeeded. Result = ' + result) 
      } 
      function gcmErrorHandler(error) { 
       console.error('NOTIFY ' + error); 
      } 
      return { 
       initialize: function() { 
        console.info('NOTIFY initializing'); 
        document.addEventListener('deviceready', onDeviceReady, false); 
       }, 
       registerID: function(regid) { 
        //Insert code here to store the user's ID on your notification server. 
        //You'll probably have a web service (wrapped in an Angular service of course) set up for this. 
        //For example: 
        MyService.registerNotificationID(regid).then(function(response) { 
         if (response.data.Result) { 
          console.info('NOTIFY Registration succeeded'); 
         } else { 
          console.error('NOTIFY Registration failed'); 
         } 
        }); 
       }, 
       //unregister can be called from a settings area. 
       unregister: function() { 
        console.info('unregister') 
        var push = window.plugins.pushNotification; 
        if (push) { 
         push.unregister(function() { 
          console.info('unregister success') 
         }); 
        } 
       } 
      } 
     }); 


// ALL GCM notifications come through here. 
function onNotificationGCM(e) { 
    console.log('EVENT -> RECEIVED:' + e.event + ''); 
    alert('EVENT -> RECEIVED:' + e.event + ''); 
    switch (e.event) 
    { 
     case 'registered': 
      if (e.regid.length > 0) 
      { 
       console.log('REGISTERED with GCM Server -> REGID:' + e.regid + ''); 
       alert(e.regid); 
       //call back to web service in Angular. 
       //This works for me because in my code I have a factory called 
       //  PushProcessingService with method registerID 
       var elem = angular.element(document.querySelector('[ng-app]')); 
       var injector = elem.injector(); 
       var myService = injector.get('PushProcessingService'); 
       myService.registerID(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) 
      { 
       //we're using the app when a message is received. 
       console.log('--INLINE NOTIFICATION--' + ''); 

       // if the notification contains a soundname, play it. 
       //var my_media = new Media('/android_asset/www/'+e.soundname); 
       //my_media.play(); 
       alert(e.payload.message); 
      } 
      else 
      { 
       // otherwise we were launched because the user touched a notification in the notification tray. 
       if (e.coldstart) 
        console.log('--COLDSTART NOTIFICATION--' + ''); 
       else 
        console.log('--BACKGROUND NOTIFICATION--' + ''); 

       // direct user here: 
       window.location = '#/tab/dash'; 
      } 

      console.log('MESSAGE -> MSG: ' + e.payload.message + ''); 
      console.log('MESSAGE: ' + JSON.stringify(e.payload)); 
      break; 

     case 'error': 
      console.log('ERROR -> MSG:' + e.msg + ''); 
      alert('ERROR -> MSG:' + e.msg + ''); 
      break; 

     default: 
      console.log('EVENT -> Unknown, an event was received and we do not know what it is'); 
      alert('EVENT -> Unknown, an event was received and we do not know what it is'); 
      break; 
    } 
} 

Но (е) обратный вызов onNotificationGCM, кажется, не работает. Я переместил его на завод, но проблема не устранена. Я вызываю эту функцию в своих приложениях. 0:

app.run(function($ionicPlatform, PushProcessingService) { 
      try { 
       PushProcessingService.initialize(); 
      } catch (err) { 
       alert(err); 
      } 
      $ionicPlatform.ready(function() { 
       // Hide the accessory bar by default (remove this to show the accessory bar above the keyboard 
       // for form inputs) 
       if (window.cordova && window.cordova.plugins.Keyboard) { 
        cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true); 
       } 
       if (window.StatusBar) { 
        // org.apache.cordova.statusbar required 
        StatusBar.styleDefault(); 
       } 
      }); 
     }) 

Пожалуйста, помогите мне в решении этого вопроса. Потому что я застрял несколько дней. Спасибо!! :)

ответ

0

я, наконец, попытаться использовать ngCordova Push Notification плагин, как описано здесь:

http://ngcordova.com/docs/plugins/pushNotifications/

Все работает хорошо.

Чтобы отметить: Плагин не будет работать в браузере, ни эмулятор. Он работает только в реальном устройстве, в моем случае, Android-устройство.

Я надеюсь, что это поможет людям, которые сталкиваются с той же проблемой, что и я.

+0

Push-уведомление никогда не работает с симулятором, оно будет работать с устройством только как с ios, так и с андроидом .. но можно получить уведомление в симуляторе Android, для этого нужно включить: см. Https://www.google.co.in /url?sa=t&rct=j&q=&esrc=s&source=web&cd=4&cad=rja&uact=8&ved=0CDIQtwIwAw&url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DePR1GZeATeE&ei=PM_dVMHBNoOpuQSBsICwBw&usg=AFQjCNE8IENVtBTnuiLsybRVGJExpfYx_Q&sig2=CqZ5S3D3RHbtL8uTJs4nUQ&bvm=bv.85970519 , d.c2E – Amar1989

+0

Я проверил вашу ссылку. Спасибо .. :) – asubanovsky

+0

У вас есть пример –

2

есть функция готовности устройства к вызову? добавляете ли вы слушателя устройства?

сделать так:

document.addListener("deviceready" function(){ 
     var pushNotification = window.plugins.pushNotification; 
      pushNotification.register(gcmSuccessHandler, gcmErrorHandler, {'senderID': 'myappid', 'ecb': 'onNotificationGCM'}); 
     } 
     function gcmSuccessHandler(result) { 
      console.info('NOTIFY pushNotification.register succeeded. Result = ' + result); 
      alert('NOTIFY pushNotification.register succeeded. Result = ' + result) 
     } 
     function gcmErrorHandler(error) { 
      console.error('NOTIFY ' + error); 
     } 
}); 
+0

Спасибо за ответ. Я вызываю его внутри функции initialize(): document.addEventListener ('deviceready', onDeviceReady, false); FYI, я пробовал с реальным устройством Android, но все равно не работаю. Раньше я пробовал этот плагин с jQuery, все в порядке. – asubanovsky

 Смежные вопросы

  • Нет связанных вопросов^_^