iPhone :: xmppframework - 检索完整的名册

时间:2011-09-20 23:31:47

标签: iphone xmpp xmppframework

我正在使用xmppframework库在iPhone上实现我的xmpp聊天模块的一半,这里有一个小问题。

根据一些例子,我这​​样做了: - 一旦我连接并进行身份验证,我将在xmppStreamDidAuthenticate代表中发送信息。 - 我将在didReceivePresence代表中收到我的名单。

问题在于,我现在只接收所有在线名单,而不是离线名单。怎么可以要求我的名单的完整清单?

我发现fetchRoster类中有一个XMPPRoster方法,但我不知道应该如何调用它,以及接收传入的名册信息的委托应该是什么。

2 个答案:

答案 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经过一些修改后,本文中提到的代码应该适合您。