ngCordova/Ionic Push-уведомления, когда приложение находится в фоновом режиме

В настоящее время я создаю приложение для Android, используя ionic/ngcordova. Я на стадии внедрения push-уведомлений. Я реализовал push-уведомления как службу, которая внедряется на этапе app.run(function(){..}). Часть регистрации работает, и я получаю обратный вызов, содержащий regid. Кроме того, когда приложение находится в активном состоянии, возникает событие и приходит уведомление.

Проблема у меня в том, что когда приложение уходит в фон, уведомления вообще не приходят. Я ожидал, что локальное уведомление будет вызвано, когда приложение не запущено или что-то подобное, но абсолютно ничего не происходит, что странно.

Последние пару дней я просматривал Интернет в поисках решения, но не смог найти ничего, что указывало бы мне на то, что оно должно просто работать.

Ниже приведено мое уведомлениеService.js внутри моего приложения.

app.factory('notificationService', ['$cordovaPush', function($cordovaPush){

  var dataFactory = {};

  //
  // When the device is ready and this service has been plumbed in...
  document.addEventListener("deviceready", function(){

      console.log("initializing push notifications...");

      _register();

  }, false);


  //
  // Registers the device for push notifications...
  var _register = function(){

      var config = {};

      if ( device.platform == 'android' || device.platform == 'Android' || device.platform == "amazon-fireos" ){

          // TODO: centralise this value as it can change...
          config = {
              senderID: "448168747432",
              ecb: "onNotificationGCM"
          };

      }else {
          // iOS
          config = {
              "badge":"true",
              "sound":"true",
              "alert":"true"
          };

          // Can add the following property to the config object to raise a callback with the information if need be...
          // "ecb": "onNotificationRegisterAPN"
      }

      $cordovaPush.register(config).then(function(result){

                    //
                    // Typically returns "ok" for android and devicetoken for iOS
          console.log(result);

      });
  };

    window.onNotificationGCM = function(result){

        console.log(result);

        /*
         I get called when the app is in the foreground, but nothing happens when the app is in the background.
        */

    };

  dataFactory.register = _register;

  return dataFactory;
}]);

Если это поможет, я использую PushSharp через приложение .net для доставки уведомлений. Любая помощь будет принята с благодарностью.

ОБНОВЛЕНИЕ: я использую следующие фреймворки/библиотеки:

  • Ионная структура 1.2.14-бета6
  • Кордова 4.2.0
  • PushPlugin

person Matthew Merryfull    schedule 12.02.2015    source источник


Ответы (1)


Для всех, кто рвал на себе волосы пару дней, как и я, решение было очень простым... В моем запросе Pushsharp QueueNotification мне не хватило двух свойств. Итак, используя пример, приведенный в репозитории PushSharp github здесь: https://github.com/Redth/PushSharp#sample-code

push.QueueNotification(new GcmNotification().ForDeviceRegistrationId("DEVICE-REGISTRATION-ID-HERE").WithJson("{\"alert\":\"Hello World!\",\"badge\":7,\"sound\":\"sound.caf\"}"));

Необходимо обновить, чтобы добавить недостающие свойства:

push.QueueNotification(new GcmNotification().ForDeviceRegistrationId("DEVICE REGISTRATION ID HERE")
                      .WithJson(@"{""alert"":""This is the future"",""badge"":7,""sound"":""sound.caf"",""title"":""Status Bar title"",""message"":""Some text you want to display to the user""}"));

В противном случае, если ваше приложение разработано с использованием Cordova и в настоящее время не находится на переднем плане, ничего, повторяю, ничего не произойдет.

Снимаю шляпу перед gdelavald с его комментарием о PushPlugin за то, что он указал мне правильное направление здесь:

https://github.com/phonegap-build/PushPlugin/issues/212

person Matthew Merryfull    schedule 12.02.2015