Android GCM (notificación push): el dispositivo no recibe notificaciones si la aplicación se detiene

Uso la notificación de inserción (GCM) en mi proyecto de Android.

De acuerdo con el tutorial de GCM, implementé el receptor de difusión y lo AndroidManifest.xml en AndroidManifest.xml .

Este tipo de receptores de difusión deberían recibir mensajes incluso si mi aplicación está cerrada (no solo si mi aplicación está en segundo plano, pero incluso si se detuvo forzadamente).

Pero no funciona como espero. onReceive() método onReceive() no se está llamando si la aplicación está cerrada. Parece que mi comprensión de los receptores de transmisió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 envía una notificación al dispositivo si la aplicación está cerrada. Entonces, ¿es correcto que mi aplicación pueda recibir un mensaje (y el método onReceive() se invocará en el receptor de difusión) solo si se está ejecutando o está en segundo plano (pero no cerrado)?

Gracias por adelantado.

Este tipo de receptores de difusión deberían recibir mensajes incluso si mi aplicación está cerrada (no solo si mi aplicación está en segundo plano, pero incluso si se detuvo forzadamente).

Si un usuario fuerza-detiene su 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 una actividad manualmente (a partir de Android 3.1). Por lo tanto, si el usuario fuerza-detiene su aplicación desde Configuración, no recibirá mensajes GCM en dispositivos / emuladores más nuevos.

Entonces, ¿es correcto que mi aplicación pueda recibir un mensaje (y el método onReceive () se invocará en el receptor de difusión) solo si se está ejecutando o está en segundo plano (pero no cerrado)?

No existe un concepto de “cerrado” en Android desde el punto de vista de la aplicación. Si, por “cerrado”, quiere decir “no tiene un proceso en ejecución, donde el último proceso finalizó normalmente”, entonces sí, debe recibir mensajes de GCM y otras transmisiones. Pero, de nuevo, forzar-parar no es “terminado normalmente”.

De acuerdo con Francesco Nerieri en este hilo de android-gcm :

Por lo tanto, si fuerza la detención de 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 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 Android a través de la transmisión intencionada cuando llegue el mensaje, siempre que la aplicación esté configurada con el receptor y los permisos adecuados.

Verifique la implementación y los permisos de su receptor de difusión.