XMPP学习记录四:关于接受,发送消息和获取好友上下线的状态

原创 2013年12月05日 14:01:14

消息

  1. //收到消息    
  2. - (void)xmppStream:(XMPPStream *)sender didReceiveMessage:(XMPPMessage *)message{    
  3.         
  4. //    NSLog(@"message = %@", message);    
  5.     //消息的内容   
  6.     NSString *msg = [[message elementForName:@"body"] stringValue];   
  7.     //消息发送者   
  8.     NSString *from = [[message attributeForName:@"from"] stringValue];    
  9.           
  10.     /****在此处****/  
  11.     //通知聊天页面有新消息,需要处理    
  12.         
  13. }   


发送消息

  1. //发送消息的xml格式  
  2. <message from='发送者账号'  
  3.     to='接收者账号'  
  4.     type='chat'>  
  5.     <body>HELLO WORLD </body>  
  6.     </message>  


//代码组装

  1. NSString *message = @"HELLO WORLD";  
  2.     NSXMLElement *body = [NSXMLElement elementWithName:@"body"];  
  3.     [body setStringValue:message];  
  4.       
  5.     //生成XML消息文档  
  6.     NSXMLElement *mes = [NSXMLElement elementWithName:@"message"];  
  7.     //消息类型  
  8.     [mes addAttributeWithName:@"type" stringValue:@"chat"];  
  9.     //发送给谁  
  10.     [mes addAttributeWithName:@"to" stringValue:@"接受者账号"];  
  11.     //由谁发送  
  12.     [mes addAttributeWithName:@"from" stringValue:@"发送者账号"];  
  13.     //组合  
  14.     [mes addChild:body];  
  15.       
  16.     //发送消息  
  17.     [[self xmppStream] sendElement:mes];  


好友上下线通知

  1. - (void)xmppStream:(XMPPStream *)sender didReceivePresence:(XMPPPresence *)presence  
  2. {     
  3.     //取得好友状态  
  4.     NSString *presenceType = [presence type]; //online/offline  
  5.     //当前用户  
  6.     NSString *userId = [[sender myJID] user];  
  7.     //在线用户  
  8.     NSString *presenceFromUser = [[presence from] user];  
  9.     /* 
  10.      //如果不是自己,如果涉及多段登录,此处最好加上else,如果是自己离线的话,调用上线协议 
  11.      XMPPPresence *presence = [XMPPPresence presence]; 
  12.      [[self xmppStream] sendElement:presence]; 
  13.      */  
  14.     if (![presenceFromUser isEqualToString:userId])  
  15.     {  
  16.         //用户在线  
  17.         if ([presenceType isEqualToString:@"available"])  
  18.         {  
  19.             //列表和数据库都要相应改变  
  20.         }else if ([presenceType isEqualToString:@"unavailable"])//用户不在线  
  21.         {  
  22.             //列表和数据库都要相应改变  
  23.         }  
  24.     }  
  25. }  

相关文章推荐

XMPP协议之消息回执解决方案

苦恼中寻找方法 在开始做即时通信时就知道了消息回执这个概念,目的是解决通讯消息因为各种原因未送达对方而提供的一种保障机制。产生这个问题的原因主要是网络不稳定、服务器或者客户端一些异常导致没有接收到消...
  • 5207
  • 5207
  • 2017年05月31日 17:51
  • 539

基于XMPP开发学习------(3)好友列表、发送消息

一、花名册 添加《花名册模块》在WCXMPPTool这个单例类中。 //花名册数据存储模块 @property(nonatomic, strong, readonly)XMPPRosterC...

基于Openfire Smack开发即时通讯应用、获取离线消息,发送消息,联系人列表,添加好友(三)

一:前面两篇说了Openfire服务器的搭建和注册登录,接下来就是重点了,实现与好友之间的聊天。二:获取用户的所有好友XMPPTCPConnection connection /** ...
  • a_zhon
  • a_zhon
  • 2017年03月14日 15:48
  • 1591

Android基于XMPP Smack Openfire下学习开发IM(四)单人聊天和多人聊天(发送消息、接收消息)

很久没有写博客了,回顾了一下原先学习的,接着没有写完的继续写咯。(ps:告诉大家一个秘密,其实写写博客对自己的帮助是非常大的哦~) 好了废话不多说,进入主题吧。 一、单人聊天 ...

Android基于XMPP Smack Openfire下学习开发IM(四)单人聊天和多人聊天(发送消息、接收消息)

很久没有写博客了,回顾了一下原先学习的,接着没有写完的继续写咯。(ps:告诉大家一个秘密,其实写写博客对自己的帮助是非常大的哦~) 好了废话不多说,进入主题吧。 一、单人聊天 ...

Android基于XMPP Smack Openfire下学习开发IM(四)单人聊天和多人聊天(发送消息、接收消息)

很久没有写博客了,回顾了一下原先学习的,接着没有写完的继续写咯。(ps:告诉大家一个秘密,其实写写博客对自己的帮助是非常大的哦~) 好了废话不多说,进入主题吧。 一、单人聊天 ...

Android基于XMPP Smack Openfire下学习开发IM(四)单人聊天和多人聊天(发送消息、接收消息)

很久没有写博客了,回顾了一下原先学习的,接着没有写完的继续写咯。(ps:告诉大家一个秘密,其实写写博客对自己的帮助是非常大的哦~) 好了废话不多说,进入主题吧。 一、单人聊天 ...

XMPP 实现推送,完善用户离线发送消息

关于服务器端向Android客户端的推送,主要有三种方式: 1.客户端定时去服务端取或者保持一个长Socket,从本质讲这个不叫推送,这是去服务端拽数据。但是实现简单,主要缺点:耗电等 2.Googl...

XMPP 发送消息,图片

在 AppDelegate.h类中添加两个属性 @property (strong,nonatomic) XMPPMessageArchiving * msgArchiving; @property...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:XMPP学习记录四:关于接受,发送消息和获取好友上下线的状态
举报原因:
原因补充:

(最多只允许输入30个字)