XMPPFrameWork IOS 开发(四)消息和好友上下线
消息
//收到消息
- (void)xmppStream:(XMPPStream *)sender didReceiveMessage:(XMPPMessage *)message{ // NSLog(@"message = %@", message);
//消息的内容
NSString *msg = [[message elementForName:@"body"] stringValue];
//消息发送者
NSString *from = [[message attributeForName:@"from"] stringValue]; /****在此处****/
//通知聊天页面有新消息,需要处理 }
发送消息
//发送消息的xml格式
<message from='发送者账号'
to='接收者账号'
type='chat'>
<body>HELLO WORLD </body>
</message>
//代码组装
NSString *message = @"HELLO WORLD";
NSXMLElement *body = [NSXMLElement elementWithName:@"body"];
[body setStringValue:message]; //生成XML消息文档
NSXMLElement *mes = [NSXMLElement elementWithName:@"message"];
//消息类型
[mes addAttributeWithName:@"type" stringValue:@"chat"];
//发送给谁
[mes addAttributeWithName:@"to" stringValue:@"接受者账号"];
//由谁发送
[mes addAttributeWithName:@"from" stringValue:@"发送者账号"];
//组合
[mes addChild:body]; //发送消息
[[self xmppStream] sendElement:mes];
好友上下线通知
- (void)xmppStream:(XMPPStream *)sender didReceivePresence:(XMPPPresence *)presence
{
//取得好友状态
NSString *presenceType = [presence type]; //online/offline
//当前用户
NSString *userId = [[sender myJID] user];
//在线用户
NSString *presenceFromUser = [[presence from] user];
/*
//如果不是自己,如果涉及多段登录,此处最好加上else,如果是自己离线的话,调用上线协议
XMPPPresence *presence = [XMPPPresence presence];
[[self xmppStream] sendElement:presence];
*/
if (![presenceFromUser isEqualToString:userId])
{
//用户在线
if ([presenceType isEqualToString:@"available"])
{
//列表和数据库都要相应改变
}else if ([presenceType isEqualToString:@"unavailable"])//用户不在线
{
//列表和数据库都要相应改变
}
}
}
XMPPFrameWork IOS 开发(四)消息和好友上下线的更多相关文章
- xmpp 消息和好友上下线(3)
原始地址:XMPPFrameWork IOS 开发(四) 消息 //收到消息 - (void)xmppStream:(XMPPStream *)sender didReceiveMessage:(XM ...
- XMPPFrameWork IOS 开发(一)xmpp简介
原始地址:XMPPFrameWork IOS 开发(一) XMPP : The Extensible Messaging and Presence Protocol 中文全称: 可扩展通讯和表示协议 ...
- XMPPFrameWork IOS 开发(二)- xcode配置
原始地址:XMPPFrameWork IOS 开发(二) 译文地址: Getting started using XMPPFramework on iOS 介绍 ios上的XMPPFramewor ...
- XMPPFrameWork IOS 开发(六)聊天室
原始地址:XMPPFrameWork IOS 开发(六)聊天室 聊天室 //初始化聊天室 XMPPJID *roomJID = [XMPPJID jidWithString:ROOM_JID]; xm ...
- Delphi for iOS开发指南(1):在Mac上配置你的开发环境
http://cache.baiducontent.com/c?m=9d78d513d99516f11ab7cf690d678c3b584380122ba7a0020fd18438e4732b4050 ...
- XMPPFrameWork IOS 开发(三)登录
原始地址:XMPPFrameWork IOS 开发(三) XMPP中常用对象们: XMPPStream:xmpp基础服务类 XMPPRoster:好友列表类 XMPPRosterCoreDataSto ...
- iOS开发网络篇—文件的上传
iOS开发网络篇—文件的上传 说明:文件上传使用的时POST请求,通常把要上传的数据保存在请求体中.本文介绍如何不借助第三方框架实现iOS开发中得文件上传. 由于过程较为复杂,因此本文只贴出部分关键代 ...
- iOS 开发http post 文件的上传
iOS开发网络篇—文件的上传 说明:文件上传使用的时POST请求,通常把要上传的数据保存在请求体中.本文介绍如何不借助第三方框架实现iOS开发中得文件上传. 由于过程较为复杂,因此本文只贴出部分关键代 ...
- iOS开发——远程消息推送的实现
在我们使用App的过程中.总是会收到非常多的消息推送.今天我们就要来实现这个功能.首先消息推送分为本地消息推送和远程消息推送.而当中又以远程消息最为经常使用. 可是在推送远程消息之前.有两个前提条件. ...
随机推荐
- 【Sql Server】Sql语句整理
use Person <--添加约束--> Alter table Student alter column Sno ) not null; Alter table Student Add ...
- OOD沉思录 --- 类和对象的关系 --- 使用关系原则
4.1 尽量减少类的协作的数量,即减少使用者和被使用者的数量. 协作意味着一定程度的耦合,但是完全没有协作的类也是没有意义的,最多只能作为一个库使用. 通过抽象,依赖接口,可以最大程度减少依赖的实现类 ...
- SQL必知必会 -------- order by、where等
一.排序检索数据 1.排序数据:SELECT prod_name FROM Products ORDER BY prod_name(对prod_name列以字母顺序排序数据) ORDER BY子句的位 ...
- disconf-web 分布式配置管理平台
一.需求 实现分布式配置中心:(1)集中管理外部依赖的服务配置和服务内部配置(2)提供web管理平台进行配置和查询(3)支持服务注册与发现(4)支持客户端拉取配置(5)支持订阅与发布,配置变更主动通知 ...
- java 读入文件 FileInputStream
package com.mkyong.io; import java.io.File; import java.io.FileInputStream; import java.io.IOExcepti ...
- 由字符串反转(使用递归)引申出来一道Java面试题
如何面试一个从事编程工作的开发人员既困难又乏味,幸好还有很多值得参考的指南,比如:<Joel Guerilla Guide to interviewing>,但最后雇佣与否,还得由你自己决 ...
- 【BZOJ 4305】 4305: 数列的GCD (数论)
4305: 数列的GCD Description 给出一个长度为N的数列{a[n]},1<=a[i]<=M(1<=i<=N). 现在问题是,对于1到M的每个整数d,有多少个不 ...
- bzoj 2152
/************************************************************** Problem: 2152 User: idy002 Language: ...
- bzoj 4439: [Swerc2015]Landscaping -- 最小割
4439: [Swerc2015]Landscaping Time Limit: 2 Sec Memory Limit: 512 MB Description FJ有一块N*M的矩形田地,有两种地形 ...
- JQ 使用模板
1.首先需要添加模板JS文件,