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

joe*_*irk 1 iphone xmpp xmppframework

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

根据一些例子,我这​​样做了: - 一旦我连接并验证,在xmppStreamDidAuthenticate代表中,我将发送我的存在.- 我将在didReceivePresence代表中收到我的名单.

问题是我现在只接受我所有在线名单的出席,但不是离线名册.如何申请我的名单的完整清单?

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

小智 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;
}
Run Code Online (Sandbox Code Playgroud)

您将在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];
Run Code Online (Sandbox Code Playgroud)