Ember CLI + PhoneGapBuild Push-уведомления

Я пытаюсь настроить push-уведомления внутри инициализатора в проекте Ember CLI. Мой инициализатор включает в себя:

initialize: function(container, application) {
     var globals = container.lookup("route:application").get('globals');

     application.deferReadiness();
     document.addEventListener('deviceready', onDeviceReady, false);

     function onDeviceReady() {
           var startAppJob = setTimeout(function(){application.advanceReadiness();}, 10000),
           pushNotification = window.plugins.pushNotification;

           if ( device.platform == 'android' || device.platform == 'Android' ){
                 pushNotification.register(
                       successHandler,
                       errorHandler, 
                       {
                          "senderID":"xxx",
                          "ecb":"onNotificationGCM"
                       });
            }
    }

Все идет нормально. За исключением того, что теперь ecb ожидает, что функция onNotificationGCM будет находиться в глобальной области видимости. Итак, куда должно идти следующее?

   onNotificationGCM = function(e) {
        switch( e.event ){
          case 'registered':
            clearTimeout(startAppJob)
            application.advanceReadiness();

            if ( e.regid.length > 0 ){
                  globals.set('push_registration_id', e.regid)
                  globals.set('push_device_type', 'iandroidos')
                   console.log('registered')
            }
          break;

Объявление его с помощью window.onNotificationGCM или this.onNotificationGCM внутри инициализатора не работает:

Ошибка processMessage: ошибка: ReferenceError: onNotificationGCM не определен

Этот вопрос Cordova Pushplugin: ecb не вызывается предлагает изменить обратный вызов, который в их примере становится:

"ecb":"window.GambifyApp.NotificationHandler.onNotificationGCM"

За исключением Ember CLI, что это будет внутри инициализатора? Можно ли вообще получить доступ или есть лучший способ реализовать все это в Ember CLI?

Заранее благодарю за любую помощь!


person user1814277    schedule 27.03.2015    source источник
comment
window.onNotificationGCM определенно должно работать   -  person runspired    schedule 27.03.2015
comment
Я проверил, что мы сделали, и вот что: "ecb":"window.ecb"   -  person runspired    schedule 27.03.2015
comment
Итак, решение действительно состояло в том, чтобы использовать window.onNotifaction = function(), а также ecb:window.onNotifcation. Вам также необходимо поместить функцию window.onNotification снаружи функции onDeviceReady, но внутри initialize.   -  person user1814277    schedule 27.03.2015


Ответы (1)


В моей компании мы разработали набор прокладок/интерфейсов, чтобы упростить работу с плагинами Cordova в приложениях Ember.

https://github.com/Skalar/ember-cli-cordova-shims

Он скрывает всю обработку обратных вызовов, которую требует PushPlugin, и предоставляет события, генерируемые службой в вашем приложении.

import NotificationsService from 'ember-cli-cordova-shims/services/notifications';
export function initialize(container, application) {
  let service = NotificationsService.create({
    gcmSenderId: '{INSERT-KEY-FROM-GCM-HERE}',
    gcmTimeout: 10000 // Timeout for GCM in ms. Default: 15000
  });
  application.register('service:notifications', service, {
    instantiate: false
  });
  application.inject('route', 'notifications', 'service:notifications');
}
export default {
  name: 'notifications-service',
  initialize: initialize
};

// In your route
export default Ember.Route.extend({
  init: function(){
    this._super();
    this.notifications.on('alert', function(){...});
  },

  actions: {
    subscribeForNotifications: function(){
      this.notifications.register().then(function(){...});
    }
  }
});
person theodorton    schedule 05.06.2015