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

常用的标签

<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结构

<message
from="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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值