XMPP系列(七)---获取群组列表
来源:互联网 发布:全球电视台直播软件 编辑:程序博客网 时间:2024/06/18 06:11
上一篇介绍了如何创建群组,这一篇就介绍一下,如何获取自己的群组列表。
在上一篇有提到,如果我们创建的群组是公共的群组,那么获取自己的群组列表时,会获取到自己的群组列表和那些公共的群组。而实际做社交的应用,一般都不会有公共的群组,这样就可以保证获取到的群组都是自己加入的群组啦。
怎么获取群组列表呢?
首先,依然是向openfire 服务器发送一个IQ消息。
关于服务的结构为什么是这样(也就是to的值),在上一篇文章中有详细的讲解。
这是示例代码:
- (void)loadRooms{ NSXMLElement *queryElement= [NSXMLElement elementWithName:@"query" xmlns:@"http://jabber.org/protocol/disco#items"]; NSXMLElement *iqElement = [NSXMLElement elementWithName:@"iq"]; [iqElement addAttributeWithName:@"type" stringValue:@"get"]; [iqElement addAttributeWithName:@"from" stringValue:[JKXMPPTool sharedInstance].xmppStream.myJID.bare]; NSString *service = [NSString stringWithFormat:@"%@.%@",kXMPP_SUBDOMAIN,kXMPP_DOMAIN]; [iqElement addAttributeWithName:@"to" stringValue:service]; [iqElement addAttributeWithName:@"id" stringValue:@"getMyRooms"]; [iqElement addChild:queryElement]; [[JKXMPPTool sharedInstance].xmppStream sendElement:iqElement];}
上面,这里设置这个IQ消息的id 为getMyRooms
,是为了后面获取返回结果时判断,当然也可以设置别的值。
然后,在XMPPStream 的代理方法中就可以获取到Openfire 返回的群组列表数据啦。结果会通过- (BOOL)xmppStream:(XMPPStream *)sender didReceiveIQ:(XMPPIQ *)iq
返回,但是该代理方法会经常被调用,因此我们需要判断哪些消息是这个IQ请求的结果。
先看获取群组列表,返回的IQ结果:
<iq xmlns="jabber:client" type="result" id="getMyRooms" from="group.im.joker.cn" to="1021@im.joker.cn/iOS"> <query xmlns="http://jabber.org/protocol/disco#items"> <item jid="20160907135015@group.im.joker.cn" name="20160907135015"/> <item jid="20160907150320@group.im.joker.cn" name="20160907150320"/> </query></iq>
看到这个结果,我们可以看出,判断是否是获取群组的结果,可以利用id 来判断,也可以利用query 的xmlns 的值来判断。
下面是我的处理示例代码:
- (BOOL)xmppStream:(XMPPStream *)sender didReceiveIQ:(XMPPIQ *)iq{ NSLog(@"iq:%@",iq); // 以下两个判断其实只需要有一个就够了 // 这是判断方式1 NSString *elementID = iq.elementID; if (![elementID isEqualToString:@"getMyRooms"]) { return YES; } // 这是判断方式2 NSArray *results = [iq elementsForXmlns:@"http://jabber.org/protocol/disco#items"]; if (results.count < 1) { return YES; } NSMutableArray *array = [NSMutableArray array]; for (DDXMLElement *element in iq.children) { if ([element.name isEqualToString:@"query"]) { for (DDXMLElement *item in element.children) { if ([item.name isEqualToString:@"item"]) { [array addObject:item]; //array 就是你的群列表 } } } } [[NSNotificationCenter defaultCenter] postNotificationName:kXMPP_GET_GROUPS object:array]; return YES;}
然后就可以利用tableView 来展示群组列表啦。
Demo地址:ChatDemo
0 0
- XMPP系列(七)---获取群组列表
- XMPP系列(三)---获取好友列表、添加好友
- XMPP系列(六)---创建群组
- XMPP之群组获取
- xmpp判断群列表
- ios xmpp研究探索:获取好友列表
- ios xmpp研究探索:获取消息列表
- XMPP开发之获取好友列表
- XMPP协议获取花名册(好友列表)
- IOS使用XMPP最新教程(三)获取好友列表 (通过获取好友状态)
- xmpp-iOS-获取好友列表、聊天信息列表、聊天
- IOS使用XMPP最新教程(四)获取好友列表 (通过花名册)
- Android基于XMPP Smack Openfire开发IM(4)获取好友列表
- android中用XMPP Asmack获取用户朋友的presence(名单列表)的实现
- XMPP系列(五)---文件传输
- XMPP系列(四)---发送和接收文字消息,获取历史消息功能
- XMPP-好友列表模块的注册和好友列表获取,添加,删除
- XMPP系列(一):OpenFire环境搭建
- oracle 数据库的 预定义角色 有哪些?
- 64. Minimum Path Sum
- Jquery属性readonly和disabled区别
- ffmpeg 源代码简单分析 : av_register_all()
- Windows Update 更新问题
- XMPP系列(七)---获取群组列表
- 五十道编程小题目 --- 28 八大排序算法 java 之 07归并排序
- iOS开发中按钮多次响应问题解决方案
- 基础备忘:static关键字总结
- java中的方法
- Android Webview获取网页标题和文本内容
- cocoa pods的安装与我遇到的问题
- ora-01513
- Glide 源码分析