在openfire中获取xmpp ios中的所有注册用户

Posted

技术标签:

【中文标题】在openfire中获取xmpp ios中的所有注册用户【英文标题】:fetch all registered users in xmpp ios in openfire 【发布时间】:2016-02-01 07:00:56 【问题描述】:

我在获取 XMPP ios 项目中的所有注册用户时遇到问题。 我正在使用 openfire。

以下是我正在使用的代码,但它总是在数组列表中给我零。:-

- (BOOL)xmppStream:(XMPPStream *)sender didReceiveIQ:(XMPPIQ *)iq

    NSXMLElement *queryElement = [iq elementForName: @"query" xmlns: @"jabber:iq:roster"];
    if (queryElement)
    
        NSArray *itemElements = [queryElement elementsForName: @"item"];
        NSMutableArray *mArray = [[NSMutableArray alloc] init];
        for (int i=0; i<[itemElements count]; i++)
        
            NSString *jid2=[[[itemElements objectAtIndex:i] attributeForName:@"jid"] stringValue];
            [mArray addObject:jid2];
        
        NSLog(@"didReceiveIQ Array======%@",mArray);
        [[NSNotificationCenter defaultCenter] postNotificationName:@"FriendRequestSend" object:nil];
    
    return NO;

虽然我可以在浏览器中看到 3 个用户。 注意:我看过帖子iOS XMPP framework get all registered users 但它不起作用。

请帮助我并告诉我代码中有错误

【问题讨论】:

您在上面发布的代码获取已添加到您名册中的联系人,而不是所有注册用户。您链接到的问题询问如何使用 ejabberd 执行此操作。使用 Openfire 的方法可能有所不同。 @legoscia 感谢您的回复。你能指导我用openfire实现这个的方法吗? 【参考方案1】:

如果您能够在 Openfire 中进行更改,您可以在管理应用程序中开发一个 servlet(http 服务),它将简单地从 ofUser 表中返回所有用户。 或者自定义数据包,如果你想使用 XMPP。

【讨论】:

【参考方案2】:

我正在努力让所有注册用户从 openfire 进入我的应用程序。 在尝试了很多之后,我得到了一个让所有注册用户的解决方案...... 这是代码:

- (void)getAllRegisteredUsers 

    NSError *error = [[NSError alloc] init];
    NSXMLElement *query = [[NSXMLElement alloc] initWithXMLString:@"<query xmlns='jabber:iq:roster'/>" error:&error];
    XMPPIQ *iq = [DDXMLElement elementWithName:@"iq"];
    [iq addAttributeWithName:@"type" stringValue:@"get"];
    [iq addAttributeWithName:@"none" stringValue:@"ANY_ID_NAME"];
    [iq addAttributeWithName:@"both" stringValue:@"ANY_ID_NAME"];
    [iq addChild:query];
    [xmppStream sendElement:iq];


- (BOOL)xmppStream:(XMPPStream *)sender didReceiveIQ:(XMPPIQ *)iq

    NSXMLElement *queryElement = [iq elementForName: @"query" xmlns: @"jabber:iq:roster"];

    if (queryElement) 
        NSArray *itemElements = [queryElement elementsForName: @"item"];
        NSMutableArray *mArray = [[NSMutableArray alloc] init];
        for (int i=0; i<[itemElements count]; i++) 

            NSString *jid=[[[itemElements objectAtIndex:i] attributeForName:@"jid"] stringValue];
            [mArray addObject:jid];
        
        NSLog(@"%@",mArray);
    
    return YES;

这对我有用,希望对其他人也有用... :)

【讨论】:

你在哪里打电话给getAllRegisteredUsers 我有一个视图控制器,我在其中显示所有用户的列表。我在其 viewDidLoad() 方法中调用“getAllRegisteredUsers”。

以上是关于在openfire中获取xmpp ios中的所有注册用户的主要内容,如果未能解决你的问题,请参考以下文章

xmpp ios:如何从 openfire 服务器检索所有注册用户

使用 Openfire 中的用户服务通过 iOS 的 xmpp 框架注册新用户

如何同步xmpp服务器openfire用户和iOS APP用户

使用 Android 应用程序在 XMPP Openfire 服务器中的聊天过程

从 ios 和 android 端连接到 xmpp 时获取所有组消息

XMPP iOS:无法连接 openfire 服务器