最近中途接手即时通讯聊天,大致业务基本都已完成,因为我们项目是有头像字段的,但是容联云那边目前没有同步头像的接口。需要我实现的是群聊时要获取到每个发送者的头像并展示在聊天窗口中。
大致思路:容联云有个自定义字段msgDomain,在发送信息时,创建消息行dom的数组,其中定义一个msgAvatar的项,然后在新建消息对象时setDomain发送者头像,接收时会在消息对象中获取到msgDomain的字段,赋值到msgAvatar,然后调用将消息传至聊天窗口的函数即可。
- 发送消息时,新建消息对象时 setDomain,值为我的头像(作为发送者)
var obj = new RL_YTX.MsgBuilder();//新建消息对象
obj.setFile(file);
obj.setType(type);
obj.setReceiver(receiver);//设置接受者
obj.setDomain(get_cookie("avatar")); // set 一个自定义字段 用来存储本人的头像
2.接收消息时,获取到自定义字段带回来的值
var msgDiv = {};
msgDiv["isSender"] = obj.msgSender == IM.user_account;
msgDiv["senderName"] = obj.senderNickName || obj.msgSender;
msgDiv["msgType"] = obj.msgType;
msgDiv["msgAvatar"] = obj.msgAvatar; // Alice
if (obj.msgType == 4 || obj.msgType == 7 || obj.msgType == 6) { // 信息类型为图片、非压缩文件、压缩文件
msgDiv["msgFileUrl"] = obj.msgFileUrl;
msgDiv["msgFileName"] = obj.msgFileName;
msgDiv["msgFileSize"] = obj.msgFileSize;
msgDiv["msgAvatar"] = obj.msgDomain; // 将domaind的值赋值给dom数组中的msgAvatar
} else {
msgDiv["content"] = obj.msgContent;
}
3.在addMsgToChatWindow 函数中,定义变量存储在div数组的msgAvatar项中。
if(obj.msgType == 4 || obj.msgType == 6 || obj.msgType ==7){
img = obj.msgAvatar; // Alice
}else{
img=obj.content.split(";+")[1];
}