studio programacion para móviles libros gratis español edición desarrollo curso aplicaciones android xmpp asmack

para - manual programacion android español pdf



Habilitar la gestión de la corriente como Android (3)

Los usos parcheados de Asmack Yaxim se pueden encontrar aquí (el creador tuvo la amabilidad de dirigirme a él, gracias, ¡gracias!):

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

Asegúrate de obtener libidn también.

Estoy enfrentando un problema con el uso de XEP-0198 stream management.

Básicamente, quiero habilitar esto para el problema de la eliminación de mensajes en Android cuando Internet se desconecta aleatoriamente y el servidor aún tiene presencia de clientes en línea.

Para resolver este problema, quiero usar XEP-0198 que usa el proceso de solicitud y confirmación. Puedes encontrar más here .

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

XMPPConnection.DEBUG_ENABLED=true;

Obtengo sm: 3 en el registro, que es interno de asmack, pero no puedo obtenerlo al agregar un PacketListner a través de 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>

Intenté un filtro de paquetes personalizado al ver el código de chat seguro y yaxim también, pero no entiendo cómo puedo obtener esto <r xmlns=''urn:xmpp:sm:3''/> en mi código para que pueda devuelva la cantidad de paquetes recibidos hasta el servidor para que el servidor pueda enviarme cualquier paquete faltante.

También había configurado el administrador de proveedores para esto agregando el siguiente código:

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, se me ocurre esta idea al ver la implementación segura de chat, pero extiende el paquete Unkown en lugar del paquete. Yo había tomado ayuda desde here .

También he visto una rama de git de asmack como esta pero no pude entender cómo implementarla.

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


No puedo ofrecerle una solución porque tengo un problema similar pero puedo decirle desde el segundo enlace que UnknownPacket extiende Packet AND implementa PacketExtension , por eso tuvo que enviar su StreamHandlingPacket a (PacketExtension) en la declaración de devolución de Su método de extensión parse.

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

Háganos saber cómo va!


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