GCM de Android enviado correctamente pero no recibido en algunos dispositivos

En el lado del servidor, estoy utilizando la biblioteca del servidor GCM 1.0.2 proporcionada por Google. Por 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 pocos dispositivos, el empuje no se recibe.

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 de las pruebas con el código anterior, no hay error. El ID del mensaje está presente, pero el nombre del código de error es nulo (que es un signo de empuje exitoso ).

He probado casi todos los escenarios. Probado con TTL, tecla de colapso, retardo mientras encendido y apagado.

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

EDITAR

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

En GcmIntentService # onHandleIntent acaba de eliminar

 GcmBroadcastReceiver.completeWakefulIntent(intent); 

Esta línea libera el servicio de vigilia. Tengo curiosidad, ya que en otros dispositivos, los mensajes push se envían continuamente incluso cuando no se ha eliminado esta línea.

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

¿Cualquier sugerencia?

  1. Asegúrate de haber configurado correctamente tu SENDER ID que recibiste de Google.
  2. Asegúrate de que tu dispositivo se haya registrado correctamente en el servicio GCM de Google.
  3. Asegúrate de enviar el empuje al ID de registro correcto que hayas recibido de Google. Y que no recibió un error del servicio GCM de Google.
  4. ¿Ha establecido delay_while_idle = 1 ? Esto significa que el mensaje no llegará al dispositivo si está inactivo (apagado, sin conexión, pantalla bloqueada, etc.). Cambie a delay_while_idle = 0 si desea que su permiso wakelock haga alguna diferencia. Por favor, lea más aquí .
  5. Algunas veces se necesita tiempo para que el empuje llegue (pero nunca demasiado tiempo, entonces hay un problema). Comprueba cuál es el "tiempo de vida" del empuje que has enviado.

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

También tuve un problema cuando "detener la Fuerza" de una aplicación, no puedes recibir notificaciones en ninguna aplicación después de una "parada de la fuerza" (empieza con android 3.1) así que ten cuidado con eso también.

Si usted está utilizando wifi, puede ser el bloqueo de firewall de Internet el gcm. Intenta utilizar Internet con tu tarjeta SIM móvil.

Lista de verificación

  • Asegúrate de que Google Play Store se actualiza a la última versión
  • Asegúrese de que no hay ninguna configuración de todo el sistema para las notificaciones que están bloqueando
  • Vaya a la aplicación en el Administrador de aplicaciones y desmarque / vuelva a consultar "Notificaciones"
  • Si en Wifi, cambiar la conexión Wifi a un AP diferente (si es posible)
  • Reiniciar el dispositivo
  • Instale 'Push Notification Fixer' (Instale este Fixer)

La configuración de la notificación de primera ejecución puede ser molestamente arbitraria y requiere que el dispositivo sea "pateado" de una o más de estas maneras.

  • Java.lang.NoClassDefFoundError: Resolución fallida de: Lcom / google / android / gms / common / GooglePlayServicesUtil
  • El ID de registro se convierte en "NotRegistered" sin ninguna razón
  • Instancia de Google GCMIntentService
  • ¿Por qué la aplicación de mensajería recibe mensajes cuando se detiene la aplicación?
  • ¿Por qué un permiso de GCM no se concede en Android 6?
  • Mostrar notificación de inserción en el cuadro de alerta cuando la aplicación se está ejecutando en primer plano
  • Cómo mantener la escucha de notificaciones push en Android en segundo plano
  • ¿Han caducado los ID de registro de GCM?
  • Android-GCM: ¿Cómo cuidar a un usuario desconectado?
  • ¿Por qué se utiliza restricted_package_name?
  • Habilitar GCM para una aplicación durante la subida a Google Play Store
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.