2017-07-26 5 views
1

メッセージを送信しようとしています。 firebase xmppサーバーとの接続が完了しました。最新のsmack 4.2を使用しています。 、7月26日:[ MissingPayloadこんにちは これはテスト message25667738-6dd1-4c74-a64b-2fdbac74339bInvalidJsonある] java - 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(); 
    } 

私はこの方法を実行している次のエラー

パケット=を得ました2017年12時52分46秒PM

org.jivesoftware.smack.tcp.XMPPTCPConnection $ PacketReader parsePackets INFO:MyXMPPTCPConnection [[email protected]/41CA77 F0] (0)が終了要素を受信しました。サーバが 接続を終了したい場合は、disconnect()を呼び出してください。

レビューしてください。 ありがとうございます。

+0

[GCM無効なJSONが不足しているペイロード](https://stackoverflow.com/questions/30393534/gcm-invalid-json-missing-payload)の可能な複製 – Antoniossss

答えて

1

FCM XMPPサーバーはJSON構文を使用します。だから、this documentationでFCMペイロードについて説明したようにsystaxを使用する必要があります。 XMPPは、XMLを使用しているので、次のように名前のGCMを持つXMLノードにJSONペイロードを埋め込む必要がある:例えばのために

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

、あなたのJSONペイロードは次のようになります。完全にするために

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

GCM/FCMを使用したXMPP接続サーバーの使用に関する詳細については、this documentationをご覧ください。

Smackを使用すると、GcmPacketExtensionを持つクラスを作成して、jsonペイロードでgcm要素を作成できます。

関連する問題