Android GCM enviado con éxito pero no recibido en algunos dispositivos

En el lado del servidor, estoy usando la biblioteca del servidor GCM 1.0.2 proporcionada por Google. En el lado del cliente, configuré GCM como se indica en la documentación oficial .

Mi problema es que todo funciona bien en la mayoría de los dispositivos, pero en algunos dispositivos, no se recibe el empuje.

if (case1) message = new Message.Builder() .timeToLive(0) .collapseKey("0") .delayWhileIdle(false) .addData("msg", msg).build(); else if (case2) message = new Message.Builder() .collapseKey("2") .addData("msg", msg).build(); else message = new Message.Builder().addData("msg", msg).build(); Result result = sender.sendNoRetry(message, regId); System.out.println("Message ID:"+result.getMessageId()); System.out.println("Failed:" + result.getErrorCodeName()); 

Por lo que puedo ver en las pruebas con el código anterior, no hay ningún error. La identificación del mensaje está presente, pero el nombre del código de error es nulo (que es un signo de inserción exitosa ).

He probado casi todos los ajustes. Probado con TTL, tecla de contracción, retraso mientras está inactivo activado y desactivado.

¿Cuáles son algunos casos que pueden causar bloquear (?) Empuje de GCM? ¿Y cómo puedo resolver esto?

EDITAR

No tengo idea de por qué, pero la solución temporal a continuación resolvió mi problema.

En GcmIntentService # onHandleIntent acaba de eliminar

 GcmBroadcastReceiver.completeWakefulIntent(intent); 

Esta línea libera el servicio de vigilia. Sin embargo, tengo curiosidad porque en otros dispositivos, los mensajes de inserción se envían continuamente incluso cuando esta línea no se eliminó.

Esto no es una solución porque este documento establece que debo llamar a completeWakeFulIntent después de cada trabajo. Además, mi método drenará la batería de manera significativa.

¿Cualquier sugerencia?

  1. Asegúrese de haber configurado correctamente su SENDER ID que recibió de Google.
  2. Asegúrese de que su dispositivo esté registrado con el servicio GCM de Google correctamente.
  3. Asegúrese de enviar la inserción a la ID de registro correcta que recibió de Google. y que no recibió un error del servicio Google GCM.
  4. ¿Has configurado el delay_while_idle = 1 ? Esto significa que el mensaje no llegará al dispositivo si está inactivo (apagado, fuera de línea, pantalla bloqueada, etc.). delay_while_idle = 0 a delay_while_idle = 0 si desea que su permiso de wakelock marque la diferencia. Por favor, lea más aquí .
  5. Algunas veces toma tiempo para que llegue el empujón (pero nunca demasiado, entonces hay un problema). Comprueba cuál es el “tiempo de vida” del empujón que has enviado.

¿Tienes la versión correcta de Playstore para recibir la notificación? ¿Has iniciado sesión con una cuenta funcional de Google en esos dispositivos?

También tuve un problema cuando “Forzo detener” una aplicación, no puede recibir notificaciones en ninguna aplicación después de una “parada forzada” (comience con Android 3.1) así que tenga cuidado con eso también.

si está utilizando wifi, puede ser el firewall de Internet bloquear el gcm. intente usar internet con su tarjeta SIM móvil.

Checklist

  • Asegúrate de que Google Play Store esté actualizada a la última versión
  • Asegúrese de que no haya ninguna configuración de sistema para las notificaciones que bloquean
  • Acceda a la aplicación en el Administrador de aplicaciones y desmarque / vuelva a verificar ‘Notificaciones’
  • Si está conectado a Wifi, cambie la conexión Wifi a un AP diferente (si es posible)
  • Reinicia el dispositivo
  • Instale ‘Fix Notification Fixer’ (instálelo de todos modos)

La configuración de notificación de primera ejecución puede ser molestamente arbitraria y requiere que el dispositivo sea ‘pateado’ en una o más de estas formas.