三:朋友列表  XEP-0083

获得朋友列表,我们要使用花名册(roster)的方法

添加

在setupStream方法中添加

xmppRosterStorage = [[XMPPRosterCoreDataStoragealloc]init];

xmppRoster = [[XMPPRosteralloc]initWithRosterStorage:xmppRosterStorage];

[xmppRosteractivate:self.xmppStream];

[xmppRosteraddDelegate:selfdelegateQueue:dispatch_get_main_queue()];

再次运行后,会发现,xmppstream发送了

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

并收到

<iq xmlns="jabber:client" type="result" to="dawn@saas.kanyabao.com/XMPPIOS"><query xmlns="jabber:iq:roster"/></iq>

我查看了相应的0083的协议,发现基本符合。

由于我们现在是一个新注册的用户,还没有好友,所以收到的IQ中没有朋友的列表的item.

XMPPRosterCoreDataStorage这个类是用于用户保存的,在xmpp的官方框架中提供了两种存储好友列表的方法,这里使用coredata

添加新的viewcontroller 命名为FriendsListViewController继承于uitableviewcontroller

添加添加好友的按钮和方法

在这里,我的好友的JID已经写死,实际应用中可以随意填写,此处看牙宝客服的客户端使用的是spark,

点击这个按钮执行程序后,在spark中出现请求页面

点击接收

如果打印出接收和发送的IQ,presence,这这个操作的过程中,ios的客户端和spark与openfire已经进行了一系列的沟通。

我们最后接收到了出席信息

<presence xmlns="jabber:client" id="pju7P-6" from="看牙宝客服@saas.kanyabao.com/Spark 2.6.3" to="dawn@saas.kanyabao.com/XMPPIOS"><status>在线</status><priority>1</priority></presence>

-------------以上是iOS添加spark的过程---------------------------------------------

如果是从spark向ios端发送添加好友的请求

我们会收到如下信息

<presence xmlns="jabber:client" id="pju7P-49" to="dawn@saas.kanyabao.com" type="subscribe" from="看牙宝客服@saas.kanyabao.com"/>

推荐在- (void)xmppRoster:(XMPPRoster *)sender didReceivePresenceSubscriptionRequest:(XMPPPresence *)presence

方法中接收添加好友信息的代码,方法多样,随君挑选!!

如果有添加好友的消息,则显示

以下是接收请求的代码

拒绝的代码为rejectPresenceSubscriptionRequestFrom

上文提到的用于保存朋友信息的XMPPRosterCoreDataStorage已经将信息保存下来了

进入Library的文件夹内就能看到sqlite的数据库了

在展示朋友信息的页面中添加如下代码

这样就获得了所有朋友的信息

此时,数据已经全部获取到了,想怎么虐就怎么虐吧!

一个问题出现了,那就是好友状态,在这个页面中,如果好友状态更新,这个列表并不能即时的更新,所以现在添加即时更新的代码

现添加代理ChatDelegate

这样的方法是更改了当前页面的dataarray。

其实这个时候数据库的数据已经改变了,但是必须要退出这个页面再进入才能看到改变,重新从数据库获取也不行,尚未找到其他更好的解决方法!!

PS:在处理childAtIndex的时候最好做个判断,免得越界。

删除好友- (void)removeUser:(XMPPJID *)jid;

修改好友备注- (void)setNickname:(NSString *)nickname forUser:(XMPPJID *)jid;

方法类似

博客来源:http://www.cnblogs.com/PhenixWang/p/3275537.html

