【问题标题】:iPhone :: xmppframework - Retrieve Complete RosteriPhone :: xmppframework - 检索完整名册
【发布时间】:2011-11-21 12:32:18
【问题描述】:

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

基于一些例子,我是这样做的: - 一旦我连接并通过身份验证,在xmppStreamDidAuthenticate 代表中,我将发送我的出席信息。 - 我将在didReceivePresencedelegate 中收到我的名册。

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

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

【问题讨论】:

  • 我最终创建了一个单独的 Web 服务方法来检索我的完整名单。如果有人建议如何在没有 web 服务的情况下直接使用 xmppframework 实现这一点,我将不胜感激。 :)

标签: iphone xmpp xmppframework


【解决方案1】:

要直接在 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];

【讨论】:

  • 是否有可能为任何特定的名册?我想要名册的状态(可用/离开/离线)
【解决方案2】:

看看这是否适合你。 How to list only online users on facebook with xmpp framework 经过一些修改,这篇文章中提到的代码应该适合你。

【讨论】:

    猜你喜欢
    • 2020-11-11
    • 1970-01-01
    • 2014-04-14
    • 1970-01-01
    • 2014-04-02
    • 2011-09-18
    • 2018-05-10
    • 2012-12-19
    • 1970-01-01
    相关资源
    最近更新 更多