如何实现聊天记录的备份与恢复。
聊天数据分成两部分,一部分是媒体资源,这部分发送成功后都保存在云服务器上,本地也会保存一份,迁移时可以不迁移这部分,确保对象存储服务器不删除文件即可。另外一部分是消息,需要把消息全部迁移。 除了消息之外的信息不用迁移,可以用IM服务同步下来。
数据库是使用sqlcipher进行加密的,而且跟当前机器绑定,直接copy数据库过去是不可以的,因此只能通过“读取消息保存成文件”,“传输文件到目的设备”,“写入消息”的办法复现。
- 读取消息保存成文件。client提供获取会话列表的方法,先获取到会话列表,然后依次对会话读取消息,对每个会话调用读取消息的接口每次读取一批消息,然后把消息的转化为data格式保存到文件中。
- 通过某种方式把文件copy到目标机器上。
- 把文件的数据读取出来,转成消息,然后调用插入消息接口把消息插入。
1/3步骤中每一步在client中都有对应的接口,找一下就OK了。另外消息《=》数据的转化需要自己实现,一个简单的办法是使用json,把消息的每个字段和json字段对应起来,其中content转化为payload进行序列化。
插入消息时只能一条一条插入,client提供了开启事务/提交事务的接口,可以大幅度提高速度,在插入之前开启事务,在插入完成后提交事务。