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 .

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.

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.

  • Dos servicios de notificación de empuje en android
  • Cómo obtener RegistrationID usando GCM en android
  • Google cloud messaging sample
  • El emulador de Android no recibe notificaciones push
  • ¿Cómo implementar funcionalidades como Facebook "New Story" característica?
  • Cómo puedo saber los dispositivos registrados en mi nube de aplicaciones de GCM (Lista de dispositivos)
  • El servicio de Intención de GCM OnRegistered no se recibe
  • ¿Cómo se juega un tono de timbre que es sólo para Push Notification Arrivals de mi aplicación?
  • ¿Permiso de notificaciones push (GCM) en tiempo de ejecución?
  • Notificación de emisión de GCM Cordova no funciona cuando no se ejecuta la aplicación
  • Enviar notificación push GCM por java
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.