XMPP之添加好友请求报文

Posted 丨丿丶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XMPP之添加好友请求报文相关的知识,希望对你有一定的参考价值。

Presence.Type有七种
  available (默认)用户空闲状态,即在线
  unavailable 用户没空看消息,即离线
  subscribe 请求订阅别人,即请求加对方为好友
  subscribed  统一被别人订阅,也就是确认被对方加为好友
  unsubscribe  他取消订阅别人,请求删除某好友
  unsubscribed  拒绝被别人订阅,即拒绝对方的添加请求
  error -- 当前状态packet有错误


好友双方对彼此的状态,有网友总结如下:
  none:是用户和自己roster中的好友彼此不关心,既不想把自己的presence状态告诉对方,也不愿意收到对方presence更新消息
  to:知道别人的出席消息,而别人不知道自己的出席信息
  from:别人知道自己的出席信息, 但自己不知道别人的出席信息
  Both:即收取对方状态更新,又将自己的更新告知对方
  Remove :将对方干掉,不再关心他的任何信息。

zxl1添加zxl2,加到Friends组,备注zxl2,C:client S:server
zxl1向zxl2发送添加请求Presence.Type.subscribe 订阅关系:none
zxl1->C:
    <iq id="zR0f2-29" type="set">
        <query xmlns="jabber:iq:roster">
            <item jid="[email protected]" name="zxl2">
                <group>Friends</group>
            </item>
        </query>
    </iq>
 S:
    <iq type="set" id="632-3020" to="[email protected]/Spark">
        <query xmlns="jabber:iq:roster">
            <item jid="[email protected]" name="zxl2" subscription="none">
                <group>Friends</group>
            </item>
        </query>
    </iq>
 
 zxl1->C:TCP
 S:<iq type="result" id="zR0f2-29" to="[email protected]/Spark"/>
 zxl1-> C:
        <presence id="zR0f2-30" to="[email protected]" type="subscribe">
            <x xmlns="vcard-temp:x:update">
                <photo>ba8c94a333af7a23d9e44c41b2aa22dd2224dadc</photo>
            </x>
            <x xmlns="jabber:x:avatar">
                <hash>ba8c94a333af7a23d9e44c41b2aa22dd2224dadc</hash>
            </x>
        </presence> 
 S:
    <iq type="set" id="331-3022" to="[email protected]/Spark">
        <query xmlns="jabber:iq:roster">
            <item jid="[email protected]" name="zxl2" ask="subscribe" subscription="none">
                <group>Friends</group>
            </item>
        </query>
    </iq> 
zxl1->C:TCP
之后就分为3个场景
场景一:zxl2收到zxl1的请求,拒绝zxl1 订阅关系:none
 S:
 <presence id="SIuGQ-28" to="[email protected]" type="unsubscribe">
    <x xmlns="vcard-temp:x:update">
        <photo>a76bac95d8fe05fb3df6142bc5cac14ce660345d</photo>
    </x>
    <x xmlns="jabber:x:avatar">
        <hash>a76bac95d8fe05fb3df6142bc5cac14ce660345d</hash>
    </x>
 </presence>
