¿Cómo crear servicio en Android que hace persistente Xmpp conexión con XMPP Server?

Después de buscar mucho en Internet hemos llegado a una conclusión con el fin de garantizar una conexión persistente con el servidor XMPP tenemos que crear un servicio,

Hemos creado uno que utiliza la biblioteca Smack para conectarse con el servidor XMPP y está funcionando bien con la red móvil y wi-fi.

Cada vez que haces algo el enfoque de diseño siempre importa !!!, Smack tiene este mecanismo de reconexión ya implícitamente implementado en la biblioteca que escuchan la conexión y si la conexión cae Smack intenta volver a conectar con el servidor XMPP en algún intervalo de tiempo.

Nuestro caso de uso ::
La conectividad de INTERNET puede ser debido a wifi o red de datos, aquí si la conexión va es el estado inactivo de alguien apagar la pantalla cpu va a dormir ahora cualquier dato se envía al servidor en esta conexión no habrá respuesta porque el servidor no está más escuchando al cliente , En la conexión XMPP del lado del cliente ya está en modo conectado el oyente de conexión no detecta ninguna desconexión del servidor, por lo que aquí se completa el flujo.

Después de buscar en INTERNET encontramos que la solución posible para solucionar esto es hacer ping al servidor después de una corrección (estamos usando 1 min como período de reparación), después de que el fallo de ping detectado, hemos implementado mecanismo de reconexión igual que smack (idea tomada de Smack reconexión mecanismo Mismo) haciendo uso de la tarea del temporizador.

Problema: el único problema que tenemos es el drenaje de la batería, si el usuario todavía está conectado con INTERNET y aumenta el intervalo de reconexión que se agotará extravagantemente.

1). ¿Cuál es la solución posible del problema anterior?

2). ¿Debemos adoptar otro enfoque?

¿Cómo crear servicio en Android que hace persistente Xmpp conexión con XMPP Server?

Dos cosas

  1. Restablezca la conexión escuchando las intenciones de CONNECTIVITY_CHANGED y determine si la conexión de datos actualmente utilizada se ha reducido (y se ha sustituido por otra).
  2. Asegúrese de que la conexión se establece al hacer ping al servidor

Comentarios sobre

  1. La escucha de CONNECTIVY_CHANGED no es suficiente, es necesario comparar la conexión previamente activa con la ahora activa. Y si no es lo mismo, restablezca la conexión XMPP.
  2. Smack 4.1 viene con ServerPingWithAlarmManager , que comprobará si se requiere un ping de acuerdo con la configuración de PingManager cada 30 mintues . Este valor no se puede cambiar.

Utilizando 1 minuto como intervalo de ping es mucho más! Como usted lo ha experimentado, se drenará la batería muy rápido. Un intervalo de ping razonable es algo> 15 minutos y recomiendo 30 minutos. Smack 4.1 también se asegurará de que un ping solo se envíe si no hay ninguna estrofa recibida con el intervalo Ping.

También use XEP-0198: Gestión de flujo cuando sea posible.

Recomiendo mirar las diversas aplicaciones de código abierto que siguen estas directrices y lograr una conexión estable y permanente sin drenar la batería de los usuarios 1 .

1: Sólo después de estos consejos no puede garantizar que la batería se agotó. Hay más factores a tener en cuenta.

  • Cómo obtener el valor de atributo personalizado de un mensaje XMPP XML?
  • Diferencia entre el escuchador de paquetes smack y el oyente de mensajes
  • IN XMPP obtener la excepción no autorizada (401), mientras que la presentación del formulario
  • El oyente de presencia no trabaja en asmack
  • Mejor manera de implementar la aplicación de chat utilizando XMPP en Android?
  • Android: asmack (portado) o smack (parcheado)?
  • Enviar / Recibir solicitud de amigo Uso del servidor XMPP en Android
  • SASLError utilizando PLAIN: no autorizado
  • Activar la gestión de corrientes asmack android
  • Enviar y recibir IQ XMPP ASMACK Android
  • Problema en el bloqueo de usuario en la lista de chat usando smack y servidor de fuego abierto
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.