vue 页面
1.引用webim.js
我在app.vue中全局引用
import './api/webim.js'
2. 登录im , 方法在created中运行。 接口返回对象, webim.login 初始化im
methods:{
imLogin:function(uuid){
var vm=this;
//注册监听事件
var listeners = {
"onConnNotify": vm.onConnNotify, //监听连接状态回调变化事件,必填
"onMsgNotify": vm.onMsgNotify, //监听新消息(私聊,普通群(非直播聊天室)消息,全员推送消息)事件,必填
"onKickedEventCall": vm.onKickedEventCall //被其他登录实例踢下线
};
//初始化时,其他对象,选填
var options = {
'isAccessFormalEnv': true, //是否访问正式环境,默认访问正式,选填
'isLogOn': false //是否开启控制台打印日志,默认开启,选填
};
port.imSing.r({identifier: uuid}).then(loginInfo=>{
vm.loginInfo=loginInfo.data;
window.webim.login(
loginInfo.data, listeners, options,
function (resp) {
if (resp.ErrorCode === 0 && resp.ActionStatus === "OK") {
// vm.loginInfo.identifierNick = resp.identifierNick;//设置当前用户昵称
// vm.loginInfo.headurl = resp.headurl;//设置当前用户头像
console.log("登录成功 resp = " + JSON.stringify(resp));
}
}, function (err) {
console.log(err.ErrorInfo);
}
);
});
},
},
created(){
this.imLogin(uuid);
}
3.listeners 中调用的函数 写在methods中
methods:{
//监听连接状态回调变化事件
onConnNotify : function (resp) {
console.log(resp)
var info;
switch (resp.ErrorCode) {
case window.webim.CONNECTION_STATUS.ON:
console.log('建立连接成功: ' + resp.ErrorInfo);
break;
case window.webim.CONNECTION_STATUS.OFF:
info = '连接已断开,无法收到新消息,请检查下你的网络是否正常: ' + resp.ErrorInfo;
console.log(info);
break;
case window.webim.CONNECTION_STATUS.RECONNECT:
info = '连接状态恢复正常: ' + resp.ErrorInfo;
console.log(info);
break;
default:
console.log('未知连接状态: =' + resp.ErrorInfo);
break;
}
},
//被新实例踢下线的回调处理
onKickedEventCall() {
this.$toast("其他地方登录,被T了");
},
//newMsgList 为新消息数组,结构为[Msg]
onMsgNotify:function(newMsgList) {
console.log("MSG") ;
// console.log(newMsgList) ;
for (var i in newMsgList) {//遍历新消息
if(newMsgList[i].elems[0].content.text=="__end__"){
this.$toast('已结束');
//清除session
util.session('getList','');
util.session('doctorInfos','');
setTimeout(function(){
this.$router.push({path:'/'})
},3000)
return;
}
var cont = newMsgList[i].elems[0].content.text
this.dataList.push({
content:cont,
sendTime:util.CurentTime(),
});
console.log(this.dataList)
this.$nextTick(() => {
this.$refs.pageCont.scrollTop = this.$refs.pageCont.scrollHeight
})
}
}
}
此时im已经调通 。
4. 发送数据(1)通过接口发送到后台(2)发送到im
//发送内容
sendContent(content,callback){
let vm = this;
vm.talkValue = null;
if(content == null && vm.seedimg==null){
vm.$toast('空的内容不能发送');
}else{
var params=JSON.stringify({
communicationId: vm.getList.comunicationId, //通讯标识
content:content,
imgs:vm.seedimg
})
port.seedTalk.r(params).then(rs=>{
if(rs.data.code == 1){
vm.dataList.push({
content:content?content:vm.seedimg,
sendTime:util.CurentTime(),
talkImg:vm.seedimg?true:false
});
vm.$nextTick(() => {
vm.$refs.pageCont.scrollTop = vm.$refs.pageCont.scrollHeight
})
vm.sentToIm(content?content:vm.seedimg);//发送im
callback && callback();
}else{
vm.$toast('发送失败') ;
}
})
}
sentToIm(content){
var vm = this;
var selSess = null;
if(!this.selSess){
this.selSess = new window.webim.Session(window.webim.SESSION_TYPE.C2C, this.doctorInfos.uuid,this.doctorInfos.uuid, '', Math.round(new Date().getTime() / 1000));
}
selSess=this.selSess;
var isSend = true;//是否为自己发送
var seq = -1;//消息序列,-1表示 SDK 自动生成,用于去重
var random = Math.round(Math.random() * 4294967296);//消息随机数,用于去重
var msgTime = Math.round(new Date().getTime() / 1000);//消息时间戳
var subType=window.webim.C2C_MSG_SUB_TYPE.COMMON;//消息子类型
var msg = new window.webim.Msg(selSess, isSend, seq, random, msgTime, this.loginInfo.identifier, subType, this.loginInfo.identifierNick);
var text_obj = new window.webim.Msg.Elem.Text(content);
msg.addText(text_obj);
msg.addText(new window.webim.Msg.Elem.Text(vm.getList.comunicationId));//消息ID
window.webim.sendMsg(msg,function(){
console.log("IM 发送成功") ;
// console.log(msg) ;
},function(e){
console.log("IM 发送失败") ;
// console.log(msg) ;
console.log(e) ;
});
}
此写法是 旧版本 im
在此版本webim下载地址 :https://download.csdn.net/download/p930318/12022155