本篇文章借鉴了一些资料,然后在这个基础上,我将环信的实现全部都集成在一个组件里面进行实现;

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的环信基本实时通信功能的更多相关文章

  1. 在微信框架模块中,基于Vue&Element前端的后台管理功能介绍

    微信开发包括公众号.企业微信.微信小程序等方面的开发内容,需要对腾信的微信API接口进行封装:包括事件.菜单.订阅用户.多媒体文件.图文消息.消息群发.微信支付和企业红包.摇一摇设备.语义理解.微信小 ...

  2. mui初级入门教程(五)— 聊聊即时通讯(IM),基于环信 web im SDK

    文章来源:小青年原创发布时间:2016-06-15关键词:mui,环信 web im,html5+,im,页面传值,缓存转载需标注本文原始地址: http://zhaomenghuan.github. ...

  3. iOS 环信集成问题(连文档都不说明的坑。。)

    首先,关于环信SDK的下载和一些依赖库的添加,在此我就不做详细介绍,(http://www.easemob.com/download/im)附上环信官网文档,可以看一下,上面都可以下载,也有相关配置介 ...

  4. 环信easeui集成:坑总结2018(二)

    环信EaseUI 集成,集成不做描述,看文档即可,下面主要谈一些对easeui的个性化需求修改. 该篇文章将解决的问题: 1.如何发送视频功能 2.未完待续.. ------------------- ...

  5. 基于环信SDK的IM即时通讯填坑之路(vue)

    公司最近使用第三方环信SDK的进行通信聊天,基本已完成.记录下填坑之路 1.可以通过以下方式引用 WebSDK 1.安装 npm install easemob-websdk --save 2. 先 ...

  6. 环信集成 2---基于环信Demo3.0,实现单聊功能

    这几天在做环信,所以把环信相关的东西拿过来,做个系统点的东西 注意: 这里Demo集成的是带有实时语音功能的(libEaseMobClientSDK.a). 环信库是直接拖拽EaseMobSDK文件夹 ...

  7. 基于环信的仿QQ即时通讯的简单实现

    代码地址如下:http://www.demodashi.com/demo/11645.html 我的博客地址 之前一直想实现聊天的功能,但是感觉有点困难,今天看了环信的API,就利用下午的时间动手试了 ...

  8. 李洪强iOS开发之-环信03_集成 SDK 基础功能

    李洪强iOS开发之-环信03_集成 SDK 基础功能 集成 SDK 基础功能 在您阅读此文档时,我们假定您已经具备了基础的 iOS 应用开发经验,并能够理解相关基础概念. SDK 同步/异步方法区分 ...

  9. android-使用环信SDK开发即时通信功能及源代码下载

    近期项目中集成即时聊天功能.挑来拣去,终于选择环信SDK来进行开发,选择环信的主要原因是接口方便.简洁.说明文档清楚易懂.文档有android.ios.和后台server端.还是非常全的. 环信官网: ...

随机推荐

  1. .net core 下的跨域设置

    1.CORS中间件处理跨源请求.以下代码为具有指定源的整个应用程序启用CORS: public void Configure(IApplicationBuilder app, IHostingEnvi ...

  2. ASP.NET Core 2.0发布/部署到Ubuntu服务器并配置Nginx反向代理

    原文链接https://www.linuxidc.com/Linux/2017-12/149557.htm ASP.NET Core 2.0 怎么发布到Ubuntu服务器?又如何在服务器上配置使用AS ...

  3. Simple example of use of __setstate__ and __getstate__

    class Foo(object): def __init__(self, val=2): self.val = val def __getstate__(self): print ("I' ...

  4. 移动端使用fastclick 解决

    html vue 1. cnpm i fastclick --save 2. 在main.js中引入并绑定到body import fastclick from 'fastclick'; 3. fas ...

  5. 泛型(Generic)接口

    泛型接口例子:一个学生有一个独一无二的ID,但是每个学生的姓名不一定是唯一的. class Program { static void Main(string[] args) { Student< ...

  6. 【转载】查看Linux进程CPU过高具体的线程堆栈(不中断程序)

    具体的命令经常忘记,毕竟用的不是很多.为了避免去找备份一下 1.TOP命令,找到占用CPU最高的进程 $ top top - 20:11:45 up 850 days,  1:18,  3 users ...

  7. Element-UI 的树列表实现单选

    1. Element-UI 的 el-tree 组件当设置了 show-checkbox 属性以后,默认是只能多选的,如果我们想要将其改选为单选,就要进行一些特殊的处理,首先看效果图. 2. 组件代码 ...

  8. 57 c++ 读取二进制文件: 以.raw后缀的TDF_Voxel_Size文件为例

    0 引言 毕业设计中用到了.raw格式的文件,需要将该文件按照M*N*P的矩阵格式加载到内存中.采用 #include <fstream> 中的FILE* 加载,并针对数据占用字节数,以 ...

  9. lua执行的两种方式

    一.交互模式 二.脚本式 创建一个以lua结尾的文件,例如hello.lua文件内容 println("hello world")

  10. NX二次开发-UFUN获取当前显示部件的TAG,UF_PART_ask_display_part

    NX9+VS2012 #include <uf.h> #include <uf_modl.h> #include <uf_part.h> UF_initialize ...