从联系人列表中获取用户的状态

时间:2012-09-06 14:34:11

标签: xmpp

我需要从联系人列表中获取用户的状态。 我使用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>

但没有状态。

如何获取用户状态?

1 个答案:

答案 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>