我偶然发现了一个聊天软件。
由于我以前没有使用过Ejabberd服务器,所以我遇到了一个获取花名册的问题。
我每次都将列表作为nil,即使联系人列表在服务器上可用。
下面是我用来获取花名册的方法。
下面是我获取联系人的方法:
在这段代码中,我每次得到的查询列表都是nil
-(void)fetchContacts {
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 addChild:query];
[self.xmppStream sendElement:iq];
}
Did received IQ method:
- (BOOL)xmppStream:(XMPPStream *)sender didReceiveIQ:(XMPPIQ *)iq{
NSXMLElement *query = [iq elementForName: @"query" xmlns: @"jabber:iq:roster"];
if (query) {
NSArray *item = [query elementsForName: @"item"];
NSMutableArray *arr = [[NSMutableArray alloc] init];
for (int i=0; i<[item count]; i++) {
NSString *jid=[[[item objectAtIndex:i] attributeForName:@"jid"] stringValue];
[arr addObject:jid];
}
[userDefault setValue:arr forKey:@"contacts"];
[userDefault synchronize];
[[NSNotificationCenter defaultCenter] postNotificationName:@"ContactsData" object:nil];
}
return YES;
}
我已经尝试了很多解决方案,但没有一个对我有效。
谢谢!
使用网络流量来捕获客户端发送给ejabberd的内容。
然后安装一个知名的XMPP客户端,例如Gajim, Psi, Tkabber…然后使用该客户端执行相同的操作,并再次捕获客户端发送的XML。
将此与客户端发送的XML进行比较,希望您能看到一些相关的更改(以及其他不相关的差异)。