2017-04-17 55 views
-1

我在通過Android中的XMPP接收郵件時遇到問題。Android:接收郵件時出現XMPP消息格式問題

發送郵件格式如下:

<?xml version="1.0" encoding="UTF-8"?> 
<message xmlns="jabber:client" to="[email protected]" from="[email protected]" 
type="chat" mediaType="text"> 
<body>Hello</body> 
<mediaType>text</mediaType> 
<mediaUrl /> 
<thumbUrl /> 
<from_id>1014</from_id> 
<user_profile_pic>http://www..</user_profile_pic> 
<user_profile_name>XYZ</user_profile_name> 
<uniqueID>xsFf2ifTszKVg11ogAlgziD1IwWjcJ</uniqueID> 
</message> 

但我在Android的XMPP有以下格式:

<?xml version="1.0" encoding="UTF-8"?> 
<message to="[email protected]" from="[email protected]/a94o853phq" type="chat"> 
<body>Hello</body> 
<thread>61242b7c-e843-45cf-a9ff-0383ebf60aeb</thread> 
<mediaType xmlns="jabber:client" /> 
<mediaUrl xmlns="jabber:client" /> 
<thumbUrl xmlns="jabber:client" /> 
<user_profile_pic xmlns="jabber:client" /> 
<user_profile_name xmlns="jabber:client" /> 
<uniqueID xmlns="jabber:client" /> 
<from_id xmlns="jabber:client" /> 
</message> 

發送短消息代碼:

DefaultExtensionElement extXMPPMessage = new DefaultExtensionElement("message", "jabber:client"); 
    extXMPPMessage.setValue("to", toUser); 
    extXMPPMessage.setValue("from", fromUser); 
    extXMPPMessage.setValue("body", message); 
    extXMPPMessage.setValue("type", type); 
    extXMPPMessage.setValue("mediaType", mediaType); 
    extXMPPMessage.setValue("mediaUrl", mediaURL); 
    extXMPPMessage.setValue("thumbUrl", thumbURL); 
    extXMPPMessage.setValue("from_id", from_id); 
    extXMPPMessage.setValue("user_profile_pic", user_profile_pic); 
    extXMPPMessage.setValue("user_profile_name", user_profile_name); 
    extXMPPMessage.setValue("uniqueID", uniqueID); 

    Message msg = new Message(); 
    msg.setType(Message.Type.chat); 
    msg.setTo(toUser); 
    msg.setFrom(fromUser); 
    msg.setBody(message); 
    msg.addExtension(extXMPPMessage); 
    chat.sendMessage(msg); //chat is Object of Chat class 

我能接受接口方法中的消息:

@Override 
public void processMessage(Chat chat, Message message) { 
    Log.e(TAG, "ProcessMessage Message received " + message.toString()); 
} 

我不知道什麼是問題,我得到了完美的身體,也是我成功接收消息,但mediaType,用戶名,用戶配置文件每個標籤都變空了,請幫助我。謝謝。

+0

哪個版本嫌你使用mediaUrl等? – SANAT

+0

Hi @SANAT,Smack 4.1.4版本 –

+0

將消息從android傳遞給android時發生了什麼? – SANAT

回答

1

您在命名空間中傳遞jabber:client這樣的:

new DefaultExtensionElement("message", "jabber:client"); 

所以,當你收到它,你在xmlns越來越jabber:client

如果你想通過DefaultExtensionElement來傳遞數據,然後使用這樣的:

DefaultExtensionElement extEenderName = new DefaultExtensionElement(
        "msgSenderName", ""); 
      extEenderName.setValue("msgSenderName", "Sanat"); 
      msg.addExtension(extEenderName); 

千萬不要錯過namespace那裏。我使用單個值DefaultExtensionElement。它的工作。

不要從DefaultExtensionElement的身體通過。從Message對象的身體傳遞。然後爲其他事物添加單獨的擴展名。對於其他類型的數據

一個建議是剛剛通過的JSONObject爲String身體與你的文本內容,並像其他mediaType的數據,

+0

好的,謝謝你的回答,這是爲了發送,但爲什麼我從iPhone和Web獲得相同的迴應。? iPhone到一個網站和網站到iPhone聊天工作正常。 –

+0

然後你需要將消息對象與web/ios匹配。實際上,您只能獲取消息標記中的名稱空間值。 – SANAT

+0

我已經建議你將JsonObject作爲Body標籤中的字符串傳遞。它可以在所有平臺上輕鬆使用,並輕鬆解析身體數據。 – SANAT