我们期望传递自定义的xml数据到XMPP服务器,这时候需要做些什么?应该做怎样的处理?不着急,我们一步一步看
(——个人理解和翻译,个人英语能力有限,有错误地方请指正,且有些疑问不懂的地方,会特定注明,共同进步,谢谢O(∩_∩)O~)
首先让我们了解下
PacketExtension
Packet是XMPP的数据包基本类
而packetExtension呢?类注解如下
A packet extension is an XML subdocument with a root element name and namespace. Packet extensionsare used to provide extended functionality beyond what is in the base XMPPspecification. Examples of packetextensions include message events, message properties, and extra presence data.IQ packets cannot contain packet extensions
(packet extension是有根元素和命名空间的子文档。packetextension用来提供扩展基于xmpp规范功能。例如,packet extension包括消息事件,消息属性和额外的状态数据。IQpackets不能包括packet extension(why))
IQ
类注解如下
IQ packets are used to get and set information onthe server, including authentication, roster operations, and creating accounts.Each IQ packet has a specific type that indicates what type of actions beingtaken: "get", "set", "result", or"error".
(iq用来获取或者设置服务器的信息,包括协议,花名册,设置,创建账户等。每个iq都有指定的动作类型,比如“get”,”set”,”result”,”error”)
toXML() 返回作为packet的xml
<iq type="result"id="N369C-0" to="192.168.5.182/d537db4b"></iq>
getChildElementXML() 返回IQ数据包的xml子元素节点
<iq type="result"id="N369C-0" to="192.168.5.182/d537db4b">
<bindxmlns="urn:ietf:params:xml:ns:xmpp-bind">
<jid>test2@192.168.5.182/Smack</jid>
</bind>
</iq>
IQ Provider
类注解如下
An interface for parsing custom IQ packets. EachIQProvider must be registered with the ProviderManager class for it to be used.Every implementation of this interface must have a public, no-argumentconstructor.
(解析IQ的接口。如果要使用IQProvider,则必须通过ProviderManager注册。继承该接口必须有个公共的没有参数的结构方法)
让我们来看看IQ Provider的继承者们吧
public class PingProvider implements IQProvider {
public IQ parseIQ(XmlPullParser parser) throws Exception {
// No need to use the ping constructor with arguments. IQ will already
// have filled out all relevant fields ('from', 'to', 'id').
return new Ping();
}
}
注意到一点PingProvi