免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1825 | 回复: 1
打印 上一主题 下一主题

[iOS] XMPP接受发送消息 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-07-22 17:52 |只看该作者 |倒序浏览
在现阶段的通信服务中,各种标准都有,因此会出现无法实现相互连通,而XMPP(Extensible Message and presence Protocol)协议的出现,实现了整个及时通信服务协议的互通。有了这个协议之后,使用任何一个组织或者个人提供的即使通信服务,都能够无障碍的与其他的及时通信服务的用户进行交流。例如google 公司2005年推出的Google talk就是一款基于XMPP协议的即时通信软件。下面我们就谈论一下如何简单的使用XMPP的接收和发送消息

1、在XMPPFramework.h中将需要用到的头文件打开

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

3、定义查询结果存储器并且进行初始化
  1. //消息存档
  2. @property(nonatomic,strong) XMPPMessageArchiving * messageArch;

  3. //消息存档存储模型
  4. @property(nonatomic,strong) XMPPMessageArchivingCoreDataStorage * messageStore;
复制代码
4、在上面storyboard创建的控制器中,添加如下代码
  1. AppDelegate * delgate=[UIApplication sharedApplication].delegate;
  2.    
  3.     //初始化头像
  4.     XMPPJID * fromJid=[XMPPJID jidWithString:self.fromJid];
  5.     NSData * fromData=[delgate.vCardAvatarModule photoDataForJID:fromJid];
  6.     self.fromImage=[[UIImage  alloc] initWithData:fromData];

  7.     NSString * userName= [[NSUserDefaults standardUserDefaults] objectForKey:@"userName"];
  8.     XMPPJID * tojid=[XMPPJID jidWithString:userName];
  9.    
  10.     //设置图片模型
  11.     NSData * toData=[delgate.vCardAvatarModule photoDataForJID:tojid];
  12.     self.meImage=[[UIImage  alloc] initWithData:toData];
  13.    
  14.     if (self.fromImage==nil) {
  15.         self.fromImage=[UIImage imageNamed:@"defalut"];
  16.     }
  17.    
  18.     if (self.meImage==nil) {
  19.         self.meImage=[UIImage imageNamed:@"defalut"];
  20.     }


  21.     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(showKey:) name:UIKeyboardWillShowNotification object:nil];
  22.    
  23.     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(hideKey:) name:UIKeyboardWillHideNotification object:nil];
  24.    
  25.     //初始化数据存储
  26.   NSString *user=  [[NSUserDefaults standardUserDefaults] objectForKey:@"userName"];
  27.    
  28.     //初始化请求
  29.     NSFetchRequest * request=[[NSFetchRequest alloc] initWithEntityName:@"XMPPMessageArchiving_Message_CoreDataObject"];
  30.     request.predicate=[NSPredicate predicateWithFormat:@"bareJidStr=%@ and streamBareJidStr=%@",self.fromJid,user];
  31.    
  32.    
  33.     //定义排序
  34.     NSSortDescriptor * des=[NSSortDescriptor sortDescriptorWithKey:@"timestamp" ascending:YES];
  35.     [request setSortDescriptors:@[des]];
  36.    
  37.     //获取上下文
  38.     NSManagedObjectContext *context=[delgate.messageStore mainThreadManagedObjectContext];
  39.    
  40.     //初始化结果存储器
  41.     fetch=[[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:context sectionNameKeyPath:nil cacheName:nil];
  42.    
  43.     //设置代理
  44.     fetch.delegate=self;
  45.    
  46.     //开始查询
  47.     [fetch performFetch:nil];
复制代码
5、创实现tableView的代理方法
  1. -(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
  2.     id <NSFetchedResultsSectionInfo>  info=fetch.sections[section];
  3.         NSLog(@"===%ld",info.numberOfObjects);
  4.     return [info numberOfObjects];
  5.    
  6. }
  7. - (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
  8.     XMPPMessageArchiving_Message_CoreDataObject * obj=[fetch objectAtIndexPath:indexPath];
  9.     JRChatTableViewCell * cell=nil;
  10.     if (obj.isOutgoing) {
  11.          cell=[tableView dequeueReusableCellWithIdentifier:@"cellto"];
  12.     }else{
  13.          cell=[tableView dequeueReusableCellWithIdentifier:@"cellfrom"];
  14.     }
  15.    
  16.    
  17.     //设置头像
  18.     cell.image.image=self.meImage;
  19.     cell.selectionStyle=UITableViewCellSelectionStyleNone;
  20.     [cell setText:obj.body WithFlag:obj.isOutgoing ];
  21.     return cell;

  22. }
复制代码
6、增加键盘控制
  1. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(showKey:) name:UIKeyboardWillShowNotification object:nil];
  2.    
  3. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(hideKey:) name:UIKeyboardWillHideNotification object:nil];
  4. - (void) showKey:(NSNotification * ) notify{
  5.     CGFloat time=[notify.userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue]  ;
  6.     CGRect frame=[notify.userInfo[UIKeyboardFrameBeginUserInfoKey] CGRectValue];
  7.     [UIView animateWithDuration:time animations:^{
  8.         self.keyView.transform=CGAffineTransformMakeTranslation(0, frame.size.height*-1);
  9.     }];
  10. }

  11. - (void) hideKey:(NSNotification * ) notify{
  12.     CGFloat time=[notify.userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue]  ;
  13.     [UIView animateWithDuration:time animations:^{
  14.         self.keyView.transform=CGAffineTransformIdentity;
  15.     }];
  16. }
复制代码
7、发送消息
  1. -(BOOL)textFieldShouldReturn:(UITextField *)textField{
  2.     [textField resignFirstResponder];
  3.    
  4.     //发送消息
  5.    
  6.     //1 取出文本
  7.     AppDelegate * delgate=[UIApplication sharedApplication].delegate;
  8.    
  9.     XMPPJID * jid=[XMPPJID jidWithString:self.fromJid];
  10.    
  11.     //初始化消息体
  12.     XMPPMessage * message=[XMPPMessage messageWithType:@"chat" to:jid];
  13.     [message addBody:self.ketf.text];
  14.    
  15.     //发送消息
  16.     [delgate.stream sendElement:message];
  17.    
  18.     //将消息置空
  19.     self.ketf.text=nil;
  20.     return YES;
  21. }
复制代码

论坛徽章:
59
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
2 [报告]
发表于 2015-08-12 10:34 |只看该作者
XMPP确实是不错的推送消息的框架。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP