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(0, frame.size.height*-1);
    }];

}

- (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://blog.csdn.net/jerehedu/

本文版权归烟台杰瑞教育科技有限公司和CSDN共同拥有。欢迎转载,但未经作者允许必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

时间: 2024-08-25 22:04:21

XMPP接受发送消息的相关文章

【原创】Kafka接受发送消息对象Object基础版

首先感谢 kafka 中国社区 王扬庭例子的帮助和指导~~~~~(kafka_2.9.2-0.8.1.1) kafka常用的发送消息的方法如下: Properties props = new Properties(); props.put("zookeeper.connect", "slaves2:2181,slaves3:2181,slaves4:2181"); props.put("serializer.class", "kafka

关于xmpp协议发送消息,登录认证SSL报错的问题

Q:错误描述如下 Traceback(most recent call last): File"/tails-share/features/scripts/otr-bot.py", line 197,in<module> otr_bot.serve_forever() File"/usr/lib/python2.7/dist-packages/jabberbot.py", line 715,in serve_forever conn = self.con

用Spring发送和接受JMS消息的一个小例子

Spring提供的JmsTemplate对原生的JMS API进行了一层薄薄的封装,使用起来非常的方便. 我使用的JMS消息代理插件是Apache的ActiveMQ,建议安装最新版本,因为我之前安装老版本,各种不兼容,各种bug,最新版的activemq-all-5.9.1.jar包里面已经有了slf4j.impl包,之前就是被这个坑了...把这个jar包加到lib目录下面,就不会有各种ClassNotFound异常和类冲突的bug了. 下载ActiveMQ解压之后运行bin下面的activem

如何给对话框中的控件发送消息呢?Windows消息分类

以博文CTabCtrl中介绍的那样,给Tab添加子对话框来显示Tab内容.那么如果这个子对话框中含有个CTreeCtrl控件,有个Button控件,我想要模拟给这两个控件发送消息,该怎么办呢?直接把给控件的消息给控件容器(控件的父窗口)是没有用的.为什么呢?首先要明白windows的消息分类: Windows消息的分类 1. 标准消息(队列消息)除WM_COMMAND之外,所有以WM_开头的消息都是标准消息,如WM_MOUSEMOVE.WM_LBUTTONUP.WM_KEYDOWN.WM_C

Handler发送消息

Handler发送消息小结 字数283 阅读210 评论0 喜欢1 obtainMessage()得到一个Message对象. 创建一个Message然后发送是这么写的: Message msg = new Message(); msg.arg1 = 1; msg.arg2 = 2; msg.what = 3; msg.obj = Object; handler.sendMessage(msg); 性能优化后这样写: Message msg = handler.obtainMessage();

C语言 Socket入门示例1—— 单工通信(客户端向服务器发送消息)

如果对Windows API不太熟悉.对TCP/IP通信协议不太熟悉,或者对C语言本身不太熟悉的话,学习Socket会有点难受的.以前学习操作系统的时候,被API吓怕了,很多莫名其妙的API有着多如牛毛的参数,令人费解.学习计算机网络的时候,又有那么多的协议,并且很多协议本身比较复杂,什么三次握手建立连接,什么四次握手释放链接等等,也没有学得特别透彻.更遗憾的是,以前学C的时候,误以为自己把C学会了,误以为C就那么几个头文件而已,就一个黑框子而已. 现在,经过一段时间的痛苦磨练,又有了一些新的认

发送消息 MFC 消息映射

发送消息 MFC 消息映射 (2011-07-11 17:03:49) 转载▼ 标签: 发送消息 mfc 消息映射 杂谈   1.在用WIN 32 API函数开发应用程序时,经常要用SendMassege函数向某些对象发送消息,以让对象实现某些功能(此时也有相应的API 函数来实现这个功能).例如关闭窗口,可以发送WM_CLOSE消息.SendMessage(hwnd,WM_SYSCOMMAND,SC_CLOSE,0);//关闭主窗口SendMessage(hwnd,WM_CLOSE,0,0);

微信企业号开发—发送消息

开始回调模式后我们就要实现聊天功能了.平时使用微信聊天可以发送文本消息.语音.图片.视频等,这里只实现了其中的一些功能和大家分享. 一.与微信企业号建立连接 1.企业应用调用企业号提供的接口,管理或查询企业号后台所管理的资源.或给成员发送消息等,以下称主动调用模式. 2.企业号把用户发送的消息或用户触发的事件推送给企业应用,由企业应用处理,以下称回调模式. 3.用户在微信中阅读企业应用下发的H5页面,该页面可以调用微信提供的原生接口,使用微信开放的终端能力,以下称JSAPI模式. 这是微信企业号

搭建xmpp推送消息到手机

关于服务器端向Android客户端的推送,主要有三种方式:1.客户端定时去服务端取或者保持一个长Socket,从本质讲这个不叫推送,这是去服务端拽数据.但是实现简单,主要缺点:耗电等2.Google的C2DM,具体不细说,缺点,服务器在国外,你懂得,不是很稳定.3.XMPP协议,它是一种基于XML的传递协议,具有很强的灵活性和可扩展性.它的特点是将复杂性从客户端转移到了服务器端.听说GTalk.QQ.IM等都用这个协议. 接下来说说XMPP在android客户端上的应用.分两部分:服务端搭建和客