¿Cómo enviar un mensaje XMPP cuando el remitente está fuera de línea?

Estoy usando aSmack y Openfire para mi aplicación de chat. Puedo enviar y recibir el mensaje finamente. Openfire soporta la transferencia de mensajes fuera de línea cuando el destinatario está desconectado manteniendo el mensaje hasta que esté conectado.

Pero, ¿qué hacer cuando el remitente está fuera de línea o su internet cae entre la comunicación?

¿Hay alguna api proporcionada por aSmack / Smack que mantiene el mensaje hasta que Internet está de vuelta?

¿O debo enviar mis mensajes a través de SQLite?

Si estás conectado a openfire e internet se apaga entonces sigues en línea en openfire porque no puedes cambiar la presencia si internet está apagado.

Para este uso openfire http://xmpp.org/extensions/xep-0199.html

Si la aplicación de usuario no responde a la solicitud de ping, entonces openfire lo hace desconectado y se inicia el almacenamiento sin conexión.

Para obtener mensajes sin conexión en asmack es necesario agregar siguientes proveedores. Después de agregar estos obtendrá mensajes sin conexión si están habilitados desde el servidor

pm.addIQProvider("offline", "http://jabber.org/protocol/offline", new OfflineMessageRequest.Provider()); // Offline Message Indicator pm.addExtensionProvider("offline", "http://jabber.org/protocol/offline", new OfflineMessageInfo.Provider()); 

Introduzca aquí la descripción de la imagen Iones / xep-0199.html

Bueno respondiendo después de un tiempo, pero tal vez todavía señalaría a alguien en la dirección correcta.

Después de buscar por un tiempo, llego a saber que aSmack no proporciona ningún almacenamiento sin conexión.

Para enviar mensajes cuando el remitente está desconectado, necesitamos almacenamiento sin conexión para almacenar el mensaje hasta que el remitente vuelva a estar conectado. He utilizado sqlite para esto, pero SharedPreferences también sería una buena opción si tenemos que borrar el mensaje después de enviar correctamente.

La mejor solución, que yo sigo es, insertar mensaje en sqlite , almacenar su id en shared preferences , enviar mensaje y luego eliminar la identificación de shared preferences . En el medio mientras que si la conexión del intenet cae o el mensaje no podría enviar por ninguna razón, entonces tenemos su identificación en preferencias compartidas como reserva. Después de obtener en línea, podemos ir a través de shared preferences para comprobar si su es cualquier mensaje está pendiente de enviar.

  • No se pueden recibir mensajes de chat en Android mediante XMPP y aSmack
  • SMACK XEP-313 Implementación
  • ¿Cómo puedo almacenar el historial de chat en Android
  • La mejor manera de crear un cliente de chat Android XMPP en Unity3D
  • Cómo configurar / obtener datos de perfil con XMPP usando Smack
  • Código de error 503 en la transferencia de archivos mediante xmpp
  • Mejor manera de implementar la aplicación de chat utilizando XMPP en Android?
  • No se puede recibir el archivo usando asmack y xmpp
  • La clase StickersManager no se encuentra para Quickblox
  • Notificaciones Push de XMPP (Openfire)
  • agregar / sincronizar contactos automáticamente
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.