基于vue的环信基本实时通信功能
本篇文章借鉴了一些资料,然后在这个基础上,我将环信的实现全部都集成在一个组件里面进行实现;
https://blog.csdn.net/github_35631540/article/details/80278114
第一步,获取 webim.config.js
1. 下载地址 http://www.easemob.com/download/im,然后点击如下图的位置进行下载

解压后将 webim.config.js 拷贝到自己的文件夹下面(我这儿放的位置是src->assets->lib->webim下面),由于easemob-websdk strophe.js,我们都可以通过 npm 安装的形式完成,所以就不需要再引入了。


2. 在 webim.config.js 中修改部分代码



这儿的 appkey 是根据实际情况进行修改的。
第二步,下载easemob-websdk、strophe.js
1. 通过 npm 进行安装,注意:这儿的版本很重要,最好就用下面的版本;
```
npm i easemob-websdk strophe.js --save
```
版本:
"easemob-websdk": "1.8.3", "strophe.js": "1.2.16"
2. 修改 /node_modules/strophe.js/strophe.js

代码如下(注意如果有同学直接搜索reset进行快速搜索的话,要找到第二个reset,不是第一个reset)
setJid: function (jid) {
this.jid = jid;
this.authzid = Strophe.getBareJidFromJid(this.jid);
this.authcid = Strophe.getNodeFromJid(this.jid);
},
getJid: function () {
return this.jid;
},
3. 修改 /node_modules/easemob-websdk/src/connection.js

代码如下
var Strophe = require('strophe.js').Strophe;
var meStrophe = require('strophe.js');
$iq = meStrophe.$iq;
$build = meStrophe.$build;
$msg = meStrophe.$msg;
$pres = meStrophe.$pres;
第三步,在组件里面进行使用
1. 设置基本信息
let WebIM = require('easemob-websdk');
const conn = new WebIM.connection({
isMultiLoginSessions: WebIM.config.isMultiLoginSessions,
https: typeof WebIM.config.https === 'boolean' ? WebIM.config.https : location.protocol === 'https:',
url: WebIM.config.xmppURL,
heartBeatWait: WebIM.config.heartBeatWait,
autoReconnectNumMax: WebIM.config.autoReconnectNumMax,
autoReconnectInterval: WebIM.config.autoReconnectInterval,
apiUrl: WebIM.config.apiURL,
isAutoLogin: true
})
const options = {
apiUrl: WebIM.config.apiURL,
user: '1',
pwd: 'xiuxiutrip123456', // 待会会进行覆盖
appKey: WebIM.config.appkey,
success:function (re) {
console.log('登陆成功')
},
error:function (err) {
alert(err)
}
}
2. 在 data() 里面进行初始化
data () {
return {
$imconn: {},
$imoption: {}
}
},
3. 在created里面对 $imconn、$imoption 进行赋值,然后进行登录
created () {
this.$imconn = conn;
this.$imoption = options;
this.loginWebIM();
},
4. 登录并监听
loginWebIM () {
// 这儿是测试用的账号和密码,这个账号密码是通过环信后台生成的
this.$imoption.user = '13880283427';
this.$imoption.pwd = '123456';
this.$imconn.open(this.$imoption);
let _this = this;
this.$imconn.listen({
onOpened: function (message) {
console.log('用户已上线')
_this.getGroupOfWebIM();
// 由于我们用的是聊天室,所以登录成功后必须加入聊天室
_this.joinRoom();
},
onClosed: function (message) {
console.log('用户已下线')
},
onEmojiMessage: function (message) {
console.log('这儿接收到了表情')
},
onPictureMessage: function (message) {
console.log('这儿接收到了图片')
},
onTextMessage: function (message) {
// 每次接收信息都会在这儿监听到
console.log('这儿接收到了文本信息');
console.log(message)
},
onPresence: function ( message ) {
// 加入聊调室后,这儿会被执行
console.log('这儿是监听聊天室')
_this.handlePresence(message)
}
})
},
5. 加入聊调室
handlePresence (e) {
// 官网给出的例子是
e.type == 'joinChatRoomSuccess' // 加入成功
e.type == 'joinChatRoomFailed' // 加入失败
e.type == 'deleteGroupChat' // 聊天室被删除
// 但是实际操作的时候,不管有没得聊天室id,都能返回joinChatRoomSuccess
// 所以实际判断的时候,如果加入聊天室失败,会返回一个error的属性,所有正确的判断应该是
if (e.error) {
console.log('加入失败')
} else {
console.log('加入成功')
}
},
joinRoom () {
// 加入聊天室
this.$imconn.joinChatRoom({
roomId: this.roomId // 聊天室id
});
},
closeWebIM () {
// 退出聊天室,每次离开聊天室的时候一定要退出聊天室
this.$imconn.quitChatRoom({
roomId: this.roomId // 聊天室id
});
this.$imconn.close(); // 如果是退出登录,那么这一句必须要,否则会出现,第一次可以登录,第二次登录掉线或者无法登陆的情况
},

