在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 服务器中的聊天过程