环信聊天对话页面双方头像以及名称

环信聊天页面对方以及自己的头像和昵称/名称,两种方式1.在自己的聊天页面“ChatViewController.m”中(自己命名,可能会有文件名差异)修改2.修改了“EaseMessageViewController.m”文件

1.ChatViewController.m

在自己写的文件中实现下面这个方法,此方法简单但是有时聊天页面会不显示头像与名称

- (id<IMessageModel>)messageViewController:(EaseMessageViewController *)viewController
modelForMessage:(EMMessage *)message
{
id<IMessageModel> model = nil;
model.avatarImage = [UIImage imageNamed:@"EaseUIResource.bundle/user"];
model = [[EaseMessageModel alloc] initWithMessage:message];
model.failImageName = @"EaseUIResource.bundle/imageDownloadFail";

model.avatarURLPath = [message.ext objectForKey:@"IMicon"];
model.nickname = [message.ext objectForKey:@"IMname"];

if (message.direction==EMMessageDirectionSend) {
//发送的信息,显示自己姓名与头像
model.avatarURLPath = @"https://raw.githubusercontent.com/ly92/images/master/icons/icon1.jpeg";
model.nickname = @"小勇";

model.message.ext = @{@"IMname" : @"小勇",
                      @"IMicon" : @"https://raw.githubusercontent.com/ly92/images/master/icons/icon1.jpeg"
                     };

}
}
else{
//如果是聊天超级管理员,则不处理
if ([self.conversation.conversationId isEqualToString:@"admin"]) {
model.nickname = @"管理员";
return model;
}
//其他会员
else{
//对方环信帐号信息获取
model.nickname = @"舒洁";
model.avatarURLPath = @"https://raw.githubusercontent.com/ly92/images/master/icons/icon2.jpeg";

model.message.ext = @{@"IMname" : @"舒洁",
@"IMicon" : @"https://raw.githubusercontent.com/ly92/images/master/icons/icon2.jpeg"
};
}
return model;
}

2.EaseMessageViewController.m

这个方法也没有什么难的,但是需要改引入的三方库,后面升级三方库会比较麻烦,但是每次头像和名称都会显示出来
1.在“- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath”方法中加上两行,在每次为cell赋值model之前加上

model.avatarURLPath = [model.message.ext objectForKey:@"IMicon"];
model.nickname = [model.message.ext objectForKey:@"IMname"];

2.在“- (void)_sendMessage:(EMMessage *)message”方法中发送数据前加上头像和名称的信息

- (void)_sendMessage:(EMMessage *)message
{
if (self.conversation.type == EMConversationTypeGroupChat){
message.chatType = EMChatTypeGroupChat;
}
else if (self.conversation.type == EMConversationTypeChatRoom){
message.chatType = EMChatTypeChatRoom;
}

//下面几行为发送的信息添加头像和名称的信息
NSMutableDictionary *ext = [NSMutableDictionary dictionaryWithDictionary:message.ext];
UserModel *user = [[LocalData sharedInstance] getSaleAccount];
if (user){
[ext setObject:user.name forKey:@"IMname"];
[ext setObject:user.image forKey:@"IMicon"];
}
message.ext = ext;


[self addMessageToDataSource:message
progress:nil];

__weak typeof(self) weakself = self;
[[EMClient sharedClient].chatManager asyncSendMessage:message progress:nil completion:^(EMMessage *aMessage, EMError *aError) {
[weakself.tableView reloadData];
}];
}

3.在“- (void)didReceiveMessages:(NSArray *)aMessages”方法接收数据后加上头像和名称的信息,iOS与安卓如果不能同时去做环信聊天功能就不可避免的去自己缓存聊天对象的名称与头像,下面几行是在每次接收到信息时根据聊天对象的环信号来获取头像与名称信息,然后加入到收到的信息中-----2016-11-21

- (void)didReceiveMessages:(NSArray *)aMessages
{
for (EMMessage *message in aMessages) {
if ([self.conversation.conversationId isEqualToString:message.conversationId]) {

NSMutableDictionary *ext = [NSMutableDictionary dictionaryWithDictionary:message.ext];
ChatUser *chatuser = [[ChatUserManager shareInstance] fetchChatUserByIm:message.conversationId];
if (chatuser){
[ext setObject:chatuser.name forKey:@"IMname"];
[ext setObject:chatuser.avatar forKey:@"IMicon"];
}
message.ext = ext;

[self addMessageToDataSource:message progress:nil];

[self _sendHasReadResponseForMessages:@[message]
isRead:NO];

if ([self _shouldMarkMessageAsRead])
{
[self.conversation markMessageAsReadWithId:message.messageId];
}
}
}
}

特别注意

使用第二种方案时需要改引入的三方库,所以迁移代码时需要做相应的调整

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 161,566评论 24 692
  • 夜里总是会想很多然后开始感慨,开始思考自己的生活和人生。看过的书写过太多哗众取宠的句子而最后的最后不过是自己的矫揉...
    Tockey阅读 155评论 0 0
  • Android四大组件之Activity 1、Activity生命周期 一般情况下Activity会经历如下生命周...
    尼古拉斯_特仑苏阅读 99评论 0 0
  • 父亲是幸福的基石 无论在什么年代,父亲都是一个家庭里最有权威的CEO,他时刻通过自己的努力为自己的家庭主持大局,让...
    耕耘生活阅读 142评论 0 9
  • 每个人都有自己的小世界,很多时候活在自己世界里,向往着别人的生活。 所以很多人都可能幻想过,在世界上会不会有另一个...
    晓鸿Iris阅读 166评论 0 1