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)
| 归档时间: |
|
| 查看次数: |
3980 次 |
| 最近记录: |