我的Android应用在后台没有接收到推送通知,但根据文档,它应该可以接收到。
Android设备上的Android应用程序不需要运行即可接收消息。只要应用程序设置了正确的广播接收器和权限,当消息到达时,系统会通过Intent广播唤醒Android应用程序。
尝试不同的通知后发现,仅当通知包含"message"属性时,它才会在关闭时接收到推送通知。 (推送通知只是JSON对象)。
我的通知包含各种属性,包括“alert”,“id”和“title”,但只有“message”会使Android唤醒应用程序。
不起作用的示例通知:
{ event: 'message',
from: '947957531940',
collapse_key: 'do_not_collapse',
foreground: true,
payload:
{ alert: 'Mensaje de Prueba',
title: 'Titulo Mensaje de Prueba' } }
示例通知,可用:
{ 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.' } }
这是Android的标准设计还是我的应用程序有问题?
我的应用程序使用Ionic和Cordova开发。
附注:请原谅我的英语。
编辑:
这是app.js中.run模块内的Android推送代码,如ng-cordova的说明所指定的:
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){
}
}