上图


前言

项目需要做个客服功能,用户端小程序,客服人员web端,于是用到了腾讯的tim

准备工作

  1. 在腾讯云官网上创建应用,获取到相应的SDKAppID和相应的秘钥信息

  2. 安装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
  1. 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 = TIMwx.dayjs = dayjsdayjs.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// 对方不接1mincase 3:wx.navigateBack({delta: 1})break// 对方接听case 4:$bus.$emit('onCall', videoCustom)break// 对方挂断case 5:$bus.$emit('onClose')break// 对方正在通话中case 6:$bus.$emit('onBusy')breakdefault: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)
}

源码

关注公众号 《源码好又多》 回复 tim 获取源码

vue项目中集成腾讯TIM即时通讯(附源码)相关推荐

  1. Java毕设项目菜鸟驿站快递分发系统计算机(附源码+系统+数据库+LW)

    Java毕设项目菜鸟驿站快递分发系统计算机(附源码+系统+数据库+LW) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ ...

  2. Java毕设项目校园外卖系统Web端计算机(附源码+系统+数据库+LW)

    Java毕设项目校园外卖系统Web端计算机(附源码+系统+数据库+LW) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ ...

  3. Java毕设项目餐厅线上点菜系统计算机(附源码+系统+数据库+LW)

    Java毕设项目餐厅线上点菜系统计算机(附源码+系统+数据库+LW) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Ec ...

  4. Java毕设项目东理咨询交流论坛计算机(附源码+系统+数据库+LW)

    Java毕设项目东理咨询交流论坛计算机(附源码+系统+数据库+LW) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Ec ...

  5. Java毕设项目艾灸减肥管理网站计算机(附源码+系统+数据库+LW)

    Java毕设项目艾灸减肥管理网站计算机(附源码+系统+数据库+LW) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Ec ...

  6. Java毕设项目仓库进销存管理系统计算机(附源码+系统+数据库+LW)

    Java毕设项目仓库进销存管理系统计算机(附源码+系统+数据库+LW) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ E ...

  7. Java毕设项目中小学家校通系统计算机(附源码+系统+数据库+LW)

    Java毕设项目中小学家校通系统计算机(附源码+系统+数据库+LW) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Ec ...

  8. 每日分享(四合一即时通讯聊天源码APP群聊、私聊、朋友圈)

    demo软件园每日更新资源,请看到最后就能获取你想要的: 1.Python整洁编程 完整版PDF Python 与其他语言的不同之处在于,它是一种简单而有深度的语言.因为简单,所以谨慎编写代码要重要得 ...

  9. Java毕设项目校园外卖零食商城系统计算机(附源码+系统+数据库+LW)

    Java毕设项目校园外卖零食商城系统计算机(附源码+系统+数据库+LW) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ ...

最新文章

  1. 视学算法第六轮送书活动,16本高质量书免费拿走!
  2. 树上分治详解 超级详细(附带例题 poj1741(给了题目))
  3. python下三角代码分析_空间分析:2-3。用Python生成Delaunay三角形,23Python,德劳内
  4. linux讲解系列:激活script
  5. 解除被DenyHosts锁定的IP地址
  6. 分布式开放消息系统 ( RocketMQ ) 的原理与实践
  7. Java 数组常用操作一(排序、元素位置查找、添加元素、获取长度、数组反向、最大值最小值、合并、范围填充)
  8. rmmod无法卸载驱动_AMD芯片组驱动更新:优化了RYZEN CPU供电调节
  9. php curl keep alive,php curl 保持长连接
  10. 第二次作业 贺俊朋-201731062431
  11. unimodal_palindromic——回文串dp动规
  12. 别细看|请收藏|堆垛机故障大全及解决办法
  13. 数字人民币专利数激增, “区块链”领域大有可为
  14. python序列的应用
  15. 湖南大学计算机学硕推免率,好几个帖子都在讨论清北华五的推免生源我来发一下b类大学湖大今...
  16. RTMP直播到FMS中的AAC音频直播
  17. jupyter lab R
  18. C语言电话簿程序设计,2010电话簿管理程序-c语言程序设计-毕业论文.doc
  19. net.sf.json.JSONException: Unterminated string at character 1801
  20. layui导出excel动态拆分单元格一个单元格显示多行数据合并单元格

热门文章

  1. 六、软件实现深度学习河流训练样本数据的制作(软件操作完善训练样本)——针对标签图片问题的进一步完善
  2. C语言:实验5-1 使用函数计算两个复数之积.2021-07-23
  3. html5新特性表单控件,老生常谈h5新特性1:(表单)
  4. Openstack七大组件介绍
  5. [黑科技] 发现了一个Amazon黑科技插件,可以查看亚马逊卖家邮箱和电话。
  6. icloud邮箱添加发件服务器地址,怎么设置iCloud电子邮件地址别名 怎么在iPhone上管理电子邮箱...
  7. Automic Habits
  8. 利用java实现天气预报设计教程视频_java实现天气预报(解释+源代码)
  9. 【服务器数据恢复】哪些故障会导致服务器数据丢失?多块硬盘离线的数据恢复案例
  10. 4G传输模块的功能应用