¿Por qué los mensajes push de Android C2DM no siempre llegan?

He construido una aplicación C2DM en funcionamiento y generalmente funciona muy bien, y los mensajes push llegan rápidamente. Sin embargo, me parece bastante regular cuando inicio la aplicación o la vuelvo a enfocar, los mensajes no llegan.

Definitivamente se envían con éxito (obtengo una respuesta de 200) y el formato de mensaje es sin duda correcto (enviar el mismo mensaje funciona más tarde bien). El fallo puede durar un pequeño número de minutos, y de repente comienza a funcionar de nuevo, y funciona de manera coherente a partir de entonces.

Sin embargo, incluso después de que comience a trabajar, los mensajes más antiguos han desaparecido aparentemente y nunca llegan. Los mensajes definitivamente no llegan – Tengo un registro extensivo que pone de relieve cualquier mensaje C2DM que llegue.

Soy plenamente consciente de que C2DM nunca garantizará la entrega, por lo que espero que algunos mensajes fallarán, pero en mi experiencia, en algunas ocasiones, simplemente no funciona. Obviamente quiero entender si eso es algo que estoy haciendo mal en mi aplicación, o el servicio de C2DM en sí.

¿Qué puede causar que C2DM no pueda entregar mensajes? Si los mensajes no se pueden entregar, ¿por qué el servidor C2DM no está intentando de nuevo desde su cola? Relacionado: ¿debo obtener una nueva ID de registro sólo cuando la aplicación se inicia la primera vez o actualizarla cada vez que se inicia la aplicación? Actualmente hago esto último (en la Aplicación, no una Actividad).

Me di cuenta de que había cometido un error de colegial. Estaba registrando de nuevo con C2DM cada vez que la aplicación comenzó. Ese proceso a veces tarda unos segundos, y durante ese tiempo la aplicación no recibirá mensajes push enviados al ID de registro antiguo. Esto explica por qué es muy probable que los mensajes push no se reciban inmediatamente después de iniciar la aplicación.

La solución era garantizar que el ID de registro sólo se solicite si la aplicación aún no tiene uno. Los mensajes de empuje funcionan ahora de manera mucho más fiable.

Esto es probablemente el comportamiento correcto. Los mensajes no están garantizados para ser entregados en absoluto. Deja solo instantáneamente.

Lo que es más probable es que la conexión entre su teléfono y los servidores de Google se está cayendo y se necesita un poco de tiempo para volver a subir.

  • Java.lang.SecurityException: No se permite iniciar el servicio
  • Confusión de registro Android GCM
  • Se requiere la sencilla implementación de Android C2DM
  • Long-polling vs Apple Push Notification Service y Android C2DM
  • Enviar notificaciones push en android sin utilizar C2DM
  • Lados negativos de C2dM
  • ¿Ya está instalada la aplicación Android Market en todos los teléfonos Android
  • La Notificación de empuje de Android de GCM muestra siempre el mensaje antiguo. Intención recibida incorrecta
  • IntentReceiver filtrada en Google Cloud Messaging
  • Recepción de notificaciones de GCM de Android cuando la aplicación está en estado detenido
  • Agente MDM en iOS
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.