XMPP接受发送消息
在现阶段的通信服务中,各种标准都有,因此会出现无法实现相互连通,而XMPP(Extensible Message and presence Protocol)协议的出现,实现了整个及时通信服务协议的互通。有了这个协议之后,使用任何一个组织或者个人提供的即使通信服务,都能够无障碍的与其他的及时通信服务的用户进行交流。例如google 公司2005年推出的Google talk就是一款基于XMPP协议的即时通信软件。下面我们就谈论一下如何简单的使用XMPP的接收和发送消息
1、在XMPPFramework.h中将需要用到的头文件打开

2、在storyboard创建展示消息页面

3、定义查询结果存储器并且进行初始化
//消息存档
@property(nonatomic,strong) XMPPMessageArchiving * messageArch; //消息存档存储模型
@property(nonatomic,strong) XMPPMessageArchivingCoreDataStorage * messageStore;
4、在上面storyboard创建的控制器中,添加如下代码
AppDelegate * delgate=[UIApplication sharedApplication].delegate;
//初始化头像
XMPPJID * fromJid=[XMPPJID jidWithString:self.fromJid];
NSData * fromData=[delgate.vCardAvatarModule photoDataForJID:fromJid];
self.fromImage=[[UIImage alloc] initWithData:fromData];
NSString * userName= [[NSUserDefaults standardUserDefaults] objectForKey:@"userName"];
XMPPJID * tojid=[XMPPJID jidWithString:userName];
//设置图片模型
NSData * toData=[delgate.vCardAvatarModule photoDataForJID:tojid];
self.meImage=[[UIImage alloc] initWithData:toData];
if (self.fromImage==nil) {
self.fromImage=[UIImage imageNamed:@"defalut"];
}
if (self.meImage==nil) {
self.meImage=[UIImage imageNamed:@"defalut"];
}
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(showKey:) name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(hideKey:) name:UIKeyboardWillHideNotification object:nil];
//初始化数据存储
NSString *user= [[NSUserDefaults standardUserDefaults] objectForKey:@"userName"];
//初始化请求
NSFetchRequest * request=[[NSFetchRequest alloc] initWithEntityName:@"XMPPMessageArchiving_Message_CoreDataObject"];
request.predicate=[NSPredicate predicateWithFormat:@"bareJidStr=%@ and streamBareJidStr=%@",self.fromJid,user];
//定义排序
NSSortDescriptor * des=[NSSortDescriptor sortDescriptorWithKey:@"timestamp" ascending:YES];
[request setSortDescriptors:@[des]];
//获取上下文
NSManagedObjectContext *context=[delgate.messageStore mainThreadManagedObjectContext];
//初始化结果存储器
fetch=[[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:context sectionNameKeyPath:nil cacheName:nil];
//设置代理
fetch.delegate=self;
//开始查询
[fetch performFetch:nil];
5、创实现tableView的代理方法
-(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
id <NSFetchedResultsSectionInfo> info=fetch.sections[section];
NSLog(@"===%ld",info.numberOfObjects);
return [info numberOfObjects];
}
- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
XMPPMessageArchiving_Message_CoreDataObject * obj=[fetch objectAtIndexPath:indexPath];
JRChatTableViewCell * cell=nil;
if (obj.isOutgoing) {
cell=[tableView dequeueReusableCellWithIdentifier:@"cellto"];
}else{
cell=[tableView dequeueReusableCellWithIdentifier:@"cellfrom"];
}
//设置头像
cell.image.image=self.meImage;
cell.selectionStyle=UITableViewCellSelectionStyleNone;
[cell setText:obj.body WithFlag:obj.isOutgoing ];
return cell;
}
6、增加键盘控制
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(showKey:) name:UIKeyboardWillShowNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(hideKey:) name:UIKeyboardWillHideNotification object:nil];
- (void) showKey:(NSNotification * ) notify{
CGFloat time=[notify.userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue] ;
CGRect frame=[notify.userInfo[UIKeyboardFrameBeginUserInfoKey] CGRectValue];
[UIView animateWithDuration:time animations:^{
self.keyView.transform=CGAffineTransformMakeTranslation(, frame.size.height*-);
}];
} - (void) hideKey:(NSNotification * ) notify{
CGFloat time=[notify.userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue] ;
[UIView animateWithDuration:time animations:^{
self.keyView.transform=CGAffineTransformIdentity;
}];
}
7、发送消息
-(BOOL)textFieldShouldReturn:(UITextField *)textField{
[textField resignFirstResponder];
//发送消息
//1 取出文本
AppDelegate * delgate=[UIApplication sharedApplication].delegate;
XMPPJID * jid=[XMPPJID jidWithString:self.fromJid];
//初始化消息体
XMPPMessage * message=[XMPPMessage messageWithType:@"chat" to:jid];
[message addBody:self.ketf.text];
//发送消息
[delgate.stream sendElement:message];
//将消息置空
self.ketf.text=nil;
return YES;
}
想要了解更多内容的小伙伴,可以点击查看源码,亲自运行测试。
疑问咨询或技术交流,请加入官方QQ群:
(452379712)
出处:http://www.cnblogs.com/jerehedu/
本文版权归烟台杰瑞教育科技有限公司和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
XMPP接受发送消息的更多相关文章
- C# 微信公众平台开发(3)-- 接受/发送消息
1.接收事件 关注/取消关注事件: 用户在关注与取消关注公众号时,微信会把这个事件推送到开发者填写的URL. 通过微信返回的XML,我们通过代码 就可以作相应的处理: 先获取返回的信息: if (Ht ...
- 关于xmpp协议发送消息,登录认证SSL报错的问题
Q:错误描述如下 Traceback(most recent call last): File"/tails-share/features/scripts/otr-bot.py", ...
- Xmpp学习之Smack发送消息JID变乱码
Xmpp学习之Smack发送消息JID变乱码 版权声明:本文为博主原创文章,未经博主允许不得转载. 转载请表明出处:http://www.cnblogs.com/cavalier-/p/6947723 ...
- Handler发送消息
Handler发送消息小结 字数283 阅读210 评论0 喜欢1 obtainMessage()得到一个Message对象. 创建一个Message然后发送是这么写的: Message msg = ...
- 如何给对话框中的控件发送消息呢?Windows消息分类
以博文CTabCtrl中介绍的那样,给Tab添加子对话框来显示Tab内容.那么如果这个子对话框中含有个CTreeCtrl控件,有个Button控件,我想要模拟给这两个控件发送消息,该怎么办呢?直接把给 ...
- XMPP协议之消息回执解决方案
苦恼中寻找方法 在开始做即时通信时就知道了消息回执这个概念,目的是解决通讯消息因为各种原因未送达对方而提供的一种保障机制.产生这个问题的原因主要是网络不稳定.服务器或者客户端一些异常导致没有接收到消息 ...
- Golang之发送消息至kafka
windows下安装zookeeper 1.安装JAVA-JDK,从oracle下载最新的SDK安装(我用的是1.8的) 2.安装zookeeper3.3.6,下载地址:http://apache.f ...
- Openfire 单人聊天和多人聊天(发送消息、接收消息)
Openfire 单人聊天和多人聊天(发送消息.接收消息) 一.单人聊天 1)发送消息: 首先要获取一个聊天窗口,getConnection()为获取连接connection的方法,调用getFrie ...
- WebSocket.之.基础入门-前端发送消息
WebSocket.之.基础入门-前端发送消息 在<WebSocket.之.基础入门-建立连接>的代码基础之上,进行添加代码.代码只改动了:TestSocket.java 和 index. ...
随机推荐
- hdu2476
/* dp[l][r]表示将任意串的[l,r]刷成s2样子的最小代价 ans[i]表示将s1的前i位刷成s2的代价 按照区间dp的常用做法,dp[l][r]的状态由dp[l][k],dp[k+1][r ...
- python接口自动化测试二十一:类和方法
# 类和方法 class Count(): def __init__(self, aaa, bbb): # 初始化 # 可以放公共的参数 print('实例化的时候,会执行init的内容') self ...
- 【C++ Primer 第10章】 1.概述(算法总结)
泛型算法 find(vec.beign(), vec.end(), val) //返回指向第一个给定值的元素的迭代器 count(vec.bengin(), vec.end(), val) //返回给 ...
- BZOJ1826 [JSOI2010]缓存交换 堆 贪心
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1826 题意概括 Cache中有m个储存单元,接下来有n个访问地址,每个地址用一个数字表示.访问每一 ...
- BZOJ1875 [SDOI2009]HH去散步 矩阵
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1875 题意概括 在一个无向图(有重边无自环)中走,不能在经过连续经过某一条边2次. 现在走t步,问 ...
- 025 如何利用github绑定自己的域名
这个以前是看同时的文档的,最近重新配置了一次,还是感觉同时的这个文档挺好的,就不再重新书写了,只复制一个连接. https://blog.csdn.net/iliujie/article/detail ...
- 使用cxf两个声明导致ObjectFactory 类中发生冲突
在网上搜了答案都是一样的,没有解决这个问题. 后来发现原因在于 -p com.XXX.XXX这个命令. 解决方法: 只需要把命名包的这个命令去掉. 但要注意,在移动到项目中去时,必须Refactor包 ...
- 利用zabbix监控oracle数据库
一.概述 zabbix是一款非常强大,同时也是应用最为广泛的开源监控软件,本文将给大家介绍如何利用zabbix监控oracle数据库. 二.环境介绍 以下是我安装的环境,实际部署时并不需要跟我的环境一 ...
- ARP和RARP协议详解
ARP概述 为什么要用ARP?即ARP的作用 (1) TCP/IP 的32bit的IP地址,仅知道主机的IP地址不能让内核发送数据帧给主机 (2) 网络接口的硬件地址,它是一个48bit的值,用来标识 ...
- ubuntu安装mysql 时未提示输入密码
我在Ubuntu16.04版本中使用终端安装MySQL5.7时,按照度娘的教程,搜索如何安装,大多是如下代码: sudo apt-get install mysql-server sudo apt-g ...