2017-07-28 2 views
0

Le client Gajim sur windows et smack debbuger retourne ce type de strophe, identique à celui des spécifications xmpp.Smack android entrants onStanza est différent du débogueur

<message id='aeb213' to='[email protected]/chamber'> 
    <result xmlns='urn:xmpp:mam:2' queryid='f27' id='28482-98726-73623'> 
    <forwarded xmlns='urn:xmpp:forward:0'> 
     <delay xmlns='urn:xmpp:delay' stamp='2010-07-10T23:08:25Z'/> 
     <message xmlns='jabber:client' from="[email protected]" to="[email protected]"> 
     <body>Hail to thee</body> 
     </message> 
    </forwarded> 
    </result> 
</message> 

encore sur smack en onStanza retourne celui-ci:

<message to="[email protected]/chamber" from="[email protected]/chamber"> 
    <result xmlns="urn:xmpp:mam:0"> 
    <body>Hail to thee</body> 
    <stanza-id/> 
    <delay/> 
    <archived/> 
    <data/> 
    </result> 
</message> 

Comment résoudre ce problème? Voici quelques parties du code.

public class XmppServiceSmackImpl implements XmppService, StanzaListener, ConnectionListener { 
    XmppServiceListener xmppServiceListener; 
    Logger logger = Logger.getLogger(XmppServiceSmackImpl.class.getName()); 

    XMPPTCPConnection connection; 
    String password; 

    public XmppServiceSmackImpl(XmppServiceListener xmppServiceListener) { 
     this.xmppServiceListener = xmppServiceListener; 
    } 

    @Override 
    public void setup(String jid, String password, String authMethod, String hostname, Integer port) { 
     final String[] jidParts = jid.split("@"); 
     String[] serviceNameParts = jidParts[1].split("/"); 
     String serviceName = serviceNameParts[0]; 

     XMPPTCPConnectionConfiguration.Builder confBuilder = XMPPTCPConnectionConfiguration.builder() 
       .setServiceName(serviceName) 
       .setUsernameAndPassword(jidParts[0], password) 
       .setConnectTimeout(3000) 
       //.setDebuggerEnabled(true) 
       .setSecurityMode(ConnectionConfiguration.SecurityMode.required); 

     if (serviceNameParts.length>1){ 
      confBuilder.setResource(serviceNameParts[1]); 
     } else { 
      confBuilder.setResource(Long.toHexString(Double.doubleToLongBits(Math.random()))); 
     } 
     if (hostname != null){ 
      confBuilder.setHost(hostname); 
     } 
     if (port != null){ 
      confBuilder.setPort(port); 
     } 
     if (trustedHosts.contains(hostname) || (hostname == null && trustedHosts.contains(serviceName))){ 
      confBuilder.setCustomSSLContext(UnsafeSSLContext.INSTANCE.getContext()); 
     } 
     XMPPTCPConnectionConfiguration connectionConfiguration = confBuilder.build(); 
     XMPPTCPConnection.setUseStreamManagementDefault(true); 
     XMPPTCPConnection.setUseStreamManagementResumptionDefault(true); 
     connection = new XMPPTCPConnection(connectionConfiguration); 

     // Disable automatic roster request 
     Roster roster = Roster.getInstanceFor(connection); 
     roster.setRosterLoadedAtLogin(false); 
     roster.setSubscriptionMode(Roster.SubscriptionMode.manual); 

     connection.addAsyncStanzaListener(this, null); 
     connection.addConnectionListener(this); 
     connection.addStanzaAcknowledgedListener(this); 
    } 

    @Override 
    public void processPacket(Stanza packet) throws SmackException.NotConnectedException { 
     logger.log(Level.WARNING, "Received stanza: " + packet); 
     this.xmppServiceListener.onStanza(packet); 
     } 
} 

Répondre

1

appartient à XEP-0280 En SMACK, il est une fonctionnalité expérimentale. dont vous avez besoin dans votre bibliothèque supplémentaire build.gradle

dependencies { 
    compile "org.igniterealtime.smack:smack-android-extensions:4.2.0" 
} 

Avant de faire quelque chose avec SMACK, vous devez initialiser fonctionnalité expérimentale:

new ExperimentalInitializer().initialize(); 

Par ailleurs, le fournisseur est une strophe de plugin comme gestionnaire Lorsque vous souhaitez utiliser la strophe personnalisée entre votre client et votre serveur. Vous devez écrire votre propre fournisseur pour l'analyser en élément d'extension sous Objet de message. Jetez un coup d'œil à ProviderManager.

+0

J'ai mis à jour vers la version 4.2.0 et cela a été résolu grâce au nouveau support mam et à ses fournisseurs. mais bon à savoir sur les fournisseurs personnalisés – Jan