vue调用后台接口实现预览(vue实现集成腾讯TIM即时通讯)
类别:编程学习 浏览量:2217
时间:2021-11-03 12:52:34 vue调用后台接口实现预览
vue实现集成腾讯TIM即时通讯本文主要介绍了vue实现集成腾讯TIM即时通讯,分享给大家,具体如下:
上图
前言项目需要做个客服功能,用户端小程序,客服人员web端,于是用到了腾讯的tim
在腾讯云官网上创建应用,获取到相应的SDKAppID和相应的秘钥信息
安装SDK
(1) web项目使用命令
// IM Web SDK npm install tim-js-sdk --save // 发送图片、文件等消息需要的 COS SDK npm install cos-js-sdk-v5 --save
(2) 小程序项目使用命令
// IM 小程序 SDK npm install tim-wx-sdk --save // 发送图片、文件等消息需要的 COS SDK npm install cos-wx-sdk-v5 --save
main.js中引入
import TIM from 'tim-js-sdk'; // import TIM from 'tim-wx-sdk'; // 微信小程序环境请取消本行注释,并注释掉 import TIM from 'tim-js-sdk'; import COS from 'cos-js-sdk-v5'; // import COS from 'cos-wx-sdk-v5'; // 微信小程序环境请取消本行注释,并注释掉 import COS from 'cos-js-sdk-v5'; // 创建 SDK 实例,TIM.create() 方法对于同一个 SDKAppID 只会返回同一份实例 let options = { SDKAppID: 0 // 接入时需要将0替换为您的即时通信应用的 SDKAppID }; let tim = TIM.create(options); // SDK 实例通常用 tim 表示 // 设置 SDK 日志输出级别,详细分级请参见 setLogLevel 接口的说明 tim.setLogLevel(0); // 普通级别,日志量较多,接入时建议使用 // tim.setLogLevel(1); // release级别,SDK 输出关键信息,生产环境时建议使用 // 将腾讯云对象存储服务 SDK (以下简称 COS SDK)注册为插件,IM SDK 发送文件、图片等消息时,需要用到腾讯云的 COS 服务 wx.$app = tim wx.$app.registerPlugin({'cos-wx-sdk': COS}) wx.store = store wx.TIM = TIM wx.dayjs = dayjs dayjs.locale('zh-cn') let $bus = new Vue() Vue.prototype.TIM = TIM Vue.prototype.$type = TYPES Vue.prototype.$store = store Vue.prototype.$bus = $bus // 监听事件 收到离线消息和会话列表同步完毕通知 tim.on(TIM.EVENT.SDK_READY, onReadyStateUpdate, this) // 收到SDK进入not ready状态通知,此时SDK无法正常工作 tim.on(TIM.EVENT.SDK_NOT_READY, onReadyStateUpdate, this) // 收到被踢下线通知 tim.on(TIM.EVENT.KICKED_OUT, kickOut, this) // 出错统一处理 tim.on(TIM.EVENT.ERROR, onError, this) // 收到推送的消息,遍历event.data获取消息列表数据并渲染到页面 tim.on(TIM.EVENT.MESSAGE_RECEIVED, messageReceived, this) // 更新会话列表 tim.on(TIM.EVENT.CONVERSATION_LIST_UPDATED, convListUpdate, this) // 更新群组列表 tim.on(TIM.EVENT.GROUP_LIST_UPDATED, groupListUpdate, this) // 更新黑名单 tim.on(TIM.EVENT.BLACKLIST_UPDATED, blackListUpdate, this) // 网络状态变化 tim.on(TIM.EVENT.NET_STATE_CHANGE, netStateChange, this) function onReadyStateUpdate ({ name }) { const isSDKReady = (name === TIM.EVENT.SDK_READY) if (isSDKReady) { //用户信息 wx.$app.getMyProfile().then(res => { store.commit('updateMyInfo', res.data) uni.setStorageSync('name', res.data.nick); console.log(name,'updateMyInfo'); }) //黑名单列表,存入vuex中 wx.$app.getBlacklist().then(res => { store.commit('setBlacklist', res.data) }) } store.commit('setSdkReady', isSDKReady) } //被踢下线函数,被踢下线之后需要设置重新登录 function kickOut (event) { store.dispatch('resetStore') wx.showToast({ title: '你已被踢下线', icon: 'none', duration: 1500 }) setTimeout(() => { wx.reLaunch({ url: '../account/login' }) }, 500) } function onError (event) { // 网络错误不弹toast && sdk未初始化完全报错 if (event.data.message && event.data.code && event.data.code !== 2800 && event.data.code !== 2999) { store.commit('showToast', { title: event.data.message, duration: 2000 }) } } // function checkoutNetState (state) { switch (state) { case TIM.TYPES.NET_STATE_CONNECTED: return { title: '已接入网络', duration: 2000 } case TIM.TYPES.NET_STATE_CONNECTING: return { title: '当前网络不稳定', duration: 2000 } case TIM.TYPES.NET_STATE_DISCONNECTED: return { title: '当前网络不可用', duration: 2000 } default: return '' } } //网络状态变化函数 function netStateChange (event) { console.log(event.data.state) store.commit('showToast', checkoutNetState(event.data.state)) } //消息收发 function messageReceived (event) { console.log(event,'main.js'); for (let i = 0; i < event.data.length; i++) { let item = event.data[i] if (item.type === TYPES.MSG_GRP_TIP) { if (item.payload.operationType) { $bus.$emit('groupNameUpdate', item.payload) } } if (item.type === TYPES.MSG_CUSTOM) { if (isJSON(item.payload.data)) { const videoCustom = JSON.parse(item.payload.data) console.log(item,'首页信息') if (videoCustom.version === 3) { switch (videoCustom.action) { // 对方呼叫我 case 0: if (!store.getters.isCalling) { let url = `call?args=${item.payload.data}&&from=${item.from}&&to=${item.to}&&name=`+uni.getStorageSync('name')+'&&nick='+''; console.log(url,'url') wx.navigateTo({url}) } else { $bus.$emit('isCalling', item) } break // 对方取消 case 1: wx.navigateBack({ delta: 1 }) break // 对方拒绝 case 2: $bus.$emit('onRefuse') break // 对方不接1min case 3: wx.navigateBack({ delta: 1 }) break // 对方接听 case 4: $bus.$emit('onCall', videoCustom) break // 对方挂断 case 5: $bus.$emit('onClose') break // 对方正在通话中 case 6: $bus.$emit('onBusy') break default: break } } } } } store.dispatch('onMessageEvent', event) } function convListUpdate (event) { store.commit('updateAllConversation', event.data) } function groupListUpdate (event) { store.commit('updateGroupList', event.data) } function blackListUpdate (event) { store.commit('updateBlacklist', event.data) }
到此这篇关于vue实现集成腾讯TIM即时通讯的文章就介绍到这了,更多相关vue腾讯TIM即时通讯内容请搜索开心学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持开心学习网!
您可能感兴趣
- vue跨域代理怎么写(解决vue $http的get和post请求跨域问题)
- vue请求token无效(关于Vue 消除Token过期时刷新页面的重复提示问题)
- vue实现展开动画(Vue组件实现旋转木马动画)
- vue插槽实例(Vue中插槽slot的使用方法与应用场景详析)
- vue移动端页面不能上下滑动(vue移动端实现左滑编辑与删除的全过程)
- vue中如何判断请求状态码(关于VUE的编译作用域及slot作用域插槽问题)
- vue.js入门教学第15讲(Vue.js 使用AntV X6的示例步骤)
- vue怎么配置到idea(idea编译器vue缩进报错问题场景分析)
- vue实现树形结构菜单(vue递归实现三级菜单)
- vue3.0怎么往标签填数据(Vue3.0写自定义指令的简单步骤记录)
- vuex数据持续化(Vuex数据持久化实现的思路与代码)
- vue 富文本图片上传(vue.js云存储实现图片上传功能)
- vue轮播图代码(vue实现无缝轮播效果跑马灯)
- vue滚动条滚动事件(vue实现一个滚动条样式)
- vue常用的指令和修饰符(Vue中 Vue.prototype使用详解)
- vue3.0零基础入门(快速掌握Vue3.0中如何上手Vuex状态管理)
- 高马尾扎发(高马尾扎发教程视频)
- 这里输入关键词(请手动输入关键词)
- 小说 顾瑾岚拿出一套飞行棋,别说你连飞行棋都不会哦(顾瑾岚拿出一套飞行棋)
- 金品公司 界界乐中秋限定飞行棋礼盒 露营藤篮礼盒全新上市(界界乐中秋限定飞行棋礼盒)
- 必看 8月,相比七夕,更需要注意的是这些事(必看8月相比七夕)
- 8月23日11时16分将迎处暑,逐渐进入气象意义上的秋天(8月23日11时16分将迎处暑)
热门推荐
- docker启动nginx容器命令(Docker安装Nginx教程实现图例讲解)
- mysql中怎么删除整张表(MySQL如何优雅的删除大表实例详解)
- iis配置网站授权(IIS的web.config中跨域访问设置方法)
- win7iis搭建web服务器(如何搭建云服务器之IIS的配置)
- react定时任务(手把手带你用React撸一个日程组件)
- sql语句的groupby是做什么的(深入浅析SQL中的group by 和 having 用法)
- docker修改镜像配置文件(Docker配置本地镜像与容器的存储位置)
- SQL Server数据库备份的几个建议
- dede模板本地部署(dedecms5.7首页和列表页模板中动态调用文章浏览次数的方法)
- docker10个小技巧(docker比赛提交常用命令小结)