XMPPFramework是一个OS X/iOS平台的开源项目,使用Objective-C实现了XMPP协议(RFC-3920),同时还提供了用于读写XML的工具,大大简化了基于XMPP的通信应用的开发。
1. 登录和好友上下线
1.1XMPP中常用对象们
- XMPPStream:xmpp基础服务类
- XMPPRoster:好友列表类
- XMPPRosterCoreDataStorage:好友列表(用户账号)在core data中的操作类
- XMPPvCardCoreDataStorage:好友名片(昵称,签名,性别,年龄等信息)在core data中的操作类
- XMPPvCardTemp:好友名片实体类,从数据库里取出来的都是它
- xmppvCardAvatarModule:好友头像
- XMPPReconnect:如果失去连接,自动重连
- XMPPRoom:提供多用户聊天支持
- XMPPPubSub:发布订阅
1.2登录操作,也就是连接xmpp服务器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
connect成功之后会依次调用XMPPStreamDelegate的方法,首先调用
1 2 3 |
|
然后
1 |
|
在该方法下面需要使用xmppStream 的authenticateWithPassword方法进行密码验证,成功的话会响应delegate的方法,就是下面这个
1 |
|
1.3上线
实现 - (void)xmppStreamDidAuthenticate:(XMPPStream *)sender 委托方法
1 2 3 4 |
|
1.4退出并断开连接
1 2 3 4 5 6 |
|
1.5好友状态
获取好友状态,通过实现
1 2 3 |
|
方法,当接收到 presence 标签的内容时,XMPPFramework 框架回调该方法
一个 presence 标签的格式一般如下:
presence 的状态:
- available 上线
- away 离开
- do not disturb 忙碌
- unavailable 下线
1 2 3 4 5 6 7 8 9 10 11 |
|
2. 接收消息和发送消息
2.1接收消息
通过实现
1 |
|
方法
当接收到 message 标签的内容时,XMPPFramework 框架回调该方法
根据 XMPP 协议,消息体的内容存储在标签 body 内
1 2 3 |
|
2.2发送消息
发送消息,我们需要根据 XMPP 协议,将数据放到标签内,例如:
1 2 3 4 5 6 7 8 9 10 |
|
3. 获取好友信息和删除好友
3.1好友列表和好友名片
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
3.2添加好友
1 2 3 4 5 6 7 8 9 |
|
3.3收到添加好友的请求
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
3.4删除好友
1 2 3 4 5 6 7 |
|
4. 聊天室
初始化聊天室
1 2 3 4 5 6 |
|
创建聊天室成功
1 2 3 4 |
|
加入聊天室,使用昵称
1 |
|
获取聊天室信息
1 2 3 4 5 6 7 |
|
如果房间存在,会调用委托
1 2 3 4 5 6 |
|
房间不存在,调用委托
1 2 3 |
|
离开房间
1 |
|
XMPPRoomDelegate的其他代理方法:
离开聊天室
1 2 3 4 |
|
新人加入群聊
1 2 3 4 |
|
有人退出群聊
1 2 3 4 |
|
有人在群里发言
1 2 3 4 |
|
5. 消息回执
这个是XEP-0184协议的内容
协议内容:
发送消息时附加回执请求
代码实现
1 2 3 4 5 6 7 |
|
收到回执请求的消息,发送回执
代码实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
|
6. 添加AutoPing
为了监听服务器是否有效,增加心跳监听。用XEP-0199协议,在XMPPFrameWork框架下,封装了 XMPPAutoPing
和 XMPPPing两个类都可以使用,因为XMPPAutoPing已经组合进了XMPPPing类,所以XMPPAutoPing使用起来更方便。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
|