La aplicación Ionic / Cordova no recibe notificaciones push en segundo plano

Mi aplicación de Android no recibe notificaciones push en segundo plano y debería de acuerdo con eldocumentación.

Una aplicación de Android en un dispositivo Android no necesita estar ejecutándose para recibir mensajes. El sistema activará la aplicación de Android a través de la transmisión de intención cuando llegue el mensaje, siempre que la aplicación esté configurada con el receptor de transmisión y los permisos adecuados.

Al probar diferentes notificaciones, descubrió que sí recibe las notificaciones push mientras está cerrado si y solo si las notificaciones contienen el atributo"mensaje", si no, simplemente lo descarta. (Las notificaciones push son solo objetos JSON).

Mis notificaciones contienen todo tipo de atributos, incluidos "alerta", "id" y "título", pero solo "mensaje" hace que Android active la aplicación.

Ejemplo de notificación de queno funciona:

{ event: 'message',
  from: '947957531940',
  collapse_key: 'do_not_collapse',
  foreground: true,
  payload: 
   { alert: 'Mensaje de Prueba',
     title: 'Titulo Mensaje de Prueba' } }

Ejemplo de notificación de quetrabajos:

{ event: 'message',
  from: '947957531940',
  message: 'Contenido del mensaje de prueba.',
  collapse_key: 'do_not_collapse',
  foreground: true,
  payload: 
   { alert: 'Mensaje de Prueba',
     title: 'Titulo Mensaje de Prueba',
     message: 'Contenido del mensaje de prueba.' } }

¿Es un estándar de Android por diseño o estoy haciendo algo mal en mi aplicación?

Mi aplicación fue desarrollada usando Ionic con Cordova.

PD: Disculpe mi inglés.

EDITAR:

Este es el código push de Android dentro del módulo .run en app.js, comong-cordova las instrucciones especifican:

if (ionic.Platform.isAndroid()){

  var androidConfig = {
    "senderID": "94*************",
    "ecb": "window.casosPush"
  };

  try{
    var pushNotification = window.plugins.pushNotification;
  } catch (ex){

  }

  // Llamada en caso de exito
  var successfn = function(result){
    //alert("Success: " + result);
  };

  // Llamada en caso de error
  var errorfn   = function(result){
    window.alert("Error: " + result);
  };

  // Llamada de casos de notificacion push
  window.casosPush = function(notification){
    switch (notification.event){
      case 'registered':
        if (notification.regid.length > 0){
          $rootScope.data.token = notification.regid;
          //alert('registration ID = ' + notification.regid);
        }
      break;

      case 'message':

        $rootScope.mensajes.unshift(notification.payload);
        $localstorage.setArray('mensajes', $rootScope.mensajes);
        alert(JSON.stringify(notification));
      break;

      case 'error':
        alert('GCM error = ' + notification.msg);
      break;

      default:
        alert('An unknown GCM event has occurred');
      break;
    }
  };
  try{

    // Llamada de registro con la plataforma GCM 
    pushNotification.register(successfn,errorfn,androidConfig);
  } catch(notification){

  }
}

Respuestas a la pregunta(2)

Su respuesta a la pregunta