2017-07-26 1 views
1

J'essaie d'envoyer un message. La connexion avec le serveur firebase xmpp est terminée. J'utilise le dernier smack 4.2.java - envoyer une erreur de message en utilisant smack4.2 firebase xmpp

public myClient(String senderId, String serverKey) throws IOException, NotConnectedException, InterruptedException { 
     Roster.setRosterLoadedAtLoginDefault(false); 
     Jid jid ; 
     jid = JidCreate.from(HOST); 
     final XMPPTCPConnectionConfiguration conf = XMPPTCPConnectionConfiguration.builder() 
       .setCompressionEnabled(false) 
       .setSendPresence(false) 
       .setConnectTimeout(10000) 
       .setHost(HOST) 
       .setDebuggerEnabled(false) 
       .setPort(PORT) 
       .setXmppDomain((DomainBareJid) jid) 
       .setSocketFactory(SSLSocketFactory.getDefault()) 
       .setUsernameAndPassword(senderId + "@gcm.googleapis.com", serverKey) 
       .build(); 

     this.conn = new MyXMPPTCPConnection(conf); 
     try { 
       conn.connect(); 

      conn.login(); 

     } catch (XMPPException | InterruptedException | SmackException e) { 
      throw new IOException(e); 
     } 



     Roster roster = Roster.getInstanceFor(conn); 
     Collection<RosterEntry> entries = roster.getEntries(); 
     for (RosterEntry entry : entries) { 
      System.out.println(entry); 
     } 
      Entity jEntity ; 

      Jid jid1 = JidCreate.from("text"); 

      EntityBareJid jid21 = JidCreate.entityBareFrom("[email protected]"); 


      Chat chat = ChatManager.getInstanceFor(conn) 
      .createChat(jid21); 

      Message newMessage = new Message(); 
      String t = "hello this is a test message"; 
      newMessage.setBody(t.toString()); 
      /* ((Object) chat).send(newMessage);*/ 
      chat.sendMessage(newMessage); 

     StanzaFilter filter = new AndFilter(new StanzaTypeFilter(Message.class)); 

     //PacketCollector myCollector = conn2.createPacketCollector(filter); 
     // Normally, you'd do something with the collector, like wait for new packets. 

     StanzaListener myListener = new StanzaListener() { 
      @Override 
      public void processPacket(Stanza packet) throws SmackException.NotConnectedException { 
       System.out.println("packet = [" + packet + "]"); 
      } 
     }; 
     conn.addAsyncStanzaListener(myListener, filter); 

     while (true) { 
     } 
     //conn2.disconnect(); 
    } 

Quand je courais cette méthode a obtenu l'erreur suivante

paquet = [bonjour ceci est un test message25667738-6dd1-4c74-a64b-2fdbac74339bInvalidJson: MissingPayload] 26 juil 2017 12:52:46

org.jivesoftware.smack.tcp.XMPPTCPConnection $ PacketReader parsePackets INFO: MyXMPPTCPConnection [[email protected]/41CA77 F0] (0) élément de fermeture reçu. Le serveur veut mettre fin à la connexion , appelant la déconnexion()

Veuillez consulter et suggérer. Merci d'avance.

+0

Copie possible de [Charge utile manquant JSON non valide de GCM] (https://stackoverflow.com/questions/30393534/gcm-invalid-json-missing-payload) – Antoniossss

Répondre

1

Le serveur XMPP FCM utilise la syntaxe JSON. Vous devez donc utiliser le systax comme décrit pour la charge utile FCM au this documentation. Depuis XMPP utilise XML, vous devez intégrer la charge utile JSON dans un noeud XML avec le nom GCM comme suit:

<gcm xmlns:google:mobile:data> 
    JSON payload 
</gcm> 

Pour exemple, votre charge utile JSON peut ressembler à ceci:

{ 
    "to":"APA91bEXJvW4jUdxxxxx-xxxxxxxx", 
    "data":{"message":"Hello"}, 
    "priority":"high" 
} 

Pour complète Pour plus d'informations sur l'utilisation du serveur de connexion XMPP à l'aide de GCM/FCM, consultez la section this documentation. En utilisant Smack, vous pouvez créer une classe avec le GcmPacketExtension pour créer l'élément gcm avec la charge utile json.