转自:http://www.cnblogs.com/dyingbleed/archive/2013/05/17/3082226.html

好友列表

好友列表,在 XMPP 中被称为 roster,花名册?

获取 roster 需要客户端发送 <iq /> 标签向 XMPP 服务器端查询

一个 IQ 请求:

<iq type="get"

  from="xiaoming@example.com"

  to="example.com"

  id="1234567">

  <query xmlns="jabber:iq:roster"/>

<iq />

type 属性,说明了该 iq 的类型为 get,与 HTTP 类似,向服务器端请求信息

from 属性,消息来源,这里是你的 JID

to 属性,消息目标,这里是服务器域名

id 属性,标记该请求 ID,当服务器处理完毕请求 get 类型的 iq 后,响应的 result 类型 iq 的 ID 与 请求 iq 的 ID 相同

<query xmlns="jabber:iq:roster"/> 子标签,说明了客户端需要查询 roster

- (void)queryRoster {
NSXMLElement *query = [NSXMLElement elementWithName:@"query" xmlns:@"jabber:iq:roster"];
NSXMLElement *iq = [NSXMLElement elementWithName:@"iq"];
XMPPJID *myJID = self.xmppStream.myJID;
[iq addAttributeWithName:@"from" stringValue:myJID.description];
[iq addAttributeWithName:@"to" stringValue:myJID.domain];
[iq addAttributeWithName:@"id" stringValue:[self generateID]];
[iq addAttributeWithName:@"type" stringValue:@"get"];
[iq addChild:query];
[self.xmppStream sendElement:iq];
}

一个 IQ 响应:

<iq type="result"

  id="1234567"

  to="xiaoming@example.com">

  <query xmlns="jabber:iq:roster">

    <item jid="xiaoyan@example.com" name="小燕" />

    <item jid="xiaoqiang@example.com" name="小强"/>

  <query />

<iq />

type 属性,说明了该 iq 的类型为 result,查询的结果

<query xmlns="jabber:iq:roster"/> 标签的子标签 <item />,为查询的子项,即为 roster

item 标签的属性,包含好友的 JID,和其它可选的属性,例如昵称等。

通过实现

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

方法

当接收到 <iq /> 标签的内容时,XMPPFramework 框架回调该方法

- (BOOL)xmppStream:(XMPPStream *)sender didReceiveIQ:(XMPPIQ *)iq {
if ([@"result" isEqualToString:iq.type]) {
NSXMLElement *query = iq.childElement;
if ([@"query" isEqualToString:query.name]) {
NSArray *items = [query children];
for (NSXMLElement *item in items) {
NSString *jid = [item attributeStringValueForName:@"jid"];
XMPPJID *xmppJID = [XMPPJID jidWithString:jid];
[self.roster addObject:xmppJID];
}
}
}
}
Android 开发讨论群:84778336 
iOS 开发讨论群:82873648


