我正在使用xmppframework库在iPhone上实现我的xmpp聊天模块的一半,这里有一个小问题。
根据一些例子,我这样做了:
- 一旦我连接并进行身份验证,我将在xmppStreamDidAuthenticate
代表中发送信息。
- 我将在didReceivePresence
代表中收到我的名单。
问题在于,我现在只接收所有在线名单,而不是离线名单。怎么可以要求我的名单的完整清单?
我发现fetchRoster
类中有一个XMPPRoster
方法,但我不知道应该如何调用它,以及接收传入的名册信息的委托应该是什么。
答案 0 :(得分:7)
要直接在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];
答案 1 :(得分:1)
看看这是否适合您。 How to list only online users on facebook with xmpp framework经过一些修改后,本文中提到的代码应该适合您。