====== 通信过程及聊天记录保存 ====== ---- ===== 通信过程 ===== 客户端通过环信服务器进行通信。如下图所示: {{:start:000quickstart:comprocess.png?nolink|通信过程}} * 在线状态:客户端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]; // 根据时间戳读取指定条数的消息 ---- 上一页:[[im:000quickstart:20usersandfriends|用户和好友体系集成]] 下一页:[[im:000quickstart:70rtmsgcallback|实时消息回调]]