前言:由于项目中有聊天的功能,会根据不同的状态,来判断哪些角色的人可以参与聊天,或者结束聊天等等。由于历史原因,项目不能使用websocket 来实现实时通信,所以就使用了云信的SDK,来实现实时聊天功能。
1. 首先引入两个sSDK文件
<script type="text/javascript" src="/js/Web_SDK_Base_v2.4.0.js"></script>
<script type="text/javascript" src="/js/Web_SDK_NIM_v2.4.0.js"></script>
2. 初始化nim (注意,此项目是用Vue 来写的,里面有些变量需自己初始化);
3 .account、token,这里的两个参数为当前用户名的登录名,并不是token,唯一的登录名。
4. onmsg 为有新消息之后的回调,里面具体的判断为该项目具体逻辑内容,自己酌情处理。
5. 该插件只能捕捉到有新消息时会自动调一次,插件并不能得到具体的消息内容,还需自己在调取一次。
initNim() { if (null == this.nim) { this.nim = new NIM({ debug: false, //是否开启日志, 开发者可以开启日志, 这样 SDK 会将关键操作的信息打印到控制台上, 便于调试 //appKey: 'e3799bfb2a00f669b32a163a230d6667', // 在云信管理后台查看应用的 appKey appKey: 'fb1a6e97ed4517b1b39e519c4e24c6db', // 在云信管理后台查看应用的 appKey account: this.expertInfo.loginName, // 帐号, 应用内唯一 token: this.expertInfo.loginName, // 应该使用 loginName // 帐号的 token, 用于建立连接 db: false, onmsg: (msg) => { let obj = JSON.parse(msg.text); if (obj.NoticeTypesDescription == expert.newTalkMessage) { if (obj.Sender !== this.expertInfo.loginName) { //记数 // this.redNewMessage = true; let num = 0; let id = obj.ThingUnique; for (let i = 0; i < this.dataList.length; i++) { if (this.dataList[i].taskUnique == id) { this.update = this.dataList[i]; } } this.updateCount(this.update.unreadCount); return; } else if (obj.Owner == this.expertInfo.loginName) { //接收新消息 this.initSource(0, 99); this.nimFlag = true; return; } } } }); } },