====== 通信过程及聊天记录保存 ======
----
===== 通信过程 =====
客户端通过环信服务器进行通信。如下图所示:
{{: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|实时消息回调]]