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

5 android xmpp smack

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

<message from='*' to='*' id='123' nick='KASHIF' type='chat'><body>hello</body></message>
Run Code Online (Sandbox Code Playgroud)

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

sha*_*han 3

为此,您需要编辑 Smack 4.1 的 2 个类

  • ( org.jivesoftware.smack.packet )中的节类
  • ( org.jivesoftware.smack.util )中的PacketParserUtils类

1. 节类

定义您的自定义属性 ( nick )

 private String nick = null;
Run Code Online (Sandbox Code Playgroud)

定义 Getter 和 Setter

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

public void setNick(String paramString) {
   this.nick = paramString;
}
Run Code Online (Sandbox Code Playgroud)

编辑节构造函数

protected Stanza(Stanza p) {

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

}
Run Code Online (Sandbox Code Playgroud)

编辑addCommonAttributes方法

protected void addCommonAttributes(XmlStringBuilder xml) {

    //add this line
    if(getNick()!= null)
         xml.optAttribute("nick", getNick());
}
Run Code Online (Sandbox Code Playgroud)

2.PacketParserUtils类

编辑parseMessage方法

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

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

}
Run Code Online (Sandbox Code Playgroud)

现在您可以简单地设置昵称并发送消息,如下所示

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) {
}
Run Code Online (Sandbox Code Playgroud)