注册

单聊或群聊-的聊天历史的实现




x.png



这是 效果图, 群组 或是单聊 均可,用的 2.0的sdk ,之前项目没有添加视频,聊天历史中只有文字与图片,这一部分开始 是个妹纸写的,后来妹纸离开了,项目加了视频发送,聊天历史中也要添加,群聊也要添加聊天历史功能, 看妹纸的代码 也是看了许久,毕竟我工作也就几个月,她也是个新人。。。 简单的说下实现思路吧。


m.png



文件目录, model 就是参照 环信demo 中的MessageModel ,cell布局需要判断 消息的类型,Controller中需要 两个 关键参数:单聊就是用户ID,群聊就是 群组ID ;
然后:
@property (strong, nonatomic) EMConversation *conversation;环信的,具体内容自己点进去看
// 根据接收者的username获取当前会话的管理者

    if (_numForGroup==42) {
       _conversation =[[EaseMob sharedInstance].chatManager conversationForChatter:_groupID conversationType:eConversationTypeGroupChat];
    }else{
    _conversation = [[EaseMob sharedInstance].chatManager conversationForChatter:_username
                                                              conversationType:eConversationTypeChat];
      } 
获取到消息以后  NSArray *messages = [_conversation loadAllMessages];   //这里的messages 数组 就是与 用户ID 或群组ID 相对应 单聊或群聊的所有消息,
接下来 就要解析这个数组里面的 消息了,可以参照 ChatVC 中的消息解析; 
下面是一部分代码
-(void)analyzeData:(NSArray *)messages{

//    [_messageList removeAllObjects];

    _messageList = [[NSMutableArray alloc] init];

    int i = 1;

    for (EMMessage *mes in messages) {

        NSLog(@"mes == %@",mes);

        ChatHistoryModel *chatModel = [[ChatHistoryModel alloc] init];

        

        chatModel.massageID = mes.messageId;

        

        NSDictionary *ext = mes.ext;

        NSDictionary *em_apns_ext = ext[@"em_apns_ext"];

        chatModel.username = em_apns_ext[@"nickname"];

        

        NSDate *mesD = [NSDate dateWithTimeIntervalSince1970:mes.timestamp/1000];

        NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];

        [dateFormatter setDateFormat:@"MM-dd HH:mm:ss"];

        chatModel.time = [dateFormatter stringFromDate:mesD];

        

        id<IEMMessageBody> mesbody = [mes.messageBodies firstObject];

        

        chatModel.messageType = mesbody.messageBodyType;

        

        if (chatModel.messageType == 1) {

            EMTextMessageBody *textbody = (EMTextMessageBody *)mesbody;

            chatModel.textMessage = textbody.text;

        }else if(chatModel.messageType == 2){

            EMImageMessageBody *imagebody = (EMImageMessageBody *)mesbody;

            chatModel.message = imagebody.message;

            //本地图片路径

            chatModel.thumbnailFile = imagebody.thumbnailLocalPath;

            chatModel.imageFile = imagebody.localPath;

            

            //网络图片路径

            chatModel.imageRemote = imagebody.remotePath;

            chatModel.trumbnailRemote = imagebody.thumbnailRemotePath;

            

            //图片大小

            chatModel.imageSize = imagebody.size;

            chatModel.thumbnailSize = imagebody.thumbnailSize;

            

        }else if(chatModel.messageType == 3){

            EMVideoMessageBody *videoMessageBody = (EMVideoMessageBody*)mesbody;

            

            chatModel.message = videoMessageBody.message;

            //第一帧图片

            chatModel.thumbnailImage = [UIImage imageWithContentsOfFile:videoMessageBody.thumbnailLocalPath];

            //视频第一帧图片大小

            chatModel.imageSize = videoMessageBody.size;

            chatModel.localPath = videoMessageBody.thumbnailLocalPath;

           }
        }
视频消息的显示, 是一个视频的第一帧图片 加上一个按钮,    另外有一个问题,就是 他人发送的图像 与自己发送的图片,在cell显示上会有大小的差异, 接下来我会把源码传上来,给大家参考,这一部分还需要优化,特别是cell中 图像与 视频的显示, 大小总是有些不满意,也希望大家帮忙修改下
 

7 个评论

有问题可以交流,我知道都会缩粗来
赞赏就是对知识的认可。
上午 修复了 图片消息的显示的图片的大小等问题,图片消息已无BUG ,
- -自己才扩展聊天记录这个功能,环信就自己出了,鼓励哈
出了么

要回复文章请先登录注册