1

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

根据一些示例,我是这样做的: - 一旦我连接并通过身份验证,在xmppStreamDidAuthenticate委托中,我将发送我的出席信息。- 我将在didReceivePresence代表中收到我的名册。

问题是我现在只收到来自我所有在线花名册的存在,而不是离线花名册。怎么可能要求我的花名册的完整列表?

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

4

2 回答 2

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];
于 2013-05-21T10:46:22.067 回答
1

看看这是否适合你。如何使用 xmpp 框架仅列出 facebook 上的在线用户经过一些修改,本文中提到的代码应该适合您。

于 2011-10-20T06:32:25.047 回答