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){
}
}