学习Android推送笔记---XMPP基础知识

来源:互联网 发布:歌曲软件下载大全 编辑:程序博客网 时间:2024/06/05 19:01

常用的标签

<stream:stream>...<presence><show/></presence><message to = "foo"><body/></message><iq to = "bar"><querry/></iq>...</stream:stream>

这也是xmpp中最常用的几个标签,这样的一段xml内容在XMPP协议中被叫做XML Stanzas(翻译:一节一节),大概就是表示一段XMPP协议的内容的意思,

XMPP身份标识

XMPP规定,每个客户端是使用JID来作为身份标识的:
[user"@"]domain["/"resource]
为什么要定义成这样的格式,XMPP协议定义的初衷,是为了标准化,两个系统中可能会有重名的用户,所以XMPP规定在用户名后面加上域名,这样就唯一了,resource有可能会在PC端和手机端都登录,所以就加上resource用于区分

XML Stanzas通用属性

  • from
    表示这条数据是谁发送出去的,然后里面填入的值就是JID,不过服务器通常都不会信赖from里指定的是什么,不然就有可能客户端伪造另一个人发送消息,所以我们编程的时候可以加也可以不加,服务器都不会用到的,更多用于我们调试程序的时候
  • to
    表示发送给谁,填入的也是JID,服务器收到了一段Stanzas后会解析,然后转发,如果没有指定JID就不会转发了,就认为事发送给自己的
  • type
    用于指定一段Stanzas的类型,每种不同的Stanzas可选的值也是不同的
  • id
    Stanzas的唯一标识,客户端发送一段Stanzas给服务器,服务器也返回了一段Stanzas给客户端,那么我们怎么区分,这时候就要用ID来哦分别了,发送和响应的时候都会相对应的写个ID

stream结构

Client:

<Stream:stream    to="example.com"    xmlns="jabber:client"    xmlns:stream="123"    version="1.0">

Server

<stream:stream    from="example.com"    id="someid"    xmlns="jabber:client"    xmlns="123"    version="1.0">

这一段表示客户端与服务器之间都支持这个协议

注意到只有开始标签没有结束标签,因为在标签没有结束之前,客户端和服务器之间的会话还是存在的,发送了结束标签之后就表示客户端以服务器之间已经断连了.
Server

</stream:stream>

Client

</stream:stream>

presence结构

presence是用于表示用户的在线状态的,基本结构是    <presence        from="jackson@gmail.com"        to="jimmy@msn.com"        type="unavaiable"/>

表示jackson告诉jimmy”我下线了”
type可选属性:avaiable:我上线了.unavaiable,下线,subscribe订阅某用户的在线状态,subscribed,订阅某用户的在线状态, unsubscribe,取消订阅某用户的在线状态,unsubscribed取消订阅在线状态,error出错

<presence>    <show>away</show>    <status>Having a spot of tea</status></presence>

show可选参数
chat away xa dnd
chat表示在线,away表示短时间不再,xa代表需要长时间离开,dnd表示不想被打扰(do not desturb)

message结构

<messagefrom="jackson@gmail.com"to="jimmy@msn.com"type="chat">    <body>hello!</body></message>

type 可选参数
normal chat groupchat headline error
normal:(默认的)这是一条独立消息
chat:一对一对话
groupchat:群聊对话
headline:用于在客户端上显示的头条
error:错误
- message比较多,推送基本用不到massage Stanzas

IQ结构

<iq    from=""    to=""    id= ""    type="get">    <querry xmlns=""/></iq>

iq和http有点类似,其中querry标签表示制定具体的查询动作,jabber:iq:roster表示获取联系人列表,from和to指定同一个JID
type可指定get,获取数据
type可选参数:get set result error
还有登录,推送消息等都会用到IQ

0 0
原创粉丝点击