发送文本消息
需要2个步骤,首先需要将要发送的文本信息进行构造,再将文本消息打包成消息,然后发送出去
- 构造文本消息
// 构造文本消息
EMTextMessageBody *body = [[EMTextMessageBody alloc] initWithText:text];
NSString *from = [[EMClient sharedClient] currentUsername];
// 生成Message
EMMessage *message = [[EMMessage alloc] initWithConversationID:self.userName from:from to:self.userName body:body ext:nil];
message.chatType = EMChatTypeChat;// 设置为单聊消息
- 发送消息
// 发送消息
[[EMClient sharedClient].chatManager sendMessage:message progress:^(int progress) {
NSLog(@"发送进度:%zd",progress);
} completion:^(EMMessage *message, EMError *error) {
if (!error) {
NSLog(@"消息发送成功");
// 添加到本地聊天记录中
[self.chatMessages addObject:message];
// 刷新tableview
[self.tableView reloadData];
// 滚动到最好一条消息
[self scrollviewToLastMsg];
}else{
NSLog(@"消息发送失败%@",error.errorDescription);
}
}];
接收消息
通过代理方法获取消息的通知,然后解析收到的数据
- 设置代理
// 注册消息回调
[[EMClient sharedClient].chatManager addDelegate:self delegateQueue:nil];
- 消息回调后的处理
// 接收到消息时回调
- (void)messagesDidReceive:(NSArray *)aMessages
{
// 遍历消息
for (EMMessage *receiveMsg in aMessages) {
// 消息如果是当前聊天者发过来的,则添加到本地聊天记录中,并刷新记录
if ([receiveMsg.from isEqualToString:self.userName]) {
// 添加到本地聊天记录中
[self.chatMessages addObject:receiveMsg];
// 刷新tableview
[self.tableView reloadData];
// 滚动到最好一条消息
[self scrollviewToLastMsg];
};
}
}
聊天记录的获取
会话:操作聊天消息 EMMessage 的容器,每条聊天记录都隶属于某个会话,先取得当前聊天用户的会话,然后根据会话检索聊天记录
// 获取会话
EMConversation *conversation = [[EMClient sharedClient].chatManager getConversation:self.userName type:EMConversationTypeChat createIfNotExist:YES];
// 加载会话历史记录
[conversation loadMessagesStartFromId:nil count:100 searchDirection:EMMessageSearchDirectionUp completion:^(NSArray *aMessages, EMError *aError) {
if (!aError) {
[self.chatMessages addObjectsFromArray:aMessages];
// 刷新表格
[self.tableView reloadData];
// 滚动到最后一条
[self scrollviewToLastMsg];
}
}];
聊天演示: