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.

  • Solicitud del ID de registro de Google Cloud Messaging (GCM) cada vez que se inicia la aplicación
  • ¿Qué puerto y protocolo utiliza Google Cloud Messaging (GCM)?
  • Android - No se puede iniciar el receptor com.parse.ParsePushBroadcastReceiver
  • Enviar notificación automáticamente desde Firebase
  • Gcm canonical id debe ser actualizado o no
  • Cómo almacenar únicamente un ID de registro de GCM en MySQL
  • ID del remitente del GCM / número del proyecto
  • Mensajería en la nube de Google: limitación de 100 remitentes múltiples
  • No se puede resolver el símbolo 'GoogleCloudMessaging' GCM
  • Cómo crear un diseño de notificaciones personalizadas en android?
  • Cómo manejar toque de notificación en Android si se muestra automáticamente por GCM
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.