如何在Smack 4.1中的XMPP消息标记中添加自定义属性(缺刻)

时间:2015-05-11 06:42:36

标签: android xmpp smack

我想在我的XMPP聊天消息中添加自定义属性(缺口),如下例所示

<message from='*' to='*' id='123' nick='KASHIF' type='chat'><body>hello</body></message>

我知道,XMPP 不推荐,但这是我的要求,因为属性(缺口)已经在我正在使用的应用的iOS版本中实现上。

2 个答案:

答案 0 :(得分:4)

不要这样做,不建议这样做。一些服务器很可能会删除该属性,甚至完全拒绝处理该数据包。相反,推荐的方法是添加自定义元素。

事实上,这种扩展已经存在,XEP-0172

@Html.DropDownListFor(a => a.Boxes.clientname, new SelectList(Model.BoxCollection, "fullname", "fullname"))

这可能已经与其他客户端或库一​​起使用,因此这是一个更好的解决方案。

答案 1 :(得分:3)

为此你需要编辑2类Smack 4.1

  • Stanza 班级( org.jivesoftware.smack.packet
  • PacketParserUtils 类( org.jivesoftware.smack.util

<强> 1。 Stanza课程

定义自定义属性(缺口

 private String nick = null;

定义Getter和Setter

public String getNick() {
    return this.nick;
}

public void setNick(String paramString) {
   this.nick = paramString;
}

编辑Stanza 构造函数

protected Stanza(Stanza p) {

   //add this line
   nick = p.getNick();

}

编辑 addCommonAttributes 方法

protected void addCommonAttributes(XmlStringBuilder xml) {

    //add this line
    if(getNick()!= null)
         xml.optAttribute("nick", getNick());
}

<强> 2。 PacketParserUtils类

编辑 parseMessage 方法

 public static Message parseMessage(XmlPullParser parser)
                throws XmlPullParserException, IOException, SmackException {

   //add this line
   message.setNick(parser.getAttributeValue("", "nick"));

}

现在您只需设置昵称并发送消息,如下所示

Message message = new Message();
message.setType(Message.Type.chat);
message.setStanzaId("123");
message.setTo(number);

message.setNick("SHAYAN");    

try {
 connection.sendStanza(message);
} catch (NotConnectedException e) {
}