最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • vue项目中集成腾讯TIM即时通讯

    正文概述 掘金(nxmin)   2021-06-19   442

    上图

    vue项目中集成腾讯TIM即时通讯 vue项目中集成腾讯TIM即时通讯

    前言

    项目需要做个客服功能,用户端小程序,客服人员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 = 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)
    }
    
    
    

    最后

    其余的代码不多做描述,直接看demo源码。 需要源码的可以联系本人qq:392716797


    起源地下载网 » vue项目中集成腾讯TIM即时通讯

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元