По умолчанию присутствие XMPP публикуется всем, кто подписался на это лицо. Можно ли отправить что-то вроде вызова iq, чтобы получить тег присутствия идентификатора, который не присутствует в моем списке?Запрос на присутствие в XMPP
ответ
Я так не считаю. Ознакомьтесь с разделом 5.1.3 раздела rfc. В частности, он говорит:
После получения присутствия зонда от пользователя, сервер контакта
следует отвечать следующим образом:Если пользователь не находится в реестре контакта с подпиской состояния " From "," From + Pending Out "или" Both "(как определено в разделе« Подписки »(раздел 9)), сервер контакта ДОЛЖЕН вернуть строфу присутствия типа« ошибка »в ответ на датчик присутствия .
В ответ вы, вероятно, получите ошибку или запрещено.
No.
- Присутствие подписался, не запрашивается. Когда вы получите ответ на ваш запрос, информация будет устаревать.
- Наличие личной информации. Вы должны иметь прямое разрешение на просмотр контакта.
rfc говорит, что вам не разрешено получать присутствие с идентификатором, отсутствующим в списке ваших списков.
Но я считаю, что можно запросить присутствие путем модификации сервера (если есть сервер XMPP, который позволяет это)
Если все, что вы хотите знать, подключен ли XMPP объект или нет, вы можете используйте XMPP Ping (XEP-0199). Ниже приведен пример двух пользователей xmpp «user1» и «user2». Они не входят в список реестров друг друга. Я использую ejabberd и PSI для приведенного ниже примера.
- «user2» пингует «user1» (user1 онлайн)
IQ:
<iq from='[email protected]'
to='[email protected]/BANL07R9AME9X' type='get' id='e2e1'>
<ping xmlns='urn:xmpp:ping'/>
</iq>
Ответ:
<iq from="[email protected]/BANL07R9AME9X" type="result" xml:lang="en" to="[email protected]/BANL07R9AME9X" id="e2e1" />
- "user2" pings "user1" (user1 отсутствует.Реакция результатов звона в типе = ошибка)
IQ:
<iq from='[email protected]'
to='[email protected]/BANL07R9AME9X' type='get' id='e2e1'>
<ping xmlns='urn:xmpp:ping'/>
</iq>
Ответ:
<iq from="[email protected]/BANL07R9AME9X" type="error" xml:lang="en" to="[email protected]/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>
Стоит отметить, что это работает только если у вас есть ресурс пользователя2, что в некоторых случаях неизвестно. –