xmpp学习使用简单介绍(二)相关推荐

  1. Linux 下UVCamp;V4L2技术简单介绍(二)

    通过前文Linux 下UVC&V4L2技术简单介绍(一)我们了解了UVC和V4L2的简单知识. 这里是USB设备的文档描写叙述:http://www.usb.org/developers/do ...

  2. ZooKeeper学习-- Zookeeper简单介绍

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 一.分布式协调技术 在给大家介绍ZooKeeper之前先来给大家介绍一种技术--分布式协调技术.那么 ...

  3. 贝叶斯学习的简单介绍

    文章目录 贝叶斯学习 Bayesian Learning 一.介绍 1.1 先验概率 1.2 后验概率 二.贝叶斯理论 2.1 举例介绍 2.2 MAP假设 2.3 概率法则 三.最小描述长度假设 四 ...

  4. 三种联邦学习的简单介绍

    (一)横向联邦学习 1.定义 横向联邦学习也称为按样本划分的联邦学习,可以应用于联邦学习的 各个参与方的数据集有相同的特征空间和不同的样本空间的场景. 2.横向联邦学习架构 常用的两个系统架构为:客户 ...

  5. 一、tars简单介绍 二、tars 安装部署资料准备

    1.github地址https://github.com/Tencent/Tars/ 2.tars是RPC开发框架,目前支持c++,java,nodejs,php 3.tars 在腾讯内部已经使用了快 ...

  6. 加拿大高中计算机学什么内容,加拿大大学计算机科学专业排名情况及学习内容简单介绍...

    伴随着近年来前往加拿大留学学生人数的不断增多,如何在众多专业中选择一个优势专业成为不少家长关注的热点.据了解,在加拿大的众多专业中,计算机科学专业不管是就业前景还是薪资待遇都是相当不错的,那么加拿大大 ...

  7. canvas1:简单介绍、开始使用、画直线+虚线

    目录 一.简单介绍 二.开始使用 三.画直线.虚线 3.1 画直线 1. 画直线的步骤: 2. 设置直线的样式 3. 绘制多条直线 3.2 画虚线 四.整理使用到的方法: 参考了廖雪峰老师的笔记. 一 ...

  8. C语言生成midi文件,介绍二个wave 转 midi的开源项目

    //lihaoyxj@gmail.com 在进行音频处理时,往往需要把wav数据转成其它格式,而作为音乐编辑类的软件,更多则是要以midi格式去处理. 在这里简单介绍二款开源的有关音频中和midi相关 ...

  9. C++ shared_ptrweak_ptr的简单介绍和仿写

    文章目录 shared_ptr 一.shared_ptr的简单介绍 二.shared_ptr的使用 1.函数介绍 2.使用 三.shared_ptr对象创建方法的讨论 1. 有两种常见的创建的方法: ...

最新文章

  1. Linux下修改Mysql的用户(root)的密码
  2. Python list 操作
  3. rand函数的使用方法php,PHP array_rand()函数 使用基础教程
  4. 《系统集成项目管理工程师》必背100个知识点-29范围说明书的内容
  5. 谷歌Android各版本的代号变迁
  6. 自己动手写事件总线(EventBus)
  7. PaperNotes(12)-Autoregressive Quantile networks for generative modeling
  8. 利用css做出的图片墙效果_练习
  9. 【STM32】高级定时器、通用定时器和基本定时器---配置寄存器产生PWM
  10. Jenkins+Github(Robotframework代码)
  11. Java实现面向对象编程
  12. 整合营销中广告投放策略,为何需要选择公关广告?
  13. 学习方法和学习经验总结
  14. 使用hardhat 开发以太坊智能合约-发布合约
  15. python repl_Python REPL通俗的理解什么?
  16. 谈谈对springioc的理解
  17. python控制键盘输入_神技能:Python控制键盘鼠标
  18. 【转】Log4j详细使用教程
  19. 一维卷积Conv1D
  20. 使用代码给ACCESS窗体中32个文本框赋不同值的实例

热门文章

  1. 跟我学在高德地图——标注我的位置
  2. 秋招Java开发工程师笔试_美团Java工程师面试题(2018秋招)
  3. javafx 教程_用JavaFX编写图块引擎
  4. 基于非洲秃鹫优化算法的函数寻优算法
  5. html 中箭头的代码,HTML中利用div+CSS实现简单的箭头图标的代码
  6. 科学计算机已知角度和边长怎样算斜长,计算公式
  7. JAVASCRIPT实现基于文本的自动智能聊天机器人
  8. LINQ SelectMany cannot be inferred from the usage. Try specifying the type arguments explicitly.
  9. matlab求cos角,科学网—MATLAB求太阳高度角的小程序 - 张乐乐的博文
  10. bzoj1921: [Ctsc2010]珠宝商