1. 前言
前面已经介绍过,消息推送功能由im-server实现,并且已经封装了sdk(im-client)。
现在我们把消息推送功能看成一个黑盒,暂时不深究它的具体实现,本小节的目标是在im-platform中集成im-client,集成之后,im-platform只需要调用im-client的api,就能够把消息推送到前端
同样,如果您企业中的项目需要集成消息推送功能,也是同样的接入方式,只是将im-platform替换成您的服务
2. im-client相关API介绍
2.1. API列表
API |
说明 |
sendPrivateMessage |
推送私聊消息 |
sendGroupMessage |
推送群聊消息 |
sendSystemMessage |
推送系统消息 |
isOnline |
用户是否在线 |
2.2. 私聊消息API参数
参数 |
类型 |
必填 |
说明 |
sender |
IMUserInfo |
是 |
发送方的信息,包括发送方的id和终端类型 |
recvId |
Long |
是 |
接收方id |
recvTerminals |
List<Integer> |
否 |
接收者的终端类型,默认全部 |
sendToSelf |
Boolean |
否 |
是否发送给自己的其他终端,默认true |
sendResult |
Boolean |
否 |
是否需要回推发送结果,默认true |
data |
泛型 |
是 |
消息内容,类型由应用层定义 |
2.3. 群聊消息API参数
参数 |
类型 |
必填 |
说明 |
sender |
IMUserInfo |
是 |
发送方的信息,包括发送方的id和终端类型 |
recvIds |
List<Long> |
否 |
接收者id列表(一般填群成员id,为空则不会推送) |
recvTerminals |
List<Integer> |
否 |
接收者终端类型,默认所有类型 |
sendToSelf |
Boolean |
否 |
是否需要同时推送给自己的其他终端,默认true |
sendResult |
Boolean |
否 |
是否需要回推发送结果,默认true |
data |
泛型 |
是 |
消息内容,类型由应用层定义 |
2.4. 系统消息API参数
参数 |
类型 |
必填 |
说明 |
recvIds |
List<Long> |
否 |
接收者id列表(一般填群成员id,为空则不会推送) |
recvTerminals |
List<Integer> |
否 |
接收者终端类型,默认所有类型 |
sendResult |
Boolean |
否 |
是否需要回推发送结果,默认true |
data |
泛型 |
是 |
消息内容,类型由应用层定义 |
3. 快速接入
3.1. 后端接入
3.1.1. 在im-platform的pom.xml中引入im-client依赖
注:上面的依赖包目前并没有上传到公开仓库,需要自行编译并上传到自己的maven私仓,或者直接把代码整合到自己的项目
3.1.2. 消息推送使用了redis充当MQ进行通信,所以要在application.yml中配置redis地址
3.1.3. 调用IMClient的API进行消息推送
推送私聊消息代码样例(群聊和系统消息也是类似的方式,不再赘述):
3.1.4. 监听发送结果
如果需要监听消息推送的结果,需要以下两步:
- 编写消息监听类,实现MessageListener,并加上@IMListener
- 发送消息时指定sendResult字段为true
监听器类代码样例:
3.2. 前端接入
3.2.1. 将wssocket.js放到im-web中的/api目录
3.2.2. 接收消息
前端代码样例:
4. 实现聊天功能(私聊+群聊)
当我们的im-platform集成im-client之后,实现私聊和群聊功能就会变得非常简单,通过简单的crud以及调用api即可实现。
以下是聊天相关的业务代码(代码比较简单,小伙伴可以自行阅读):
类名 |
方法 |
说明 |
PrivateMessageServiceImpl |
sendMessage |
推送私聊消息 |
GroupMessageServiceImpl |
sendMessage |
推送群聊消息 |
PrivateMessageListener |
process |
监听私聊消息结果,消息发送成功后,状态修改为送达 |
GroupMessageListener |
process |
监听群聊消息结果,暂时没实际作用 |
暂无评论内容