Xmpp чат невидимое присутствие

Я создаю бота, который отслеживает присутствие друзей, но не должен быть видимым. Я попытался установить присутствие, используя приоритет, показ, тип со всеми известными значениями, но безуспешно. Можно ли быть невидимым и просто получать уведомления о присутствии?

Спасибо!


person Cristian Civera    schedule 13.04.2012    source источник


Ответы (4)


См. XEP-0126: невидимость, раздел 3.1:

<iq from='[email protected]/shire' type='set' id='inv1'>
  <query xmlns='jabber:iq:privacy'>
    <list name='invisible'>
      <item action='deny' order='1'>
        <presence-out/>
      </item>
    </list>
  </query>
</iq>
person Joe Hildebrand    schedule 14.04.2012
comment
Ах, здорово, я даже не знал, что такое существует! - person ggozad; 14.04.2012
comment
К сожалению, я думаю, он не поддерживается ‹код ошибки = 503 type = cancel› ‹service-unavailable xmlns = urn: ietf: params: xml: ns: xmpp-stanzas /› ‹/error› - person Cristian Civera; 14.04.2012
comment
Тогда вам в значительной степени не повезло. - person Joe Hildebrand; 18.04.2012

Взгляните на rfc. Присутствие имеет статус подписки. Если ваш бот подписан на получение информации о присутствии от ваших пользователей, а ваши пользователи - нет, они не будут получать уведомления о присутствии бота.

Другими словами, ваш бот должен отправить:

<presence to="[email protected]" type="subscribe" />

с последующей авторизацией пользователя,

<presence to="[email protected]" type="subscribed" />

Теперь бот будет получать информацию о присутствии пользователя, а не наоборот.

person ggozad    schedule 13.04.2012
comment
Я провел несколько экспериментов с подписками, но похоже, что facebook не поддерживает это, потому что мои подписки игнорируются, и я никогда не получаю запрос на подписку - person Cristian Civera; 14.04.2012
comment
Боюсь, что ни мое решение, ни решение Джо не будут работать с facebook, если они его не поддерживают. - person ggozad; 14.04.2012

Чтобы установить статус для того, чтобы стать невидимым, вы должны отправить присутствие с типом «невидимый».

<presence type="invisible"/>

А вот код (в ios):

XMPPPresence *presence = [XMPPPresence presenceWithType:@"invisible"];
[[self xmppStream] sendElement:presence];

Я использую этот код, чтобы установить свой статус как «невидимый». Для получения дополнительной информации прочтите документацию на http://xmpp.org/extensions/xep-0018.html#sect-id86210

person tesmojones    schedule 08.11.2012
comment
Имейте в виду, что XEP-0018 был отклонен Советом XMPP и не должен применяться в общих клиентах XMPP (xmpp.org/extensions/xep-0018.html). Списки конфиденциальности через XEP-0126 - рекомендуемый метод, предложенный Джо Хильдебрандом. - person Jeff Hay; 15.02.2013

Последнее, что я знал из Facebook, невозможно реализовать невидимость с помощью команд XMPP: https://developers.facebook.com/bugs/315067461919373. См. Также https://developers.facebook.com/docs/chat/ в разделе Ограничения.

person Jeff Hay    schedule 15.02.2013