统一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.

程序设计.md 4.4KB

1 år sedan
1 år sedan
1 år sedan
1 år sedan
1 år sedan
1 år sedan
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. # 1. 启动
  2. ## 1.1. 初始化
  3. ### 1.1.1 移动端
  4. > 获取设备信息,生成设备唯一码,注册推送服务获取pushToken
  5. > 避免应用权限等问题,`设备唯一码`使用自主生成,本地缓存的方式处理。
  6. >
  7. > sdk初始化时,读取`设备唯一码`缓存,如果存在则直接使用,如果不存在则重新生成并且保存。
  8. ### 1.1.2 web端
  9. > 获取设备信息,获取唯一码。目的区分登录设备。
  10. ## 1.2. 注册服务
  11. > 客户端用户登录之后,使用`userId`调用sdk注册接口,获取`account`以及`IM服务器信息`。然后订阅该`account`对应的消息通道
  12. >
  13. > 这一步,可以定义一些非必传信息,比如`userName`一类,后续用户数据展示的时候方便一些。
  14. > 服务端根据设备类型(type)、唯一码(uuid)、userId等信息,生成对应account。
  15. >
  16. > 1.`type`和`uuid`都一样,但是`userId`不同,代表用户同一设备切换了登录用户。重新生成account,之前的account需要废除。
  17. >
  18. > 2.`userId`相同,`type`或`uuid`不同,代表同一用户,在不同设备登录。这时需要发送异地登录消息。
  19. > 移动端注册服务时,需要配置是否需要互踢,(同类型设备互踢、所有设备互踢)-----这个配置放在哪里比较合适?
  20. >
  21. > 这配置主要用来服务端注销推送服务,互踢的情况下,后登录的app端可以收到推送,前面登录的收不到。
  22. >
  23. > 真实的互踢功能,需要客户端根据`异地登录消息`自行开发。
  24. # 2. 发送消息
  25. ## 2.1. 基础消息
  26. > 客户端调用sdk发消息的api。sdk封装消息体,与服务端交互。
  27. >
  28. > `单聊`:直接转发;`群聊`:服务端改变消息体结构,轮询转发。
  29. >
  30. > 服务端对消息做转发处理。`存档`、`屏蔽词`等在这里处理。
  31. >
  32. > `推送相关操作在这里进行`
  33. >
  34. > 如果存在需要改变状态的消息,可以发送自定义消息,自定义消息体,判断id是否相同。
  35. >
  36. > sdk收到消息后,app端存表,之后发出消息到达通知,其它端直接发送通知。
  37. >
  38. > 通知需携带消息内容
  39. >
  40. > 需要考虑,推送机制,聊天消息,是否每条都要发送推送。
  41. >
  42. > 或者考虑sdk开放配置,客户端决定自己的推送时机
  43. ## 2.2 应用消息、广播通知、后台变更等消息
  44. >这一类消息大多是第三方服务直接构建消息体,调用服务端api发送。
  45. >
  46. >服务端需要做应用维护,分发appId,做autoToken生成机制,用来调用接口
  47. > 这一类消息产生的需求,单人推送和群推送,需要服务端暴漏接口,用来做群组,成员标签相关的处理。
  48. > 应用消息和通知类,是需要做推送的。
  49. >
  50. > 需要用户定义消息栏点击操作,打开应用,跳转指定页面,打开网页等。
  51. ## 2.3 历史消息、离线消息
  52. > 历史消息是一个时间段查询,随意定义开始结束时间,可以选择指定成员。
  53. > 离线消息,是截至某一时间之后的所有新消息,需要前端维护这个差分时间。
  54. # 3.注销、停用推送
  55. ## 3.1注销
  56. > 使用场景大多为,用户退出登录、客户端切换账号等。
  57. >
  58. > 切换账号客户端需要维护,但是服务端需要判断设备唯一码与userId的关系,避免一台机器同时收到两个用户的消息。
  59. ## 3.2启停推送
  60. > 考虑一个场景,用户想要主动关闭推送的话,给一个配置。
  61. >
  62. > 延伸出一个场景,免打扰模式,定义时间段内不接受推送。
  63. # 4.日志收集
  64. > 日志部分,可以使用im直接传输到服务端。
  65. # 5.数据库
  66. > app端sdk,考虑集成数据库模块,提高相应速率,增加容错率。
  67. >
  68. > 比如用户单聊,打开页面直接就可以看到数据。省区调用接口的时间。
  69. # 6.音视频聊天
  70. > 使用声网sdk完成,做成独立模块,后续如果需要更换,可以直接拔插。
  71. >
  72. > 以单聊举例:
  73. >
  74. > ​ a对b发起视频聊天,sdk所做的事情为:生成一个声网房间号,a用户加入该房间,发送im邀请通知。
  75. >
  76. > ​ b用户收到通知后,弹出邀请界面,如果接通,则直接进入消息携带的房间号,完成通话。
  77. >
  78. > ​ 拒绝,超时等场景,根据实际情况设计。
  79. # 7.UI
  80. > 考虑选择图片、选择文件、音视频通话,sdk定义一套基础页面,客户端可以选择直接使用,或者自定义UI界面。
  81. # ***是否做保活***
  82. > 应用自启,后台进程锁引导等