统一IM方案,Android端sdk
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

推送+IM.md 5.8KB

1 år sedan
1 år sedan
1 år sedan
1 år sedan
1 år sedan
1 år sedan
1 år sedan
1 år sedan
1 år sedan
1 år sedan
1 år sedan
1 år sedan
1 år sedan
1 år sedan
1 år sedan
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349
  1. [TOC]
  2. > 消息协议需要调研一下,需求可以服务端转发消息
  3. # 消息体
  4. ## 基础结构
  5. > 已读回执
  6. ```json
  7. {
  8. "id": "",
  9. "from": "",
  10. "to": "",
  11. "tenantNo": "",
  12. "target": "",
  13. "type": "Type",
  14. "content": {
  15. },
  16. "timestamp": 1675416709033,
  17. "isBackground": false
  18. }
  19. ```
  20. > 部分说明
  21. >
  22. > id 为发送端随机数,用来去重
  23. >
  24. > `单聊` -> from 发送者 to 接收者 服务器直接转发
  25. >
  26. > `群聊`-> 发送消息体:from发送者、to群、target接收者;接收消息体:from群、to接收者、target发送者
  27. ### Type
  28. ```java
  29. public enum MsgType {
  30. UNKNOWN(-1), // 未知消息
  31. TEXT(0), // 文本消息
  32. }
  33. ```
  34. ### 异常上报
  35. ### 文本(text)
  36. ```json
  37. {
  38. "text": ""
  39. }
  40. ```
  41. ### 图片(image)
  42. ```json
  43. {
  44. "storageId": "",
  45. "thumbnail": "",
  46. "thumbnailWidth": 100,
  47. "thumbnailHeight": 100
  48. }
  49. ```
  50. ### 语音(audio)
  51. ```json
  52. {
  53. "storageId": "",
  54. "duration": 152
  55. }
  56. ```
  57. ### 视频
  58. ```json
  59. {
  60. "storageId": "",
  61. "fileName": "",
  62. "fileSize": "",
  63. "duration": 100,
  64. "thumbnail": "",
  65. "thumbnailWidth": 100,
  66. "thumbnailHeight": 100
  67. }
  68. ```
  69. ### 文件
  70. ```json
  71. {
  72. "storageId": "",
  73. "fileName": "",
  74. "fileSize": "",
  75. "duration": 100,
  76. "mimeType": "video/3gpp"
  77. }
  78. ```
  79. ### 位置
  80. ```json
  81. ```
  82. ### 通知
  83. ```json
  84. {
  85. "title": "",
  86. "content": "",
  87. "action": "",
  88. "appid": "",
  89. "appName": "",
  90. "appLogo": "",
  91. "url": ""
  92. }
  93. ```
  94. ### 后台运行
  95. > 组织架构类,大数据,后台更新,已读回执
  96. >
  97. > 视频通话邀请
  98. ```json
  99. {
  100. "type": "",
  101. "content": {}
  102. }
  103. ```
  104. ### 音视频通话
  105. ```json
  106. {
  107. "status": "",
  108. "avType": "",
  109. "uid": "",
  110. "roomId": "",
  111. "timestamp": 1675416709033,
  112. "useTime": 1675416709033,
  113. "agoraKey": 1675416709033
  114. }
  115. ```
  116. >
  117. >status
  118. >
  119. > //邀请invite 拒绝refuse 取消cancel 超时timeout 占线busy
  120. >
  121. > // 已在其他设备接听other_answer(256推送消息)
  122. >
  123. > // 已在其他设备拒绝other_refuse(根据fromid == account判断)
  124. >
  125. > uid // 前端展示邀请人所用
  126. >
  127. > useTime //本地纪录的用时,单位秒
  128. >
  129. > agoraKey //声网key
  130. ```java
  131. enum OsType {
  132. IOS(1),
  133. ANDROID(2),
  134. WEB(3),
  135. WINDOWS(4),
  136. UNKNOWN(-1)
  137. }
  138. ```
  139. ### 应用消息
  140. > 区分子应用,提高分配效率
  141. >
  142. > 处方单
  143. ```json
  144. {
  145. "title": "",
  146. "content": "",
  147. "action": "",
  148. "appid": "",
  149. "appName": "",
  150. "appLogo": "",
  151. "url": ""
  152. }
  153. ```
  154. ### 扩展
  155. > 应对未定义消息,细微拓展。
  156. >
  157. ```json
  158. {}
  159. ```
  160. ## 消息收发机制
  161. ```mermaid
  162. sequenceDiagram
  163. Title: 基础流程(MQTT)
  164. actor APP
  165. actor SDK
  166. actor 服务端
  167. actor 厂商
  168. critical 启动
  169. SDK -->> SDK: 获取设备信息、生成唯一码、获取对应厂商的pushTOken,缓存本地
  170. APP ->> SDK: 服务初始化,提供userId
  171. SDK ->> 服务端: 提供设备信息、唯一码、pushToken以及userId,注册im服务
  172. 服务端 -->> 服务端: 保证每一个唯一码只有一个对应的pushToken等信息(历史唯一码标识只为注销),生成account。
  173. 服务端 ->> SDK: 返回account,im服务器信息(域名,端口等)
  174. SDK -->> SDK: 连接im服务,订阅account
  175. end
  176. critical 发送消息
  177. APP ->> SDK: 发送消息api
  178. SDK ->> 服务端: 整理消息发送
  179. alt 单聊
  180. 服务端->>服务端: 原消息留档后发送
  181. else 群聊
  182. 服务端->>服务端: 原消息留档后,重构消息,发送给群里所有人。<br/>
  183. end
  184. 服务端 ->> SDK: 消息送达
  185. 服务端 ->> 厂商: 根据是否开启推送以及sdk是否在线,决定是否需要厂商推送
  186. 厂商 ->> APP: 厂商推送
  187. SDK ->> SDK: 去重(?修改状态,是同id消息,还是消息体体现)<br/>、存表
  188. SDK ->> APP: 通知消息送达
  189. alt im推送
  190. APP ->> APP: 根据实际情况,决定是直接使用通知里的消息,还是查表获取。
  191. else 厂商推送
  192. APP ->> APP: 点击通知栏动作(服务端可以配置)
  193. end
  194. end
  195. critical 应用消息
  196. Note right of 服务端: 第三方服务获取token(权限认证,类似有appId获取autoTOken之类)
  197. Note right of 服务端: 设置群组api、标签api等
  198. Note right of 服务端: 调用发送消息api
  199. alt 单聊、群聊
  200. 服务端->>服务端: 原消息留档后发送指定人员或者群组
  201. else 所有人
  202. 服务端->>服务端: 原消息留档后,发送到所有用户
  203. end
  204. 服务端 ->> SDK: 消息送达
  205. 服务端 ->> 厂商: 根据是否开启推送以及sdk是否在线,决定是否需要厂商推送
  206. 厂商 ->> APP: 厂商推送
  207. SDK ->> SDK: 去重(?修改状态,是同id消息,还是消息体体现)<br/>、存表
  208. SDK ->> APP: 通知消息送达
  209. alt im推送
  210. APP ->> APP: 根据实际情况,决定是直接使用通知里的消息,还是查表获取。
  211. else 厂商推送
  212. APP ->> APP: 点击通知栏动作(服务端可以配置)
  213. end
  214. end
  215. critical 历史消息、离线消息
  216. alt 历史消息
  217. APP ->> SDK: 获取离线消息api
  218. SDK ->> 服务端: 获取离线消息(开始时间)
  219. 服务端 ->> SDK: 消息送达
  220. SDK ->> APP: 通知消息送达
  221. APP ->> APP: 查表获取
  222. else 离线消息
  223. APP ->> SDK: 获取历史消息api
  224. SDK ->> 服务端: 获取离线消息
  225. 服务端 ->> 服务端: 根据target判断是获取所有还是单人
  226. 服务端 ->> SDK: 消息送达
  227. SDK ->> APP: 通知消息送达
  228. APP ->> APP: 查表获取
  229. end
  230. end
  231. critical 注销、停用推送
  232. par 停用推送
  233. APP ->> SDK: 请求关闭推送
  234. SDK ->> 服务端: 请求关闭推送
  235. 服务端 -->> 服务端: 关闭推送标识(或者直接删除pushtoken?)
  236. and 注销
  237. APP ->> SDK: 注销
  238. SDK ->> 服务端: 注销
  239. 服务端 -->> 服务端: 针对这个account对应的唯一码,修改状态为已注销
  240. end
  241. end
  242. ```