群插件的基础属性
群插件一般是用H5配置的网页小插件,然后和群构造一个入口。本地通过sqlite维护一个插件表,以及群插件关系表。插件信息升级一下可分为平台系统必须插件以及业务自定义插件。具体可由业务决定。
插件有其基本属性:名称,插件id,类型,默认排序值,跳转内容(本地模块名/h5链接地址),跳转类型:h5/本地模块 等等。
插件关系表: 群id,插件id,角标数量,排序值,是否显示,等等。
群插件的本地存储以及业务逻辑
由于每个IM用户本地都有一个相关的userId唯一数据库,插件基础信息存储在一张表,信息更新频率较低。插件关系一张表,和群id关联性较高,即一个群可以有多个插件。
当用户登录后,在适当的时机请求Java接口进行同步插件信息。(客户端可以根据时间戳定义一个时间段,这样就不用每次登录同步插件信息了)由业务决定多久时间段同步最新的插件信息到本地。如果后端后台配置了最新插件,客户单需要及时显示的话就需要服务端进行实时下发IM通知,表示有插件更新或新增。群插件当且仅当和群挂钩时候才会实时下发。当客户端收到群插件变更指令的时候,首先判断群插件变更类型如果是插件信息变更,则根据id请求最新的某插件信息 replace into(更新或新增) 插件信息的记录。如果是其他变更类型: 首先检查插件表是否有该插件记录,如果有,则存储到插件关系表,完成后则通知界面去读取群最新的插件信息。如果没有,则先请求网络插件信息,再replace into 到插件表。然后再处理插件关系表,最后通知到界面刷新。 群插件的变更类型一般可分为以下几种:绑定,解绑,角标数量,群插件排序,显示/隐藏等等。具体根据业务情况,这里只是简单列举。
界面刷新
当IM收到群插件自定义通知时,进行条件处理对应的业务。当完成群插件关系表的变更时,发送通知到控制器,控制器收到通知后,判断仅当当前会id与要接收通知的群id相等的时候,才进行调用dao查询群插件列表方法返回相关的插件关系集合。插件关系Model包含插件信息Model,然后界面就能完整显示了。
同步时机?
- 当用户登录后,首次点开某群时候,会自动调用同步群信息基础接口,里面包含插件集合。集合里分别为已关联的某插件id在当前群的最终状态。根据existGroupFlag为true表示与该群关联着,如果为false 则需要调用解绑删除群插件关系。
- 当用户首次安装或卸载重装时候,进入消息首页会进行多群同步,在群信息同步时返回的基础信息也会包含此群插件集合基信息。
代码建议
插件Dao提供查询,修改,删除等基本方法。插件Manager专门处理业务,调用Dao相关方法结合完成业务需求。避免block回调地狱,防止多层嵌套。内存排序和sql排序相结合,结构体和对象Model相映射,解包时候留意结构体字段类型,解码时候对应相关网络字节序,留意新增与replace into 的区别,界面刷新严格条件过滤防止造成不必要的刷新。插件基本信息同步频率看业务,关系绑定要实时,测试要充分留意卸载重装后的插件信息同步问题。