框架选用
- 服务器使用的是openfire的开源框架
- iOS使用的是xmppFramework 见下文
- Android使用的是smack (aSmack 已经弃用,目前使用的是 smack )
- 本文不过多记录实现,具体实现自行百度。
目标
1 服务器
- 用户的创建
- 用户的注销
- 群组的创建
- 群组的注销
- 好友的添加
- 好友的删除
- 用户信息设置获取
- 支持私聊推送
2 手机端
- 基本收发
- 文本 TextMessage
- 图片 ImageMessage
- 语音 VoiceMessage
- 位置 LocMessage
- 短视频 VideoMessage
- GIF GifMessage
- 用户信息的更新 主要是头像
- 消息的本地数据库存储 (服务器不存储消息)
- 支持群和私聊
- 支持好友管理
- 支持私聊推送
定义
- 图片、语音、短视频、gif 都是通过base64转码解码完成传输,这样不占用服务器资源。
- 消息本地存储,也就是删除app或者换手机 获取不到历史记录 类似微信。
- 群聊天会话由服务器管理,本地更新。私聊聊天会话app管理。
手机端大致需要的表及字段
消息表
messageId // 唯一标示 建议用时间戳
userId // 当前用户ID
chatId // 该消息归属会话ID
sendTime
text
messageState //消息状态 发送中 失败 成功
messageType //消息类型
bubbleMessageType //收or发
imageName
imageWidth
imageHeight
imageData //可以复用text字段
videoName
videoData //可以复用text字段
voiceName
voiceData //可以复用text字段
voiceDuration
locationName
lon
lat
gifName
gifData //可以复用text字段
gifWidth
gifHeight
用户表
userId userName nickName header sex checkUpdate
//checkUpdate 的作用见下文。
会话表
userId chatId title url info chatType
//chatType 现目标支持两种:群聊(group)私聊(private)。
//当chatType=group时 实际上chatId为群聊ID 相反则为 聊天对象的userId
好友表
pkid userId friendId contactsGroupId;
//pkid 主键 contactsGroupId 好友群组ID 注意:和聊天群不是一个意思。
好友群组表
contactsGroupId contactsGroupName;
群成员表
chatId userId;
消息收发及显示流程的简单描述
用户信息更新
xmpp一些字段的使用
type:
- 聊天 chat 仅处理type节点为chat
body:
消息内容 对应 text字段
可以自己添加节点字段。
拟
file base64字符串
fileType 文件格式
messageType
- 文本 TextMessage
- 图片 ImageMessage
- 语音 VoiceMessage
- 位置 LocMessage
- 短视频 VideoMessage
- GIF GifMessage
对应 messageType字段
参考:
http://myopenfire.com
ios xmpp框架
ios界面参考
ios数据库参考
直接操作数据库数据来为Openfire注册新用户 未验证
openfire插件开发
smack+openfire插件实现广播。向所有在线用户发送消息. 未验证
openfire 群聊持久化插件 未验证
openfire 离线消息推送插件