默认情况下,XMPP在线状态会发布给所有订阅该人的人。是否有可能发送类似iq调用的内容来获取我名单中不存在的id的状态标记?
答案 0 :(得分:6)
如果您只想知道XMPP实体是否已连接,则可以使用XMPP Ping(XEP-0199)。下面给出了两个xmpp用户“user1”和“user2”的示例。他们不在彼此的烘焙名单上。我在下面的例子中使用了ejabberd和PSI。
<强> IQ:强>
<iq from='user2@pdevdv3os18f.corp.intuit.net'
to='user1@pdevdv3os18f.corp.intuit.net/BANL07R9AME9X' type='get' id='e2e1'>
<ping xmlns='urn:xmpp:ping'/>
</iq>
<强>响应:强>
<iq from="user1@pdevdv3os18f.corp.intuit.net/BANL07R9AME9X" type="result" xml:lang="en" to="user2@pdevdv3os18f.corp.intuit.net/BANL07R9AME9X" id="e2e1" />
<强> IQ:强>
<iq from='user2@pdevdv3os18f.corp.intuit.net'
to='user1@pdevdv3os18f.corp.intuit.net/BANL07R9AME9X' type='get' id='e2e1'>
<ping xmlns='urn:xmpp:ping'/>
</iq>
<强>响应:强>
<iq from="user1@pdevdv3os18f.corp.intuit.net/BANL07R9AME9X" type="error" xml:lang="en" to="user2@pdevdv3os18f.corp.intuit.net/BANL07R9AME9X" id="e2e1" >
<ping xmlns="urn:xmpp:ping"/>
<error type="cancel" code="503" >
<service-unavailable xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/>
</error>
</iq>
答案 1 :(得分:4)
我不这么认为。请查看rfc,第5.1.3节。具体来说,它说:
从用户收到在线探测后,联系人的服务器
我们应该回复如下:如果用户不在订阅的联系人名单中 “From”,“From + Pending Out”或“Both”的状态(如定义的那样) 在订阅状态(第9节)下,联系人的服务器 必须 返回“错误”类型的存在节以响应 存在探测。
您可能会在回复中收到错误或被禁止。
答案 2 :(得分:1)
rfc表示不允许您接收名单上不存在的身份证明。
但我相信可以通过修改服务器来查询状态(如果有一个允许的xmpp服务器)
答案 3 :(得分:0)
没有