场景二:zxl2收到zxl1的请求,zxl2答应,zxl1拒绝 
1.zxl2收到zxl1的请求,zxl2答应 订阅关系:zxl1:from zxl2:to 
 C:    <iq id="A7O3Y-27" type="get">
        <ping xmlns=‘urn:xmpp:ping‘ />
    </iq>
 S:    <iq type="result" id="A7O3Y-27" to="[email protected]/Spark"/>
 C:    TCP
 C:    <iq id="A7O3Y-28" type="set">
        <query xmlns="jabber:iq:roster">
            <item jid="[email protected]" name="">
                <group>Friends</group>
            </item>
        </query>
    </iq>
 S:    <iq type="set" id="971-3086" to="[email protected]/Spark">
        <query xmlns="jabber:iq:roster">
            <item jid="[email protected]" name="" subscription="from">
                <group>Friends</group>
            </item>
        </query>
    </iq>
 C:    TCP
 S:    <iq type="result" id="A7O3Y-28" to="[email protected]/Spark"/>
 C:    <presence id="A7O3Y-29" to="[email protected]" type="subscribe">
        <x xmlns="vcard-temp:x:update">
            <photo>a76bac95d8fe05fb3df6142bc5cac14ce660345d</photo>
        </x>
        <x xmlns="jabber:x:avatar">
            <hash>a76bac95d8fe05fb3df6142bc5cac14ce660345d</hash>
        </x>
    </presence>
 S:    <iq type="set" id="505-3088" to="[email protected]/Spark">
        <query xmlns="jabber:iq:roster">
            <item jid="[email protected]" name="" ask="subscribe" subscription="from">
                <group>Friends</group>
            </item>
        </query>
    </iq>
 C:    <presence id="A7O3Y-30" to="[email protected]" type="subscribed">
        <x xmlns="vcard-temp:x:update">
            <photo>a76bac95d8fe05fb3df6142bc5cac14ce660345d</photo>
        </x>
        <x xmlns="jabber:x:avatar">
            <hash>a76bac95d8fe05fb3df6142bc5cac14ce660345d</hash>
        </x>
    </presence>
 S:    TCP
2.zxl1添加zxl2,zxl2答应,zxl1拒绝 zxl1:to zxl2:from
 C:     <presence id="RIdep-27" to="[email protected]" type="unsubscribe">
        <x xmlns="vcard-temp:x:update">
            <photo>ba8c94a333af7a23d9e44c41b2aa22dd2224dadc</photo>
        </x>
        <x xmlns="jabber:x:avatar">
            <hash>ba8c94a333af7a23d9e44c41b2aa22dd2224dadc</hash>
        </x>
    </presence>
 S:    <iq type="set" id="278-3097" to="[email protected]/Spark">
        <query xmlns="jabber:iq:roster">
            <item jid="[email protected]" name="zxl2" ask="unsubscribe" subscription="from">
                <group>Friends</group>
            </item>
        </query>
    </iq>
 C:    TCP
 C:    <iq id="RIdep-28" type="get"><ping xmlns=‘urn:xmpp:ping‘ /></iq>
 S:    <iq type="result" id="RIdep-28" to="[email protected]/Spark"/>
 C:    TCP
 C:    <iq id="RIdep-29" type="get"><ping xmlns=‘urn:xmpp:ping‘ /></iq>
 S:    <iq type="result" id="RIdep-29" to="[email protected]/Spark"/>
 C:    TCP
 C:    <iq id="RIdep-30" type="get"><ping xmlns=‘urn:xmpp:ping‘ /></iq>
 S:    <iq type="result" id="RIdep-30" to="[email protected]/Spark"/>
 C:    TCP

场景三:zxl1添加zxl2,zxl2答应,zxl1答应,两者关系both
zxl2收到zxl1的请求,zxl2答应 订阅关系:zxl1:from zxl2:to
    同场景二的第1步
zxl1添加zxl2,zxl2答应,zxl1答应 ,订阅关系:both
 C:    <presence id="gGoyI-33" to="[email protected]" type="subscribed">
        <x xmlns="vcard-temp:x:update">
            <photo>d502a48d3e02f421269f9b1393c1f0cd825a8e4f</photo>
        </x>
        <x xmlns="jabber:x:avatar">
            <hash>d502a48d3e02f421269f9b1393c1f0cd825a8e4f</hash>
        </x>
    </presence>
 S:    <iq type="set" id="456-431" to="[email protected]/Spark">
        <query xmlns="jabber:iq:roster">
            <item jid="[email protected]" name="zxl2" subscription="both">
                <group>Friends</group>
            </item>
        </query>
    </iq>

 

以上是关于XMPP之添加好友请求报文的主要内容,如果未能解决你的问题,请参考以下文章

如何在 XMPP 中接受好友请求?

iOS XMPP 从不接收任何好友/名册请求

iphone xmpp 相关!

XMPP框架下微信项目总结刷新好友列表(删除,添加好友)

XMPP添加删除好友

XMPP之登录报文