上面是有人离开聊调室的返回信息,下面是有人进来的返回信息
6. 发送信息
handleReply () {
// 这儿必须通过接口获取roomId
let sendText = this.description;
// 将请求框置空
this.description = '';
var id = this.$imconn.getUniqueId(); // 生成本地消息id
var msg = new WebIM.message('txt', id); // 创建文本消息
let _this = this;
var option = {
msg: sendText, // 这儿是发送的消息内容
to: '63099105247233', // 接收消息对象(聊天室id) this.roomId
roomType: true,
chatType: 'chatRoom',
// 这儿的ext是自定义属性,安卓端可以根据这个属性获取信息,以name、age为例(与安卓商量着来)
ext: {name:'', age: ''},
success: function () {
console.log('send room text success');
},
fail: function () {
console.log('failed');
this.$message.error('信息发送失败');
}
};
msg.set(option);
msg.setGroup('groupchat');
this.$imconn.send(msg.body);
},
注意事项
1. 有时候环形的登录会出现问题,那么有必要在登录失败的时候重新进行登录
// 这时候可以将conn的定义放到data里面,option的定义通过方法获取,当登录失败的时候,就可以调用重新登录的方法
{
data () {
return {
conn: new WebIM.connection({
isMultiLoginSessions: WebIM.config.isMultiLoginSessions,
https: typeof WebIM.config.https === 'boolean' ? WebIM.config.https : location.protocol === 'https:',
url: WebIM.config.xmppURL,
heartBeatWait: WebIM.config.heartBeatWait,
autoReconnectNumMax: WebIM.config.autoReconnectNumMax,
autoReconnectInterval: WebIM.config.autoReconnectInterval,
apiUrl: WebIM.config.apiURL,
isAutoLogin: true
}),
}
}
methods: {
getOptions () {
let _this = this;
return {
apiUrl: WebIM.config.apiURL,
user: '',
pwd: '',
appKey: WebIM.config.appkey,
success:function (res) {
console.log('这儿是this', _this)
// console.log('登陆成功')
},
error:function (err) {
console.log(err)
console.log('这儿重新登录', _this);
_this.loginWebIM();
}
}
},
}
}
2. 此时 created() 钩子函数里面就可以修改为
this.$imconn = this.conn;
this.$imoption = this.getOptions();
3. 另外还有一个地方可以修改
...
let _this = this;
this.$imconn.listen({
onClosed: function (message) {
console.log('用户已下线')
// 如果是在聊天页面
if (...) {
console.log('这儿重新进行登录');
_this.loginWebIM();
}
},
...
})
基于vue的环信基本实时通信功能的更多相关文章
- 在微信框架模块中,基于Vue&Element前端的后台管理功能介绍
微信开发包括公众号.企业微信.微信小程序等方面的开发内容,需要对腾信的微信API接口进行封装:包括事件.菜单.订阅用户.多媒体文件.图文消息.消息群发.微信支付和企业红包.摇一摇设备.语义理解.微信小 ...
- mui初级入门教程(五)— 聊聊即时通讯(IM),基于环信 web im SDK
文章来源:小青年原创发布时间:2016-06-15关键词:mui,环信 web im,html5+,im,页面传值,缓存转载需标注本文原始地址: http://zhaomenghuan.github. ...
- iOS 环信集成问题(连文档都不说明的坑。。)
首先,关于环信SDK的下载和一些依赖库的添加,在此我就不做详细介绍,(http://www.easemob.com/download/im)附上环信官网文档,可以看一下,上面都可以下载,也有相关配置介 ...
- 环信easeui集成:坑总结2018(二)
环信EaseUI 集成,集成不做描述,看文档即可,下面主要谈一些对easeui的个性化需求修改. 该篇文章将解决的问题: 1.如何发送视频功能 2.未完待续.. ------------------- ...
- 基于环信SDK的IM即时通讯填坑之路(vue)
公司最近使用第三方环信SDK的进行通信聊天,基本已完成.记录下填坑之路 1.可以通过以下方式引用 WebSDK 1.安装 npm install easemob-websdk --save 2. 先 ...
- 环信集成 2---基于环信Demo3.0,实现单聊功能
这几天在做环信,所以把环信相关的东西拿过来,做个系统点的东西 注意: 这里Demo集成的是带有实时语音功能的(libEaseMobClientSDK.a). 环信库是直接拖拽EaseMobSDK文件夹 ...
- 基于环信的仿QQ即时通讯的简单实现
代码地址如下:http://www.demodashi.com/demo/11645.html 我的博客地址 之前一直想实现聊天的功能,但是感觉有点困难,今天看了环信的API,就利用下午的时间动手试了 ...
- 李洪强iOS开发之-环信03_集成 SDK 基础功能
李洪强iOS开发之-环信03_集成 SDK 基础功能 集成 SDK 基础功能 在您阅读此文档时,我们假定您已经具备了基础的 iOS 应用开发经验,并能够理解相关基础概念. SDK 同步/异步方法区分 ...
- android-使用环信SDK开发即时通信功能及源代码下载
近期项目中集成即时聊天功能.挑来拣去,终于选择环信SDK来进行开发,选择环信的主要原因是接口方便.简洁.说明文档清楚易懂.文档有android.ios.和后台server端.还是非常全的. 环信官网: ...
随机推荐
- 内网渗透_win_socks代理_reGeorg+proxifier
遇到内网windows机器,如果想远程登陆,通常得通过代理,常用的nc.lcx 工具可满足要求. 如 lcx 示例: 两台机器上均上传lcx.exe 在 xp机器(公网)上执行 lcx.exe -li ...
- oracle运维(持续更新)
目录 简单命令使用 进入SQL*Plus 退出SQL*Plus 在sqlplus下得到帮助信息 显示表结构命令 DESCRIBE SQL*Plus 中的编辑命令 调用外部系统编辑器 运行命令文件 关于 ...
- Linux 进程间通信 共享内存
1.特点: 1)共享内存是一种最为高效的进程间通信方式,进程可以直接读写内存,而不需要任何数据的拷贝.如管道当在内核空间创建以后,用户空间需要内存 拷贝,需要拷贝数据,所以效率低. 2)为了在多个进 ...
- HTML——表格标签
存在即是合理的. 表格的现在还是较为常用的一种标签,但不是用来布局,常见处理.显示表格式数据. 创建表格 在HTML网页中,要想创建表格,就需要使用表格相关的标签.创建表格的基本语法格式如下: < ...
- 自定义类型转换器---转Date类型
在使用springMVC过程中 ,假如页面使用了 <form action="${pageContext.request.contextPath}/user/testDate" ...
- php上传(二)
上传的主体页面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www ...
- poi之Excel上传
poi之Excel上传 @RequestMapping(value = "/import", method = RequestMethod.POST) public String ...
- Notepad++如何对比文件 Notepad++对比两个文件代码方法
大家在使用Notepad++的时候,需要对编辑的两个文件进行比较,找出两个文件代码的区别,快速进行编辑修改,那么Notepad++如何对比文件,下面小编就给大家带来Notepad++对比两个文件代码方 ...
- Python中的动态类
Python中的动态类 有这样一个需求,我有SegmentReader.PostagReader.ConllReader这三个Reader,他们都继承于一个Reader类.在程序运行中,由用户通过se ...
- 7.RabbitMQ RFC同步调用
RabbitMQ RFC同步调用是使用了两个异步调用完成的,生产者调用消费者的同时,自己也作为消费者等待某一队列的返回消息,消费者接受到生产者的消息同时,也作为消息发送者发送一消息给生产者.参考下图: ...