GCM: cómo evitar el estrangulamiento
Mi sistema androide necesita enviar actualizaciones frecuentes a una aplicación para tablet (un quiosco siempre conectado a wifi y enchufe).
GCM-HTTP (//developer.android.com/google/gcm/http.html) funciona bien, pero en algunos casos puede ocurrir que un único dispositivo reciba muchas notificaciones que activen el conocido problema de regulación descrito aquí (// developer. Android.com/google/gcm/adv.html#throttling). Esto es un problema ya que la carga útil en la notificación es de gran importancia para el sistema. ¿Cuál es la mejor solución para evitar esto?
- Implementa en el servidor un servicio que agrupa las notificaciones al mismo dispositivo y las dispara con una frecuencia limitada.
- Utilice un servicio XMPP. Me gustaría usar GCM-XMPP (//developer.android.com/google/gcm/ccs.html) pero necesitas estar firmado en una lista blanca, así que no creo que todo el mundo pueda utilizarla. Como alternativa debo usar unSmack o Quickblox como se aconseja aquí ( Android y XMPP: Soluciones disponibles actualmente ) y aquí ( Mejor manera de implementar la aplicación de chat usando XMPP en Android? ) Respectivamente?
- Implementar una conexión de socket básica como se describe en (//thinkandroid.wordpress.com/2010/03/27/incorporating-socket-programming-into-your-applications/)? En este caso tengo que tener en cuenta la posibilidad de que la conexión se pierda momentáneamente?
SOLUCIÓN: He encontrado la solución a mi pregunta, que es el protocolo XMPP. Al principio implementé aSmack en la aplicación de tableta y configuré un servidor eJabberd que funcionaba localmente. La implementación ha sido bastante fácil. Después de un par de semanas recibí un correo de Google para el GCM-XMPP, que es aún más rápido para incrustar en la aplicación y funciona muy bien!
- Eventos XMPP en Android
- SASLError utilizando PLAIN: no autorizado
- Obtener usuarios en línea (entradas de la lista) usando smack 4.1 en android
- Chat de video de Android con XMPP
- ¿Cómo puedo saber si el servidor recibe un mensaje de chat?
- XMPP Group Chat Android
- ¿Cómo puedo almacenar el historial de chat en Android
- Cómo recuperar un historial de chat de Openfire usando asmack android
- La clase StickersManager no se encuentra para Quickblox
- Cómo saber Escribir Estado en XMPP openfire usando Smack
- Característica no implementada nodejs xmpp android
- ¿Cómo usar Smack 4.2 para conectarse a ejabberd?
- Inhibición de inicio de sesión La autenticación SASL falló al utilizar el mecanismo DIGEST-MD5 asmack en android
Tal vez estableciendo time_to_live a 0.
Desde http://developer.android.com/google/gcm/adv.html :
"Otra ventaja de especificar la fecha de caducidad para un mensaje es que GCM nunca acelerará los mensajes con un valor time_to_live de 0 segundos.En otras palabras, GCM garantizará el mejor esfuerzo para los mensajes que deben ser entregados" ahora o nunca ". Que un valor time_to_live de 0 significa que los mensajes que no se pueden entregar inmediatamente serán descartados, sin embargo, debido a que tales mensajes nunca se almacenan, esto proporciona la mejor latencia para el envío de notificaciones ".