Изменить XMPPPresence на Нет / Занят / Невидимка - PullRequest
3 голосов
/ 08 ноября 2011

Как изменить свое присутствие, чтобы показать dnd / away и т. Д.?

XMPPPresence *presence = [XMPPPresence presenceWithType:status];
[[[self appDelegate] xmppStream] sendElement:presence];

status - это NSString, который я установил для онлайн / недоступен / отсутствует / занят / невидим.

Работает только когда я выхожу в интернет и / или недоступен.

Вот как это выглядит после отправки присутствия в моем xmppStream:

<presence type="away"><x xmlns="vcard-temp:x:update"><photo/></x></presence>

Ответы [ 2 ]

14 голосов
/ 14 февраля 2012

Чтобы изменить статус вашего клиента, вам нужно использовать этот простой код:

XMPPPresence *presence = [XMPPPresence presence];
NSXMLElement *status = [NSXMLElement elementWithName:@"status"];
[status setStringValue:@"online/unavailable/away/busy/invisible"];
[presence addChild:status];
[[self xmppStream] sendElement:presence];

Это просто означает, что ключ к изменению статуса вашего клиента - добавление элемента статуса к вашему присутствию. Обратите внимание, что сервер openfire будет показывать статус «доступно / автономно» только при наведении курсора на значок пользователя в панели администратора. Это не должно вас смущать. Вы можете просто проверить сообщение о присутствии, отправленное вашим клиентом и полученное другими, которое будет отображать состояние, которое вы установили («онлайн / недоступно / нет / занято / невидимо»).

5 голосов
/ 16 июля 2014

Помимо ответа выше, есть также элемент <show>, который следует использовать вместе с элементом <status>. Используя оба элемента, вы можете настроить присутствие пользователя для каждого состояния доступности.

По умолчанию: доступно / автономно

При использовании <show>: доступно / занято / нет / расширенно / нет в сети

Используя <show> с <status>: «Свободно общаться» / «Трудно на работе» / «На собрании» / «Вне обеда».


Если вы используете Openfire с этим методом: в столбце «Сессии пользователя»> «Присутствие» вы увидите:

  1. Различные цветные значки для каждого пользователя (например, зеленый для доступен , красный для занят и т. Д.)

  2. Описательный текст рядом с иконками (например, " На собрании ")


Присутствие дочерних элементов

Существует 3 элемента, которые могут изменять типы присутствия в XMPP.

  1. <show/>
  2. <status/>
  3. <priority/> ( мы исключим это для обсуждения )

Показать

<show> указывает статус доступности пользователя.

Значения элемента должны быть указаны согласно приведенному ниже списку.

"chat" -- user is actively interested in chatting.
"dnd"  -- user is busy (dnd a.k.a 'Do Not Disturb').
"away" -- user is temporarily away.
"xa"   -- user is away for an extended period (xa a.k.a. 'eXtended Away').

Если этот элемент не предоставлен, предполагается, что пользователь находится только в сети и доступен.

Статус

<status> описывает статус доступности пользователя. Обычно используется вместе с элементом <show> для подробного описания состояния доступности.

Значения элемента могут иметь любой текст описания. Например:

"Available to chat" -- can be used for "chat"
"Busy at work"      -- can be used for "dnd"
"In a meeting"      -- can be used for "away"
"On a vacation"     -- can be used for "xa"

Использование в Objective-C

Вот как вы должны применять вышеуказанную концепцию в коде.

// Initialize variables
XMPPPresence *presence = [XMPPPresence presence];
NSXMLElement *show = [NSXMLElement elementWithName:@"show"];
NSXMLElement *status = [NSXMLElement elementWithName:@"status"];

// If user is available
[show setStringValue:@"chat"];
[status setStringValue:@"Available to chat"];

// If user is busy
[show setStringValue:@"dnd"];
[status setStringValue:@"Busy at work"];

// If user is away
[show setStringValue:@"away"];
[status setStringValue:@"In a meeting"];

// If user is away for a long period of time
[show setStringValue:@"xa"];
[status setStringValue:@"On a vacation"];

// Add the XML child elements to XMPPPresence
[presence addChild:show];
[presence addChild:status];

// Update new presence to server
[[[self appDelegate] xmppStream] sendElement:presence];

Итак, присутствие вашего настроенного пользователя теперь будет точно отражаться на вашем сервере.

См. Также: Расширяемый протокол обмена сообщениями и присутствия (XMPP): мгновенный обмен сообщениями и присутствие

...