我需要从联系人列表中获取用户的状态。 我使用openfire服务器。 在服务器上我发送以下xml
<iq type="get" from="dezhavi@domen.com" id="3"><query xmlns="jabber:iq:roster"/></iq>
从服务器获取
<iq type="result" id="3" to="dezhavi@domen.com/webi"><query xmlns="jabber:iq:roster"><item jid="user1@im.onmetapoint.com" name="user1" subscription="both"><group>Friends</group></item></query></iq>
但没有状态。
如何获取用户状态?
答案 0 :(得分:2)
要获得状态,您应该使用状态Stanza。
存在背后的信任或访问决策在IM系统中自然发生,因为 您批准的人会自动添加到您的联系人列表中(称为名单中的名单) XMPP),通常是任何即时消息或实时的“home base” 通讯申请。
此外,在线状态访问通常是双向的:您允许联系人查看您的 在场,您的联系人可以让您看到他的存在。这发生在一个 订阅“握手”。如果握手成功完成, 结果是双方之间的双向在线订阅。 (XMPP服务器还将联系人添加到用户的名单中,并将用户添加到联系人的名单中 在此过程中的名单,加上管理订阅状态的状态机,请参阅[RFC 3921]以获取完整描述。)
让我们看看订阅握手在实践中是如何运作的。 要请求某人出席,请向他发送订阅请求,即: 订阅类型的节:
<presence from="alice@wonderland.lit" to="sister@realworld.lit" type="subscribe"/>
当预期收件人收到您的在线订阅请求时,他可以 批准它(通过订阅类型的节)或拒绝它(通过一个 未订阅类型的节:)
<presence from="sister@realworld.lit" to="alice@wonderland.lit" type="subscribed"/>
正如您可能想象的那样,创建双向在线订阅的人是谁 批准原始订阅请求需要发送他的订阅请求 自己的:
<presence from="sister@realworld.lit" to="alice@wonderland.lit" type="subscribe"/>
通常,您的客户端此时会自动回复,而不是要求您手动回复 批准反向请求:
<presence from="alice@wonderland.lit" to="sister@realworld.lit" type="subscribed"/>
一旦您订阅了其他人,您将自动收到通知 当对方的网络或通信可用性发生变化时。这个 在线状态通知采用 节 的形式,没有类型属性(即隐式指示可用性):
<presence from="alice@wonderland.lit/rabbithole" to="sister@realworld.lit">
<show>xa</show>
<status>down the rabbit hole!</status>
</presence>