Activar la gestión de corrientes asmack android

Estoy enfrentando un problema con el uso de la gestión de flujo XEP-0198.

Básicamente, quiero habilitar esto para el mensaje que deja caer el problema en el androide cuando el disconect del Internet aleatoriamente y el servidor todavía tiene presencia del cliente en línea.

Para solucionar este problema quiero usar XEP-0198 que utiliza el proceso de solicitud y reconocimiento. Puedes encontrar más aquí .

Básicamente estoy usando sm: 3 para esto. El problema es que cuando

XMPPConnection.DEBUG_ENABLED=true; 

Consigo sm: 3 en el registro que es interno a asmack pero soy incapaz de conseguir eso ading cualquier packetListner sobre la conexión.

Esto es lo que dentro de asmack debug imprime:

 <r xmlns='urn:xmpp:sm:3'/><message from='[email protected]/Smack' to='[email protected]' id='CQUe6-5'><received xmlns='urn:xmpp:receipts' id='CQUe6-4'/></message><r xmlns='urn:xmpp:sm:3'/> 

Esto es lo que obtengo de packetFilter:

 <message id="CQUe6-5" to="[email protected]" from="[email protected]/Smack"><received xmlns='urn:xmpp:receipts' id='CQUe6-4'/></message> 

Había intentado para el filtro de paquete personalizado viendo el código de chat seguro y yaxim así, pero no estoy recibiendo cómo puedo obtener este <r xmlns='urn:xmpp:sm:3'/> en mi código para que pueda Devolver el número de paquetes recibidos hasta ahora al servidor para que el servidor pueda devolverme cualquier paquete faltante.

También había configurado el gestor de proveedores para esto añadiendo el código a continuación:

  addSimplePacketExtension("sm", URN_SM_3); addSimplePacketExtension("r", URN_SM_3); addSimplePacketExtension("a", URN_SM_3); addSimplePacketExtension("enabled", URN_SM_3); addSimplePacketExtension("resumed", URN_SM_3); addSimplePacketExtension("failed", URN_SM_3); private static final String URN_SM_3 = "urn:xmpp:sm:3"; private static void addSimplePacketExtension(final String name, final String namespace) { Log.e("adding simple packet extension", namespace+"---"+name); ProviderManager.getInstance().addExtensionProvider(name, namespace, new PacketExtensionProvider() { public PacketExtension parseExtension(XmlPullParser parser) throws Exception { StreamHandlingPacket packet = new StreamHandlingPacket(name, namespace); Log.e("Stream ahndling packet ","------>"+packet.toXML()); int attributeCount = parser.getAttributeCount(); for (int i = 0 ; i < attributeCount ; i++) { packet.addAttribute(parser.getAttributeName(i), parser.getAttributeValue(i)); } return (PacketExtension) packet; } }); } static class StreamHandlingPacket extends Packet { private String name; private String namespace; Map<String, String> attributes; StreamHandlingPacket(String name, String namespace) { this.name = name; this.namespace = namespace; attributes = Collections.emptyMap(); } public void addAttribute(String name, String value) { if (attributes == Collections.EMPTY_MAP) attributes = new HashMap<String, String>(); attributes.put(name, value); } public String getAttribute(String name) { return attributes.get(name); } public String getNamespace() { return namespace; } public String getElementName() { return name; } public String toXML() { StringBuilder buf = new StringBuilder(); buf.append("<").append(getElementName()); // TODO Xmlns?? if (getNamespace() != null) { buf.append(" xmlns=\"").append(getNamespace()).append("\""); } for (String key : attributes.keySet()) { buf.append(" ").append(key).append("=\"").append(StringUtils.escapeForXML(attributes.get(key))).append("\""); } buf.append("/>"); Log.e("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&","&&&&&&&&&&&&&&&&&&&&&&&&&&&&=>"+buf.toString()); return buf.toString(); } } 

Básicamente tengo esta idea al ver la implementación segura de chat, pero se extiende UnkownPacket en lugar de Packet. Había tomado ayuda de aquí .

También he visto una rama git de asmack como esto, pero no fue capaz de entender cómo implementarlo.

Por favor ayuda si lo has implementado de cualquier manera con cualquier biblioteca como chat seguro, yaxim o cualquier otro cliente de Android XMPP.

Recomiendo usar Smack 4.1, que se ejecuta en Android y admite XEP-198 Stream Management.

No puedo ofrecerle una solución porque estoy teniendo un problema similar, pero puedo decirle desde el segundo enlace que UnknownPacket extiende el paquete y implementa PacketExtension , es por eso que tuvo que emitir su StreamHandlingPacket a (PacketExtension) en la declaración de retorno de Su método parseExtension.

¿Es capaz de capturar el xml que el servidor XMPP devuelve cuando envía <enable xmlns='urn:xmpp:sm:3' etc> ? Si es así, eso sería un comienzo para su problema.

¡Déjenos saber cómo va!

El patched asmack yaxim usa se puede encontrar aquí (el creador fue muy amable de dirigirme a él, gracias Ge0rG!):

https://github.com/pfleidi/yaxim/tree/master/libs

Asegúrese de obtener libidn también.

  • Smack API - Leer historial de chat desde el servidor Openfire
  • ¿Cómo implementar el estado de lectura de mensajes como whatsapp blue tick mark?
  • IN XMPP obtener la excepción no autorizada (401), mientras que la presentación del formulario
  • File Transfer: mostrar el tamaño del archivo 0KB mientras se transfiere el archivo usando smack en android
  • No se puede crear una sala de chat multiusuario (MUC) con la biblioteca aSmack para Android: "packet.DefaultPacketExtension no se puede convertir en paquete.MUCUser"
  • No se puede conectar al servidor Openfire (mediante smack api)
  • ¿Cómo podemos acceder a los mensajes del archivo en la aplicación android desde el servidor xmpp
  • ¿Cómo obtener el estado del mensaje leído / no leído usando XMPP Smack API?
  • PrivacyListManager.getInstanceFor es NULL en android aSmack
  • Smack mensaje oyente no llamado y conexión inestable
  • Incorporación del protocolo XMPP a una aplicación de Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.