我使用xmppframework库在iPhone上实现我的xmpp聊天模块已经进行了一半,这里有一个小问题。
基于一些例子,我是这样做的:-一旦我连接并验证了,在xmppStreamDidAuthenticate委托中,我将发送我的状态。-我将在didReceivePresence代表中收到我的花名册。
问题是,我现在只收到所有在线花名册的存在,而不是离线花名册。如何才能要求提供我的花名册的完整列表?
我发现在XMPPRoster类中有一个fetchRoster方法,但我不知道应该如何调用它,以及接收传入花名册信息的委托应该是什么。
发布于 2013-05-21 18:46:22
要在xmppframework中直接检索花名册,请尝试执行以下操作:
- (BOOL)xmppStream:(XMPPStream *)sender didReceiveIQ:(XMPPIQ *)iq
{
NSXMLElement *queryElement = [iq elementForName: @"query" xmlns: @"jabber:iq:roster"];
if (queryElement) {
NSArray *itemElements = [queryElement elementsForName: @"item"];
[ArrayUsers removeAllObjects];
for (int i=0; i<[itemElements count]; i++) {
NSString *jid=[[[itemElements objectAtIndex:i] attributeForName:@"jid"] stringValue];
[ArrayUsers addObject:jid];
}
}
return NO;
}您将在AppDelegate方法中找到didReceiveIQ。通过这种方式,您将在每次登录时拥有一个完整的花名册列表。接下来,如果您出于某种原因想要刷新此列表,您可以尝试以下操作:
NSXMLElement *queryElement = [NSXMLElement elementWithName: @"query" xmlns: @"jabber:iq:roster"];
NSXMLElement *iqStanza = [NSXMLElement elementWithName: @"iq"];
[iqStanza addAttributeWithName: @"type" stringValue: @"get"];
[iqStanza addChild: queryElement];
[xmppStream sendElement: iqStanza];发布于 2011-10-20 14:32:25
看看这对你是否有效。How to list only online users on facebook with xmpp framework经过一些修改,这篇文章中提到的代码应该可以为你工作。
https://stackoverflow.com/questions/7493006
复制相似问题