如何在 Smack 4.1 中的 XMPP 消息标签中添加自定义属性(昵称)
How can I add custom attribute (nick) in my XMPP message tag, in Smack 4.1
我想在我的 XMPP 聊天消息中添加自定义属性(昵称),如下例
<message from='*' to='*' id='123' nick='KASHIF' type='chat'><body>hello</body></message>
我知道,XMPP 不推荐,但这是我的要求,因为这个 attribute(nick) 已经在iOS 我正在使用的应用程序版本。
不要那样做,不推荐这样做是有原因的。很可能有些服务器会剥离该属性,甚至完全拒绝处理该数据包。相反,推荐的方法是添加自定义元素。
其实这样的扩展已经存在了,XEP-0172:
<message from='*' to='*' id='123' type='chat'>
<nick xmlns='http://jabber.org/protocol/nick'>KASHIF</nick>
<body>hello</body>
</message>
这可能已经适用于其他客户端或库,因此它是一个更好的解决方案。
为此您需要编辑 2 classes of Smack 4.1
- 节 class 在 (org.jivesoftware.smack.packet)
- PacketParserUtils class 在 (org.jivesoftware.smack.util)
1.节 class
定义您的自定义属性(昵称)
private String nick = null;
定义 Getter 和设置器
public String getNick() {
return this.nick;
}
public void setNick(String paramString) {
this.nick = paramString;
}
编辑节 构造函数
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 class
编辑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) {
}
我想在我的 XMPP 聊天消息中添加自定义属性(昵称),如下例
<message from='*' to='*' id='123' nick='KASHIF' type='chat'><body>hello</body></message>
我知道,XMPP 不推荐,但这是我的要求,因为这个 attribute(nick) 已经在iOS 我正在使用的应用程序版本。
不要那样做,不推荐这样做是有原因的。很可能有些服务器会剥离该属性,甚至完全拒绝处理该数据包。相反,推荐的方法是添加自定义元素。
其实这样的扩展已经存在了,XEP-0172:
<message from='*' to='*' id='123' type='chat'>
<nick xmlns='http://jabber.org/protocol/nick'>KASHIF</nick>
<body>hello</body>
</message>
这可能已经适用于其他客户端或库,因此它是一个更好的解决方案。
为此您需要编辑 2 classes of Smack 4.1
- 节 class 在 (org.jivesoftware.smack.packet)
- PacketParserUtils class 在 (org.jivesoftware.smack.util)
1.节 class
定义您的自定义属性(昵称)
private String nick = null;
定义 Getter 和设置器
public String getNick() {
return this.nick;
}
public void setNick(String paramString) {
this.nick = paramString;
}
编辑节 构造函数
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 class
编辑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) {
}