通信过程及聊天记录保存


通信过程

客户端通过环信服务器进行通信。如下图所示:

通信过程

  • 在线状态:客户端A发送消息到环信服务器,环信服务器推送消息到客户端B。
  • 离线状态:客户端A发送消息到环信服务器,环信服务器检测到客户端B不在线,会添加到离线缓存中,当客户端B登录后服务器会把离线消息推送给客户端B。

聊天记录保存

客户端A发送消息到环信服务器的同时,SDK 会保存这条消息到本地数据库(SDK 内部创建数据库,不允许直接操作),环信服务器在推送消息到客户端B的同时也会在服务器记录下来(消息历史记录免费存储3天),客户端B收到消息后,SDK 会将这条消息存储到本地数据库。

注:客户端并未提供去服务器获取聊天记录的接口,所以,如果换了设备或者清空了数据,聊天记录都不会存在。如果有需求要从服务器拉取聊天记录,可以在自己服务器处理。

Android

在 Android 的 SDK 中,EMChatManager.getInstance().loadAllConversations()是从本地数据库加载聊天记录到内存中,其他获取聊天记录的方法均是从内存读取。

iOS

iOS 客户端获取聊天记录的方法如下:

NSArray *messages = [conversation loadAllMessages]; // 获取会话中的全部聊天记录
NSArray *messages = [conversation loadMessagesWithIds:@[@"msgid1",@"msgid2",@"msgid3"]]; // 根据messageid获取消息
EMMessage *msg = [conversation loadMessageWithId:@"msgid1"]; // 根据messageid获取消息

long long timestamp = [[NSDate date] timeIntervalSince1970] * 1000 + 1;
NSArray * messages = [conversation loadNumbersOfMessages:20 before:timestamp]; // 根据时间戳读取指定条数的消息