XMPP协议获取花名册(好友列表)
首先导入花名册模块,理由同上篇文章,这里不再具体说明
// 花名册模块
#import "XMPPRoster.h"
#import "XMPPRosterCoreDataStorage.h"
初始化花名册模块,并激活
//设置花名册模块self.rosterStorage=[[XMPPRosterCoreDataStorage alloc]init];self.roster=[[XMPPRoster alloc]initWithRosterStorage:self.rosterStorage];[self.roster activate:self.stream];
花名册模块也是先从服务器获取在存到本地数据库,再从本地数据库获取利用CoreData花名册存在XMPPUserCoreDataStorageObject表中,CordData有个很强大的类是
NSFetchedResultsController,他可以监听数据值的变化,如果设置代理了一但变化就会通知代理,这时候当一个用户的在线状态发生变化时刷新表格即可,免得用kvo监听属性比较麻烦<当切换登录用户时会把数据库里的好友数据删除,在把新的当前用户的好友数据加到数据库>
XMPPTool *tool=[XMPPTool sharedXMPPTool];NSManagedObjectContext *context=tool.rosterStorage.mainThreadManagedObjectContext;NSFetchRequest *request=[[NSFetchRequest alloc]initWithEntityName:@"XMPPUserCoreDataStorageObject"];//对结果进行排序NSSortDescriptor *sort=[NSSortDescriptor sortDescriptorWithKey:@"displayName" ascending:YES];request.sortDescriptors=@[sort];//设置谓词过滤NSPredicate *pre=[NSPredicate predicateWithFormat:@"subscription!=%@",@"none"];request.predicate=pre;//此处是设置过滤,none为加好友请求没有同意的好友self.resultController=[[NSFetchedResultsController alloc]initWithFetchRequest:request managedObjectContext:context sectionNameKeyPath:nil cacheName:nil];//设置代理self.resultController.delegate=self;NSError *error=nil;//执行[self.resultController performFetch:&error];if (error) {LSLog(@"出错:%@",error);}
取出表中每一行数据,即一个好友用户信息,user.photo为nil,所以每个好友头像都得自己利用头像模块获取
XMPPUserCoreDataStorageObject *user=self.resultController.fetchedObjects[indexPath.row];if (user.photo) {cell.imageView.image=user.photo;}else {XMPPTool *tool=[XMPPTool sharedXMPPTool];cell.imageView.image= [UIImage imageWithData:[tool.avatar photoDataForJID:user.jid]];}cell.textLabel.text=user.nickname;switch (user.sectionNum.intValue) {case 0:cell.detailTextLabel.text=@"在线";break;case 1:cell.detailTextLabel.text=@"离开";break;case 2:cell.detailTextLabel.text=@"离线";break;default:cell.detailTextLabel.text=@"未知";break;}
NSFetchedResultsController代理方法实现,数据改变刷新表格
-(void)controllerDidChangeContent:(NSFetchedResultsController *)controller
{[self.tableView reloadData];
}
删除好友,利用花名册模块删除
XMPPTool *tool=[XMPPTool sharedXMPPTool];XMPPUserCoreDataStorageObject *user=self.resultController.fetchedObjects[indexPath.row];[tool.roster removeUser:user.jid];
加好友,首先利用花名测存储模块判断是否存在当前要添加用户
if (self.contactTextField.text==nil) {[KVNProgress showErrorWithStatus:@"请输入用户名"];return;}if ([self.contactTextField.text isEqualToString:[LSAccount sharedAccount].loginName]) {[KVNProgress showErrorWithStatus:@"不能添加自己"];return;}XMPPTool *tool=[XMPPTool sharedXMPPTool];NSString *user=self.contactTextField.text;XMPPJID *userJid=[XMPPJID jidWithUser:user domain:[LSAccount sharedAccount].domain resource:@"iPhone6s"];if ([tool.rosterStorage userExistsWithJID:userJid xmppStream:tool.stream]){[KVNProgress showErrorWithStatus:@"此好友已经存在"];}else {//在XMPP里订阅即是添加[tool.roster subscribePresenceToUser:userJid];}/*添加好友在现有openfire存在的问题1.添加不存在的好友,通讯录里面也现示了好友解决办法1. 服务器可以拦截好友添加的请求,如当前数据库没有好友,不要返回信息<presence type="subscribe" to="werqqrwe@127.0.0.1"><x xmlns="vcard-temp:x:update"><photo>b5448c463bc4ea8dae9e0fe65179e1d827c740d0</photo></x></presence>解决办法2.过滤数据库的Subscription字段查询请求none 对方没有同意添加好友to 发给对方的请求from 别人发来的请求both 双方互为好友*/
XMPP协议获取花名册(好友列表)相关推荐
- 爬虫实现:获取微信好友列表爬取进行好友分析
本项目已经上传到github上面:https://github.com/wangqifan/WeChatAnalyse 这个Demo是利用HttpWebRequest和HttpWebResponse来 ...
- python获取qq好友ip_使用Python模拟登录QQ邮箱获取QQ好友列表
最近因开发项目的需要,有一个需求,就是很多SNS网站都有的通过 Email地址 导入好友列表,不过这次要导入的不是Email 列表,而是QQ的好友列表. 实现方式: 通过google一搜,实现的方式大 ...
- 原生JS获取QQ好友列表
JS内容如下: /*** @author ius.* @date 2022/8/1* @introduction 获取QQ好友列表*/function getCookie(aim) {const al ...
- python微信好友_python 获取微信好友列表的方法(微信web)
如下所示: import urllib import urllib2 import os import time import re import cookielib import xml.dom.m ...
- python:获取微信好友列表信息(二)进行导出微信好友到csv数据读取与处理
接上一篇:https://blog.csdn.net/seoyundu/article/details/81543656 代码中:对csv文件读取,并利用pandas库处理,统计出好友信息. pand ...
- QQ登录回调地址实现:【获取qq好友列表数据】附实例
QQ登录回调地址实现:[获取qq好友列表数据] <?php require_once("../../API/qqConnectAPI.php"); $qc = new QC( ...
- qq好友列表获取,利用curl 模拟获取qq好友列表获取接口
qq好友列表获取,利用curl 模拟获取qq好友列表获取接口 代码如下: //模拟浏览器查找好友列表$url = "http://cgi.find.qq.com/qqfind/buddy/s ...
- js解密之QQ的bkn值,获取QQ群成员信息,获取QQ好友列表信息
js解密之QQ的bkn值,获取QQ群成员信息,获取QQ好友列表信息 Lan 2020-05-31 12:13 126 人阅读 0 条评论 QQ群网站:https://qun.qq.com ...
- C# 获取QQ好友列表信息的实现
分析部分 当我们访问QQ空间的时候,大家可以在右侧的发现一个这样的统计信息 当点击这个链接的时候,会跳转到 这样一个URL 这个URl可以管理好友,当然也就能读取到好友 上面我们是在浏览器 ...
最新文章
- 成为真正的变革型CIO,代价几何?
- 常见汉字Unicode编码
- redis setnx 分布式锁_Spring Boot 整合 Redis 正确的实现分布式锁
- Java程序员进阶的 3 个层次,你处于哪个?
- php简单网页制作代码,用HTML和CSS以及JS制作简单的网页菜单界面的代码
- jzoj3055-比赛【数学,统计】
- PHP建站环境搭建:汇总网上常见的1键安装包
- 学习《深度学习入门:基于Python的理论与实现》高清中文版PDF+源代码
- 自顶向下 计算机网络知识,计算机网络(自顶向下)第七版考试复习要点(第四章)...
- matplotlib——在 Jupyter Notebook中绘制图像时只显示变量信息不显示图片
- C++--第12课 - 操作符重载 - 上
- python输入一个序列_Python序列合并,python
- unity 入门学习之(二)脚本学习
- 汉语拼音分音节的程序
- VS 调试时,不允许修改代码
- SharePoint 2013 App Development读书笔记1
- matlab中eval的用法
- 冯建文《数字电路设计》读书笔记
- 成为第一没有捷径:AI新势力MindSpore成长秘籍 | 源创者说
- 频率控制方式及优缺点总结