除了上面的答案之外,还有一个<show>
元素应该与<status>
元素一起使用。通过使用这两个元素,您可以为每个可用性状态自定义用户的存在。
默认值:可用/离线
通过使用<show>
:有空/忙碌/离开/延长离开/离线
通过使用<show>
:<status>
“免费聊天”/“努力工作”/“开会”/“出去吃午饭”。
如果您通过以下方法使用 Openfire:在 User Sessions > Presence 列中,您将看到:
每个用户的不同颜色的图标(例如绿色表示可用,红色表示忙碌等)
图标旁边的描述性文字(例如“在会议中”)
存在子元素
有 3 个元素可以改变 XMPP 中的存在类型。
<show/>
<status/>
<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):即时消息传递和存在