本作品采用知识共享署名-非商业性使用 3.0 许可协议进行许可。
转载请署名李震(博客地址:http://www.cnblogs.com/dyingbleed/),且不得用于商业目的。

【iOS XMPP】使用XMPPFramewok(五):好友列表的更多相关文章

  1. iOS实现类似QQ的好友列表,自由展开折叠(在原来TableView的基础上添加一个字典,一个Button)

    //直接代码 只包含 折叠展开字典的处理搭建#import "CFViewController.h" @interface CFViewController ()<UITab ...

  2. iOS UITableView制作类似QQ好友列表视图

                #import <UIKit/UIKit.h> @interface AppDelegate : UIResponder <UIApplicationDele ...

  3. iOS中XMPP简单聊天实现 好友和聊天

    版权声明本文由陈怀哲首发自简书:http://www.jianshu.com/users/9f2e536b78fd/latest_articles;微信公众号:陈怀哲(chenhuaizhe2016) ...

  4. iOS开发UI篇—使用UItableview完成一个简单的QQ好友列表(一)

    iOS开发UI篇—使用UItableview完成一个简单的QQ好友列表(一) 一.项目结构和plist文件 二.实现代码 1.说明: 主控制器直接继承UITableViewController // ...

  5. XMPP通讯开发-仿QQ显示好友列表和用户组

    在 XMPP通讯开发-服务器好友获取以及监听状态变化   中我们获取服务器上的用户好友信息,然后结合XMPP通讯开发-好友获取界面设计    我们将两个合并起来,首先获取用户组,然后把用户组用List ...

  6. UI进阶 即时通讯之XMPP好友列表、添加好友、获取会话内容、简单聊天

    这篇博客的代码是直接在上篇博客的基础上增加的,先给出部分代码,最后会给出能实现简单功能的完整代码. UI进阶 即时通讯之XMPP登录.注册 1.好友列表 初始化好友花名册 #pragma mark - ...

  7. XMPP系列(三)---获取好友列表、添加好友

    1.心跳检测.掉线重连功能 客户端和服务器端都可以设置多久发送一次心跳包,如果对方没有返回正确的pong信息,则会断开连接,而添加掉线重连功能,则会自动进行连接. 如果自己写聊天功能还得自己做心跳检测 ...

  8. XMPP系列(三)---获取好友列表、加入好友

    1.心跳检測.掉线重连功能 client和server端都能够设置多久发送一次心跳包,假设对方没有返回正确的pong信息,则会断开连接,而加入掉线重连功能,则会自己主动进行连接. 假设自己写聊天功能还 ...

  9. XMPP框架下微信项目总结(5)花名册获取(好友列表)

    ---->概念 ---->添加花名册 ps:添加花名册,启动: 客户端发送请求到服务器获取好友列表信息,同时在项目中创建数据表,并保存好友列表到数据表中. ---->获取服务器保存好 ...

随机推荐

  1. 如何用命令行执行loadrunner的脚本

    SET M_ROOT=D:\Mercury Interactive\Mercury LoadRunner\bin cd %M_ROOT% wlrun.exe -TestPath D:\ceshi10\ ...

  2. LVM逻辑卷管理测试——逻辑卷扩展、收缩、快照及删除

    一.逻辑卷扩展 [root@lxjtest /]# umount /testLVM/ [root@lxjtest /]# df -h Filesystem Size Used Avail Use% M ...

  3. 使用PowerDesigner生成SQL语句

    0.我使用的PowerDedigner的版本如下: 1.tools>>Resource>>DBMS,然后选中你的数据库版本,双击或点击左上角的properties. 2.再选择 ...

  4. A. Kyoya and Photobooks(Codeforces Round #309 (Div. 2))

    A. Kyoya and Photobooks   Kyoya Ootori is selling photobooks of the Ouran High School Host Club. He ...

  5. asp:ObjectDataSource+asp:GridView 实现真分页

    <asp:GridView ID="GridViewCacheManager" DataSourceID="OdsCacheManager" runat= ...

  6. ios中图层的ancorPoint

    @interface MJViewController () { CALayer *_layer; } @end @implementation MJViewController - (void)vi ...

  7. 工作log

    整理电脑, 发现这么个文档, 留个纪念... 1. 2016-11-17 ================================ 3.采集任务编制页面,表格表头点击实现升序/降序排列 5.s ...

  8. 事务的四个属性ACID

    事务四大特征:原子性,一致性,隔离性和持久性. 1. 原子性(Atomicity) 一个原子事务要么完整执行,要么干脆不执行.这意味着,工作单元中的每项任务都必须正确执行.如果有任一任务执行失败,则整 ...

  9. python实现json转excel

    import json import xlwt a = json.load(open("haha.json", encoding='utf8')) title = list(set ...

  10. sudo: add-apt-repository: command not found

    错误来啦:sudo: add-apt-repository:command not found      网上解决办法是直接安装工具包 命令:sudo apt-get install python-s ...