GCM de Android (notificación push): el dispositivo no recibe notificación si se detiene la aplicación
Utilizo la notificación push (GCM) en mi proyecto de Android.
Según el tutorial de GCM, implementé el receptor de difusión y lo AndroidManifest.xml
en AndroidManifest.xml
.
- Navegar hasta la actividad de los padres desde la notificación
- ¿Cómo podemos obtener un dispositivo de token para Android para notificación push?
- Cómo solucionar el error de registro de Google Cloud Messaging: SERVICE_NOT_AVAILABLE?
- GCM no funciona en Android 4.2.2?
- Cómo saber si mi aplicación está abierta cuando administré una notificación push
Este tipo de receptores de difusión debe recibir mensajes incluso si mi aplicación está cerrada (no sólo si mi aplicación está en segundo plano, pero incluso si se detuvo la fuerza).
Pero no funciona como espero. onReceive()
método onReceive()
no se llama si la aplicación se cierra. Parece que mi comprensión de receptores de radiodifusión es correcta y el problema está en mis expectativas sobre GCM.
Una de las posibles razones es que el servidor de google ni siquiera enviar una notificación al dispositivo si la aplicación se cierra. Por lo tanto, ¿es correcto que mi aplicación pueda recibir un mensaje (y el método onReceive()
se invocará en el receptor de difusión) sólo si se está ejecutando o en segundo plano (pero no está cerrado)?
Gracias por adelantado.
- Lados negativos de C2dM
- Cómo utilizar con eficacia XMPP persistente con android
- GCM - Rara vez recibiendo mensajes temáticos
- GCM da un mensaje nulo
- PushPlugin registro va a errorhandler mostrando 'Clase no encontrada' con cordova 4.0.0 para plataforma android
- ID de registro canónico y formato ID de mensaje
- El servicio de Intención de GCM OnRegistered no se recibe
- Implementación de GCM con PHP siempre enfrentando error no autorizado 401
Este tipo de receptores de difusión debe recibir mensajes incluso si mi aplicación está cerrada (no sólo si mi aplicación está en segundo plano, pero incluso si se detuvo la fuerza).
Si una fuerza de usuario detiene la aplicación desde Configuración, su código nunca volverá a ejecutarse , hasta que algo ejecute manualmente uno de sus componentes, normalmente el usuario inicia manualmente una actividad (a partir de Android 3.1). Por lo tanto, si el usuario obliga a detener la aplicación desde Configuración, no recibirá mensajes GCM en dispositivos / emuladores más nuevos.
Por lo tanto, ¿es correcto que mi aplicación pueda recibir un mensaje (y el método onReceive () se invocará en el receptor de difusión) sólo si se está ejecutando o en segundo plano (pero no está cerrado)?
No hay concepto de "cerrado" en Android desde el punto de vista de la aplicación. Si, por "cerrado", quiere decir "no tiene ningún proceso en ejecución, donde el último proceso se terminó normalmente", entonces sí, debería recibir mensajes GCM y otras transmisiones. Pero, de nuevo, la parada de fuerza no es "terminada normalmente".
Según Francesco Nerieri en este hilo de android-gcm :
Por lo tanto, si obliga a detener la aplicación, el comportamiento previsto para ICS es que la aplicación no reciba el mensaje. En JB esto significa que GCM también cancelará el registro de la aplicación, este es un comportamiento desafortunado y estamos trabajando para cambiar esto (la parte de cancelar el registro en JB).
En la documentación se dice que:
No es necesario que se ejecute una aplicación de Android en un dispositivo Android para recibir mensajes. El sistema activará la aplicación de Android mediante la difusión de intención cuando llegue el mensaje, siempre y cuando la aplicación esté configurada con el receptor de difusión adecuado y los permisos.
Compruebe la implementación y los permisos de su receptor de difusión.