init
这个提交包含在:
父节点
5c69fa0a02
当前提交
f883ae1daf
15
.gitmodules
vendored
普通文件
15
.gitmodules
vendored
普通文件
@ -0,0 +1,15 @@
|
||||
[submodule "ImRn"]
|
||||
path = ImRn
|
||||
url = https://gitea.51trust.net/xuqinmin/ImRn.git
|
||||
[submodule "ImWx"]
|
||||
path = ImWx
|
||||
url = https://gitea.51trust.net/xuqinmin/ImWx.git
|
||||
[submodule "ImJs"]
|
||||
path = ImJs
|
||||
url = https://gitea.51trust.net/xuqinmin/ImJs.git
|
||||
[submodule "ImServer"]
|
||||
path = ImServer
|
||||
url = https://gitea.51trust.net/xuqinmin/ImServer.git
|
||||
[submodule "ImAndroid"]
|
||||
path = ImAndroid
|
||||
url = https://gitea.51trust.net/xuqinmin/ImAndroid.git
|
||||
1
ImAndroid
子模块
1
ImAndroid
子模块
@ -0,0 +1 @@
|
||||
Subproject commit 6d410f67a82344cd57763ead07a864447455258f
|
||||
1
ImJs
子模块
1
ImJs
子模块
@ -0,0 +1 @@
|
||||
Subproject commit e9a227130643f13dc09955327fb5a2ee57b84ee0
|
||||
1
ImRn
子模块
1
ImRn
子模块
@ -0,0 +1 @@
|
||||
Subproject commit 79256fbb1b3a4fad1132ee149f4ab0e100067247
|
||||
1
ImServer
子模块
1
ImServer
子模块
@ -0,0 +1 @@
|
||||
Subproject commit 282589852347d1155a84217a229a871c6f5ace6e
|
||||
1
ImWx
子模块
1
ImWx
子模块
@ -0,0 +1 @@
|
||||
Subproject commit 94c9f58904fa665ea6d456166acc5d97ba870e9e
|
||||
208
推送+IM(服务端).md
普通文件
208
推送+IM(服务端).md
普通文件
@ -0,0 +1,208 @@
|
||||
# 接口列表
|
||||
|
||||
## 注册(register)
|
||||
|
||||
### 请求参数
|
||||
|
||||
```json
|
||||
{
|
||||
"uuid": "设备唯一码,第一次安装应用时,生成存储与用户存储,后续开启查找该文档,如果存在则直接使用,不存在则重新生成存储。该方案可避免出现获取设备信息权限。",
|
||||
"device": "Android、ios、pc、web、小程序...",
|
||||
"username": "用户标识,该服务不对接用户体系,所以改标识作为用户唯一码使用。",
|
||||
"pushToken": "厂商通道的推送id。"
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
> 注册推送服务时`username`是否可以保证唯一。
|
||||
|
||||
|
||||
|
||||
### 返回参数
|
||||
|
||||
```json
|
||||
{
|
||||
"account": "根据请求参数生成,用于登录im和声网"
|
||||
}
|
||||
```
|
||||
|
||||
## 注销(logout)
|
||||
|
||||
> 服务端删除(假)该uuid对应的account以及pushToken
|
||||
>
|
||||
> 保证当前设备不再收到消息,但是其它设备可以
|
||||
|
||||
### 关闭随送
|
||||
|
||||
> 关闭后,所有消息只走im,不再走厂商推送。
|
||||
>
|
||||
> 直观表现在与,app端如果不打开应用,则无法收到消息。
|
||||
|
||||
|
||||
|
||||
## 离线消息转发与缓存
|
||||
|
||||
> 其实可以理解为过滤,也是和谐功能的入口。
|
||||
>
|
||||
> 也是群消息的重组转发所在。
|
||||
>
|
||||
> ```json
|
||||
> {
|
||||
> "id": "bukjsafabsj4541536$#@",
|
||||
> "from": "user001",
|
||||
> "to": "推送开发组",
|
||||
> "target": "user001",
|
||||
> "type": "text",
|
||||
> "content": {
|
||||
> "text": ""
|
||||
> },
|
||||
> "timestamp": 1675416709033,
|
||||
> "isBackground": false
|
||||
> }
|
||||
>
|
||||
> ```
|
||||
>
|
||||
> ```json
|
||||
> {
|
||||
> "id": "bukjsafabsj4541536$#@",
|
||||
> "from": "推送开发组",
|
||||
> "to": "user002",
|
||||
> "target": "user001",
|
||||
> "type": "text",
|
||||
> "content": {
|
||||
> "text": ""
|
||||
> },
|
||||
> "timestamp": 1675416709033,
|
||||
> "isBackground": false
|
||||
> }
|
||||
>
|
||||
> ```
|
||||
>
|
||||
>
|
||||
>
|
||||
> 这里需要考虑,怎么能把account和username等信息关联起来,保证查询离线消息时候,可以把其它设备的消息同步查询出来,并且不会出现错乱。
|
||||
>
|
||||
> 注册推送服务时`username`是否可以保证唯一。
|
||||
|
||||
|
||||
|
||||
## 和谐词配置
|
||||
|
||||
>
|
||||
|
||||
|
||||
|
||||
## 离线消息
|
||||
|
||||
### 请求参数
|
||||
|
||||
```json
|
||||
{
|
||||
"timeStamp": "",
|
||||
"account": ""
|
||||
}
|
||||
```
|
||||
|
||||
> 返回所有缓存的离线消息,自`timeStamp`开始至当前消息
|
||||
>
|
||||
> 返回消息的方式,是直接走接口返回值携带,还是通过im发送。
|
||||
|
||||
|
||||
|
||||
## 历史消息
|
||||
|
||||
### 请求参数
|
||||
|
||||
```json
|
||||
{
|
||||
"startTimeStamp": "",
|
||||
"endTimeStamp": "",
|
||||
"account": "",
|
||||
"target":""
|
||||
}
|
||||
```
|
||||
|
||||
> `target`非必传,区分单个用户的消息,还是全部消息
|
||||
|
||||
```json
|
||||
{
|
||||
"timeStamp": "当前时间戳",
|
||||
"account": "",
|
||||
"target":"",
|
||||
"start":1,
|
||||
"end":10
|
||||
}
|
||||
```
|
||||
|
||||
>从当前时间戳开始,向上查找第1到10条数据。
|
||||
>
|
||||
>使用场景,单聊上滑查看历史消息。
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## 发送消息
|
||||
|
||||
> 应用对接,直接调用接口发消息
|
||||
>
|
||||
> 系统通知
|
||||
>
|
||||
> 部分业务变更通知
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
366
推送+IM.md
普通文件
366
推送+IM.md
普通文件
@ -0,0 +1,366 @@
|
||||
[TOC]
|
||||
|
||||
> 消息协议需要调研一下,需求可以服务端转发消息
|
||||
|
||||
|
||||
|
||||
# 消息体
|
||||
|
||||
## 基础结构
|
||||
|
||||
```json
|
||||
{
|
||||
"id": "",
|
||||
"from": "",
|
||||
"to": "",
|
||||
"tenantNo": "",
|
||||
"target": "",
|
||||
"type": "Type",
|
||||
"content": {
|
||||
|
||||
},
|
||||
"timestamp": 1675416709033,
|
||||
"isBackground": false
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
> 部分说明
|
||||
>
|
||||
> id 为发送端随机数,用来去重
|
||||
>
|
||||
> `单聊` -> from 发送者 to 接收者 服务器直接转发
|
||||
>
|
||||
> `群聊`-> 发送消息体:from发送者、to群、target接收者;接收消息体:from群、to接收者、target发送者
|
||||
|
||||
|
||||
|
||||
### Type
|
||||
|
||||
```java
|
||||
public enum MsgType {
|
||||
UNKNOWN(-1), // 未知消息
|
||||
TEXT(0), // 文本消息
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
|
||||
### 异常上报
|
||||
|
||||
|
||||
|
||||
### 文本(text)
|
||||
|
||||
```json
|
||||
{
|
||||
"text": ""
|
||||
}
|
||||
```
|
||||
|
||||
### 图片(image)
|
||||
|
||||
```json
|
||||
{
|
||||
"storageId": "",
|
||||
"thumbnail": "",
|
||||
"thumbnailWidth": 100,
|
||||
"thumbnailHeight": 100
|
||||
}
|
||||
```
|
||||
|
||||
### 语音(audio)
|
||||
|
||||
```json
|
||||
{
|
||||
"storageId": "",
|
||||
"duration": 152
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
### 视频
|
||||
|
||||
```json
|
||||
{
|
||||
"storageId": "",
|
||||
"fileName": "",
|
||||
"fileSize": "",
|
||||
"duration": 100,
|
||||
"thumbnail": "",
|
||||
"thumbnailWidth": 100,
|
||||
"thumbnailHeight": 100
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
### 文件
|
||||
|
||||
```json
|
||||
{
|
||||
"storageId": "",
|
||||
"fileName": "",
|
||||
"fileSize": "",
|
||||
"duration": 100,
|
||||
"mimeType": "video/3gpp" // 非必须
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
### 位置
|
||||
|
||||
```json
|
||||
```
|
||||
|
||||
### 通知
|
||||
|
||||
```json
|
||||
{
|
||||
"title": "",
|
||||
"content": "",
|
||||
"action": "",
|
||||
"appid": "",
|
||||
"appName": "",
|
||||
"appLogo": "",
|
||||
"url": ""
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
### 后台运行
|
||||
|
||||
> 组织架构类,大数据,后台更新
|
||||
>
|
||||
> 视频通话邀请
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "",
|
||||
"content": {}
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
|
||||
### 音视频通话
|
||||
|
||||
|
||||
```json
|
||||
{
|
||||
"status": "",
|
||||
"avType": "",
|
||||
"uid": "",
|
||||
"roomId": "",
|
||||
"timestamp": 1675416709033,
|
||||
"useTime": 1675416709033,
|
||||
"agoraKey": 1675416709033
|
||||
}
|
||||
```
|
||||
|
||||
>
|
||||
>status
|
||||
>
|
||||
> //邀请invite 拒绝refuse 取消cancel 超时timeout 占线busy
|
||||
>
|
||||
> // 已在其他设备接听other_answer(256推送消息)
|
||||
>
|
||||
> // 已在其他设备拒绝other_refuse(根据fromid == account判断)
|
||||
>
|
||||
> uid // 前端展示邀请人所用
|
||||
>
|
||||
> useTime //本地纪录的用时,单位秒
|
||||
>
|
||||
> agoraKey //声网key
|
||||
|
||||
```java
|
||||
enum OsType {
|
||||
IOS(1),
|
||||
ANDROID(2),
|
||||
WEB(3),
|
||||
WINDOWS(4),
|
||||
UNKNOWN(-1);
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
|
||||
### 应用消息
|
||||
|
||||
> 区分子应用,提高分配效率
|
||||
>
|
||||
> 处方单
|
||||
|
||||
```json
|
||||
{
|
||||
"title": "",
|
||||
"content": "",
|
||||
"action": "",
|
||||
"appid": "",
|
||||
"appName": "",
|
||||
"appLogo": "",
|
||||
"url": ""
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
|
||||
|
||||
### 扩展
|
||||
|
||||
> 应对未定义消息,细微拓展。
|
||||
>
|
||||
|
||||
```json
|
||||
{}
|
||||
```
|
||||
|
||||
|
||||
|
||||
## 消息收发机制
|
||||
|
||||
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
Title: 基础流程(MQTT)
|
||||
actor APP
|
||||
actor SDK
|
||||
actor 服务端
|
||||
actor 厂商
|
||||
|
||||
critical 启动
|
||||
SDK -->> SDK: 获取设备信息、生成唯一码、获取对应厂商的pushTOken,缓存本地
|
||||
APP ->> SDK: 服务初始化,提供userId
|
||||
SDK ->> 服务端: 提供设备信息、唯一码、pushToken以及userId,注册im服务
|
||||
服务端 -->> 服务端: 保证每一个唯一码只有一个对应的pushToken等信息(历史唯一码标识只为注销),生成account。
|
||||
服务端 ->> SDK: 返回account,im服务器信息(域名,端口等)
|
||||
SDK -->> SDK: 连接im服务,订阅account
|
||||
end
|
||||
|
||||
critical 发送消息
|
||||
APP ->> SDK: 发送消息api
|
||||
SDK ->> 服务端: 整理消息发送
|
||||
alt 单聊
|
||||
服务端->>服务端: 原消息留档后发送
|
||||
else 群聊
|
||||
服务端->>服务端: 原消息留档后,重构消息,发送给群里所有人。<br/>
|
||||
end
|
||||
服务端 ->> SDK: 消息送达
|
||||
服务端 ->> 厂商: 根据是否开启推送以及sdk是否在线,决定是否需要厂商推送
|
||||
厂商 ->> APP: 厂商推送
|
||||
SDK ->> SDK: 去重(?修改状态,是同id消息,还是消息体体现)<br/>、存表
|
||||
SDK ->> APP: 通知消息送达
|
||||
alt im推送
|
||||
APP ->> APP: 根据实际情况,决定是直接使用通知里的消息,还是查表获取。
|
||||
else 厂商推送
|
||||
APP ->> APP: 点击通知栏动作(服务端可以配置)
|
||||
end
|
||||
end
|
||||
|
||||
critical 应用消息
|
||||
Note right of 服务端: 第三方服务获取token(权限认证,类似有appId获取autoTOken之类)
|
||||
Note right of 服务端: 设置群组api、标签api等
|
||||
Note right of 服务端: 调用发送消息api
|
||||
alt 单聊、群聊
|
||||
服务端->>服务端: 原消息留档后发送指定人员或者群组
|
||||
else 所有人
|
||||
服务端->>服务端: 原消息留档后,发送到所有用户
|
||||
end
|
||||
服务端 ->> SDK: 消息送达
|
||||
服务端 ->> 厂商: 根据是否开启推送以及sdk是否在线,决定是否需要厂商推送
|
||||
厂商 ->> APP: 厂商推送
|
||||
SDK ->> SDK: 去重(?修改状态,是同id消息,还是消息体体现)<br/>、存表
|
||||
SDK ->> APP: 通知消息送达
|
||||
alt im推送
|
||||
APP ->> APP: 根据实际情况,决定是直接使用通知里的消息,还是查表获取。
|
||||
else 厂商推送
|
||||
APP ->> APP: 点击通知栏动作(服务端可以配置)
|
||||
end
|
||||
end
|
||||
|
||||
critical 历史消息、离线消息
|
||||
|
||||
alt 历史消息
|
||||
APP ->> SDK: 获取离线消息api
|
||||
SDK ->> 服务端: 获取离线消息(开始时间)
|
||||
服务端 ->> SDK: 消息送达
|
||||
SDK ->> APP: 通知消息送达
|
||||
APP ->> APP: 查表获取
|
||||
else 离线消息
|
||||
APP ->> SDK: 获取历史消息api
|
||||
SDK ->> 服务端: 获取离线消息
|
||||
服务端 ->> 服务端: 根据target判断是获取所有还是单人
|
||||
服务端 ->> SDK: 消息送达
|
||||
SDK ->> APP: 通知消息送达
|
||||
APP ->> APP: 查表获取
|
||||
end
|
||||
end
|
||||
|
||||
critical 注销、停用推送
|
||||
par 停用推送
|
||||
APP ->> SDK: 请求关闭推送
|
||||
SDK ->> 服务端: 请求关闭推送
|
||||
服务端 -->> 服务端: 关闭推送标识(或者直接删除pushtoken?)
|
||||
and 注销
|
||||
APP ->> SDK: 注销
|
||||
SDK ->> 服务端: 注销
|
||||
服务端 -->> 服务端: 针对这个account对应的唯一码,修改状态为已注销
|
||||
end
|
||||
end
|
||||
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
二进制
条件结构流程图.pdf
普通文件
二进制
条件结构流程图.pdf
普通文件
二进制文件未显示。
正在加载...
在新工单中引用
屏蔽一个用户