Smack Message扩展,添加自定义元素(标签)经验分享
2017-01-12 10:20
806 查看
Smack框架对XMPP协议进行了封装,从而方便与Openfire即时通信服务器做交互。说白了,Smack框架可以通过对象构造符合XMPP协议的XML字符串,避免手动拼接字符串。
XMPP协议基本XML结构如下:
大多数情况下,这么简单的结构是满足不了需求的,我们可能会尝试向message元素下增加子元素,用来描述更多信息。
比如,除了发送方的jid,我们想直接带上发送方的昵称和头像URL,这样可以避免反复从数据库中查询这些基本信息。但这个看似简单的过程,在Smack中实现的却相当隐晦,接下来直接通过代码说明。
发送消息基本流程
UserInfo4XMPP 定义
定义
简单说明下,关键是实现ExtensionElement接口,然后实现自己的toXML方法,将要扩展的XML字符串返回即可,此字符串将作为message元素的子元素。
生成的message xml 结构
转自:UserInfo4XMPP
定义
http://www.cnblogs.com/iyangyuan/p/4496015.html?utm_source=tuicool
XMPP协议基本XML结构如下:
<message from='发送方jid' to='接收方jid' type='消息类型(普通消息/群聊)'> <body>消息内容</body> </message>
大多数情况下,这么简单的结构是满足不了需求的,我们可能会尝试向message元素下增加子元素,用来描述更多信息。
比如,除了发送方的jid,我们想直接带上发送方的昵称和头像URL,这样可以避免反复从数据库中查询这些基本信息。但这个看似简单的过程,在Smack中实现的却相当隐晦,接下来直接通过代码说明。
发送消息基本流程
//build chat Chat chat = chatManager.createChat("对方jid"); //build extension UserInfo4XMPP userInfo4XMPP = new UserInfo4XMPP(); userInfo4XMPP.setNameText("菜鸟"); userInfo4XMPP.setUrlText("http://www.liaoku.org/"); //build message Message message = new Message(); message.setBody("hello 你好"); //消息内容 message.addExtension(userInfo4XMPP); //添加扩展内容 //send chat.sendMessage(message);
UserInfo4XMPP 定义
import org.jivesoftware.smack.packet.ExtensionElement; /** * 为Message扩展用户信息 * @author 杨元(转载不注明出处可耻,原文请搜索[杨元博客]) * @version 创建时间:2015年5月11日 下午4:55:38 */ public class UserInfo4XMPP implements ExtensionElement{ //用户信息元素名称 private String elementName = "userinfo"; //用户昵称元素名称 private String nameElement = "name"; //用户头像地址元素名称 private String urlElement = "url"; //用户昵称元素文本(对外开放) private String nameText = ""; //用户头像地址元素文本(对外开放) private String urlText = ""; @Override public String getElementName() { return elementName; } /** * 返回扩展的xml字符串 * 此字符串作为message元素的子元素 */ @Override public CharSequence toXML() { StringBuilder sb = new StringBuilder(); sb.append("<"); sb.append(elementName); sb.append(">"); sb.append("<"); sb.append(nameElement); sb.append(">"); sb.append(nameText); sb.append("</"); sb.append(nameElement); sb.append(">"); sb.append("<"); sb.append(urlElement); sb.append(">"); sb.append(urlText); sb.append("</"); sb.append(urlElement); sb.append(">"); sb.append("</"); sb.append(elementName); sb.append(">"); return sb.toString(); } /** * 可忽略 */ @Override public String getNamespace() { return ""; } public String getNameText() { return nameText; } public void setNameText(String nameText) { this.nameText = nameText; } public String getUrlText() { return urlText; } public void setUrlText(String urlText) { this.urlText = urlText; } }UserInfo4XMPP
定义
简单说明下,关键是实现ExtensionElement接口,然后实现自己的toXML方法,将要扩展的XML字符串返回即可,此字符串将作为message元素的子元素。
生成的message xml 结构
<message id='76Ws9-11'> <body>hello 你好</body> <userinfo> <name>菜鸟</name> <url>http://www.liaoku.org/</url> </userinfo> </message>
转自:UserInfo4XMPP
定义
http://www.cnblogs.com/iyangyuan/p/4496015.html?utm_source=tuicool
相关文章推荐
- Smack Message扩展,添加自定义元素(标签)经验分享
- Smack Message扩展,添加自定义元素(标签)经验分享
- Smack Message属性扩展---添加自定义元素(标签)
- Smack Message属性扩展---添加自定义元素(标签)
- MapXtreme开发经验分享——添加自定义工具【转】
- google map使用自定义Marker在地图上添加文字标签
- 分享下我的z_blog模版 Google广告添加经验。
- HTMLParser使用详解(5)- 扩展 HTMLParser 对自定义标签的处理能力
- HTMLParser使用详解(5)- 扩展 HTMLParser 对自定义标签的处理能力
- HTML标签的自定义元素
- 谈我的SiteFactory文章发布方式一个小扩展,从模型、标签、模板到自定义插件,基于ashx的
- 【经验分享】自定义表自动加入discuz备份
- 扩展HTMLParser 对自定义标签的处理能力
- JQuery扩展插件Validate—5添加自定义验证方法
- 大恶人吉日嘎拉之走火入魔闭门造车之.NET疯狂架构经验分享系列之(六)Remoting扩展支持
- 扩展 HTMLParser 对自定义标签的处理能力
- Display标签功能扩展--添加列宽调整功能
- 扩展HTMLParser 对自定义标签的处理能力
- 页面新增自定义元素经验
- [轉]经验分享 Excel中自定义函数实例剖析