我正在使用robbiehanson/XMPPFramework进行我的当前项目。 如何使用XMPPFramework获取消息输入状态?现在有XEP-184协议,但这些已经过时了。 需要在iOS中获取撰写状态的帮助。 谢谢, Bhat
我正在使用robbiehanson/XMPPFramework进行我的当前项目。 如何使用XMPPFramework获取消息输入状态?现在有XEP-184协议,但这些已经过时了。 需要在iOS中获取撰写状态的帮助。 谢谢, Bhat
首先要导入:
#import "XMPPMessage+XEP_0085.h"
然后根据您的目的添加以下方法。
组合.....
- (void)sendComposingChatToUser:(XMPPJID*)jid {
NSXMLElement *message = [NSXMLElement elementWithName:@"message"];
[message addAttributeWithName:@"type" stringValue:@"chat"];
[message addAttributeWithName:@"to" stringValue:[jid full]];
XMPPMessage *xmppMessage = [XMPPMessage messageFromElement:message];
[xmppMessage addComposingChatState];
[xmppStream sendElement:message];
}
Active.....
- (void)sendActiveChatToUser:(XMPPJID*)jid {
NSXMLElement *message = [NSXMLElement elementWithName:@"message"];
[message addAttributeWithName:@"type" stringValue:@"chat"];
[message addAttributeWithName:@"to" stringValue:[jid full]];
XMPPMessage *xmppMessage = [XMPPMessage messageFromElement:message];
[xmppMessage addActiveChatState];
[xmppStream sendElement:message];
}
未激活...
- (void)sendInactiveChatToUser:(XMPPJID*)jid {
NSXMLElement *message = [NSXMLElement elementWithName:@"message"];
[message addAttributeWithName:@"type" stringValue:@"chat"];
[message addAttributeWithName:@"to" stringValue:[jid full]];
XMPPMessage *xmppMessage = [XMPPMessage messageFromElement:message];
[xmppMessage addInactiveChatState];
[xmppStream sendElement:message];
}
- (void)sendExitChatToUser:(XMPPJID*)jid {
NSXMLElement *message = [NSXMLElement elementWithName:@"message"];
[message addAttributeWithName:@"type" stringValue:@"chat"];
[message addAttributeWithName:@"to" stringValue:[jid full]];
XMPPMessage *xmppMessage = [XMPPMessage messageFromElement:message];
[xmppMessage addGoneChatState];
[xmppStream sendElement:xmppMessage];
}
暂停中...
- (void)sendPausedChatToUser:(XMPPJID*)jid {
NSXMLElement *message = [NSXMLElement elementWithName:@"message"];
[message addAttributeWithName:@"type" stringValue:@"chat"];
[message addAttributeWithName:@"to" stringValue:[jid full]];
XMPPMessage *xmppMessage = [XMPPMessage messageFromElement:message];
[xmppMessage addPausedChatState];
[xmppStream sendElement:message];
}
接下来,您应该在AppDelegate中的(didReceiveMessage)方法中编写以下代码。
例如:
- (void)xmppStream:(XMPPStream *)sender didReceiveMessage:(XMPPMessage *)message{
if ([message isChatMessageWithBody]){
}
else{
if([message elementForName:@"composing"] != nil){
} else if ([message elementForName:@"paused"] != nil) {
} else if ([message elementForName:@"gone"] || [message elementForName:@"inactive"] ) {
}
}
"正在输入"通知的最常用协议是XEP-0085:聊天状态通知。如在此处详细描述,向联系人发送的第一条消息应包含一个“活动”状态元素(在<body/>
元素旁边):
<active xmlns='http://jabber.org/protocol/chatstates'/>
<composing xmlns='http://jabber.org/protocol/chatstates'/>
<paused xmlns='http://jabber.org/protocol/chatstates'/>
当用户关闭聊天窗口或类似操作时,对话将结束并被标记为“gone”,之前可能是“active”、 “inactive”。