Как добавить пользовательский атрибут (ник) в свой тег сообщения XMPP, в Smack 4.1

Я хочу добавить пользовательский атрибут (ник) в своем сообщении чата XMPP, как в следующем примере

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

Я знаю, это не рекомендуется XMPP, но это мое требование, поскольку этот атрибут (nick) уже реализован в версии iOS приложения, над которым я работаю.

Solutions Collecting From Web of "Как добавить пользовательский атрибут (ник) в свой тег сообщения XMPP, в Smack 4.1"

Для этого вам нужно отредактировать 2 класса Smack 4.1

  • Класс Stanza в ( org.jivesoftware.smack.packet )
  • Класс PacketParserUtils в ( org.jivesoftware.smack.util )

1. Класс Stanza

Определите свой пользовательский атрибут ( ник )

  private String nick = null; 

Определить Геттер и сеттеры

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

Редактировать Stanza Constructor

 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) { } 

Не делайте этого, это не рекомендуется по какой-то причине. Очень вероятно, что некоторые серверы будут лишать атрибут или даже полностью отказаться от обработки пакета. Вместо этого рекомендуется добавить пользовательский элемент.

На самом деле такое расширение уже существует, XEP-0172 :

 <message from='*' to='*' id='123' type='chat'> <nick xmlns='http://jabber.org/protocol/nick'>KASHIF</nick> <body>hello</body> </message> 

Возможно, это уже работает с другими клиентами или библиотеками, поэтому это гораздо лучшее решение.