====== 消息发送过程及聊天数据 ======
----
===== 发送消息过程 =====
客户端通过环信服务器进行消息发送。如下图所示:
{{ ::image003.png?nolink |}}
* 在线状态:客户端A发送消息到环信服务器,环信服务器推送消息到客户端B。
* 离线状态:客户端A发送消息到环信服务器,环信服务器检测到客户端B不在线,会添加到离线缓存中,当客户端B登录后服务器会把离线消息推送给客户端B。
===== 聊天记录保存 =====
客户端A发送消息到环信服务器的同时,SDK 会保存这条消息到本地数据库(SDK 内部创建数据库,不允许直接操作),环信服务器在推送消息到客户端B的同时也会在服务器记录下来(消息历史记录免费存储3天),客户端B收到消息后,SDK 会将这条消息存储到本地数据库。
{{ :im:quickstart:essential:image023.png?nolink |聊天记录}}
注:客户端并未提供去服务器获取聊天记录的接口,所以,如果换了设备或者清空了数据,聊天记录都不会存在。如果有需求要从服务器拉取聊天记录,可以在自己服务器处理。
==== 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:quickstart:guide:experience|快速体验]]
下一页:[[im:other:integrationcases:usersandfriends|已上线的应用导入到环信]]