【iOS XMPP】使用XMPPFramewok(五):好友列表

ios-xmpp聊天界面.zip 搭建QQ登录,注册,添加好友,删除好友,发送消息功能 立即下载

好友列表

 

好友列表,在 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];
            }
        }
    }
}
复制代码

 

xmpp获取好友列表,实现文字聊天 这个demo主要实现了获取好友列表,好友的添加,好友之间的文字聊天。 立即下载

相关推荐

IOS XMPP 聊天程序客户端

关于Jabber的XMPP聊天程序客户端,详细见http://blog.youkuaiyun.com/kangkangz4/article/details/7750765

IOS使用XMPP最新教程(四)获取好友列表 (通过花名册)

这是真正用来获取好友列表的方法, 网上也有,不过网上没有找到花名册初始化的方法,这个也是坑啊!!! 首先在setupStream方法里面 xmppRosterCoreDataStorage = [[XMPPRosterCoreDataStorage alloc]init];         xmppRoster = [[XMPPRoster alloc] initWithRos

wcxdell的专栏 2777

PCIe链路训练Recovery状态机:从RcvrLock到链路稳定的关键路径

本文深入解析PCIe链路训练中的Recovery状态机,特别是RcvrLock状态的关键作用。从Block对齐、均衡预设值应用到状态转移条件,详细介绍了确保链路稳定的技术要点,并提供了高速率下的特殊处理方法和常见问题排查指南,帮助工程师解决PCIe链路不稳定问题。

weixin_28739079的博客 174

XMPP-好友列表模块的注册和好友列表获取,添加,删除

// 花名册 @property (strong,nonatomic) XMPPRoster * roster; // 花名册数据存储 @property (strong,nonatomic) XMPPRosterCoreDataStorage * rosterStorage;注册花名册模块- (void)connect{ if (self.xmppStream == nil) {

的の的 1320

AHB协议中hreadyout和hready_in的区别

上面这张时序图表明master有两笔写传输,第一笔传输为slave1(s1),传输类型为SEQ,在第一笔传输的第二个周期,也就是第一笔传输的dataphase,此时slave1没有准备好被写数据,因此把s1_hreadyout拉低,但此时slave2已经看到自己的NONSEQ传输了,而且slave2已经是准备好了的。重新拿上面的仿真图看一下,由于前一个周期的s1_hreadyout为低电平,所以s2的hready_in也为低电平,那么该周期s2不会对addr以及控制信号进行采样。就不会出现上面的问题。...

weixin_44101336的博客 2865

新手必看:如何用T265和ROS实现无人机室内精准定位(附PX4参数配置)

本文详细介绍了如何使用Intel Realsense T265和ROS实现无人机室内精准定位,包括硬件准备、ROS数据流架构设计、PX4参数配置及系统验证。特别针对视觉SLAM技术在室内环境中的应用,提供了从零搭建到进阶优化的全流程解析,适合无人机开发新手快速上手。

weixin_30642561的博客 404

【iOS XMPP】使用XMPPFramewok(三):好友状态

好友状态 获取好友状态,通过实现 - (void)xmppStream:(XMPPStream *)sender didReceivePresence:(XMPPPresence *)presence 方法 当接收到 <presence /> 标签的内容时,XMPPFramework 框架回调该方法 一个 <presence /> 标签的格式一般如下...

weixin_34187822的博客 250

爬虫-Playwright逆向小红书

【代码】爬虫-Playwright逆向小红书。

weixin_44201223的博客 2427

【iOS XMPP】使用XMPPFramewok(二):用户登录

用户登录   准备工作 比较知名的开源XMPP服务器:一个是Openfire,一个是ejabberd Openfire 使用 Java 语言编写,比较容易上手,地址:http://www.igniterealtime.org/projects/openfire/ ejabberd 使用 Erlang 语言编写,是一款非常知名的 Erlang 开源项目,地址:http:

天下只此一家的专栏 1731

YOLO11改进|卷积篇|引入SPDConv

YOLO11中添加SPDConv卷积

A1983Z的博客 3696

SolidWorks速成教程P4-4【装配体 | 第四节】——装配体内修改模型&编辑配合方法&配合报错的解决方法

截止目前已介绍完 SolidWorks装配体的常用功能,但基础薄弱的小伙伴或许对装配体的各类功能还不够熟悉。所以这节将进一步加强装配体的学习,同时介绍新手容易犯的错误。总结出三点,一是装配体内修改模型,二是编辑配合,三是配合报错的解决方法。

嵌入式阿齐Archie 5550
上一篇: 【iOS XMPP】使用XMPPFramewok(四):收发消息
下一篇: xml解析 kissxml
focusjava
博客等级 码龄14年 127粉丝 528原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值