- 資訊首頁(yè) > 開(kāi)發(fā)技術(shù) > web開(kāi)發(fā) > JavaScript >
- vue實(shí)現集成騰訊TIM即時(shí)通訊
本文主要介紹了vue實(shí)現集成騰訊TIM即時(shí)通訊,分享給大家,具體如下:
上圖
項目需要做個(gè)客服功能,用戶(hù)端小程序,客服人員web端,于是用到了騰訊的tim
在騰訊云官網(wǎng)上創(chuàng )建應用,獲取到相應的SDKAppID和相應的秘鑰信息
安裝SDK
(1) web項目使用命令
// IM Web SDK npm install tim-js-sdk --save // 發(fā)送圖片、文件等消息需要的 COS SDK npm install cos-js-sdk-v5 --save
(2) 小程序項目使用命令
// IM 小程序 SDK npm install tim-wx-sdk --save // 發(fā)送圖片、文件等消息需要的 COS SDK npm install cos-wx-sdk-v5 --save
main.js中引入
import TIM from 'tim-js-sdk'; // import TIM from 'tim-wx-sdk'; // 微信小程序環(huán)境請取消本行注釋?zhuān)⒆⑨尩?import TIM from 'tim-js-sdk'; import COS from 'cos-js-sdk-v5'; // import COS from 'cos-wx-sdk-v5'; // 微信小程序環(huán)境請取消本行注釋?zhuān)⒆⑨尩?import COS from 'cos-js-sdk-v5'; // 創(chuàng )建 SDK 實(shí)例,TIM.create() 方法對于同一個(gè) SDKAppID 只會(huì )返回同一份實(shí)例 let options = { SDKAppID: 0 // 接入時(shí)需要將0替換為您的即時(shí)通信應用的 SDKAppID }; let tim = TIM.create(options); // SDK 實(shí)例通常用 tim 表示 // 設置 SDK 日志輸出級別,詳細分級請參見(jiàn) setLogLevel 接口的說(shuō)明 tim.setLogLevel(0); // 普通級別,日志量較多,接入時(shí)建議使用 // tim.setLogLevel(1); // release級別,SDK 輸出關(guān)鍵信息,生產(chǎn)環(huán)境時(shí)建議使用 // 將騰訊云對象存儲服務(wù) SDK (以下簡(jiǎn)稱(chēng) COS SDK)注冊為插件,IM SDK 發(fā)送文件、圖片等消息時(shí),需要用到騰訊云的 COS 服務(wù) 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 // 監聽(tīng)事件 收到離線(xiàn)消息和會(huì )話(huà)列表同步完畢通知 tim.on(TIM.EVENT.SDK_READY, onReadyStateUpdate, this) // 收到SDK進(jìn)入not ready狀態(tài)通知,此時(shí)SDK無(wú)法正常工作 tim.on(TIM.EVENT.SDK_NOT_READY, onReadyStateUpdate, this) // 收到被踢下線(xiàn)通知 tim.on(TIM.EVENT.KICKED_OUT, kickOut, this) // 出錯統一處理 tim.on(TIM.EVENT.ERROR, onError, this) // 收到推送的消息,遍歷event.data獲取消息列表數據并渲染到頁(yè)面 tim.on(TIM.EVENT.MESSAGE_RECEIVED, messageReceived, this) // 更新會(huì )話(huà)列表 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) // 網(wǎng)絡(luò )狀態(tài)變化 tim.on(TIM.EVENT.NET_STATE_CHANGE, netStateChange, this) function onReadyStateUpdate ({ name }) { const isSDKReady = (name === TIM.EVENT.SDK_READY) if (isSDKReady) { //用戶(hù)信息 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) } //被踢下線(xiàn)函數,被踢下線(xiàn)之后需要設置重新登錄 function kickOut (event) { store.dispatch('resetStore') wx.showToast({ title: '你已被踢下線(xiàn)', icon: 'none', duration: 1500 }) setTimeout(() => { wx.reLaunch({ url: '../account/login' }) }, 500) } function onError (event) { // 網(wǎng)絡(luò )錯誤不彈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: '已接入網(wǎng)絡(luò )', duration: 2000 } case TIM.TYPES.NET_STATE_CONNECTING: return { title: '當前網(wǎng)絡(luò )不穩定', duration: 2000 } case TIM.TYPES.NET_STATE_DISCONNECTED: return { title: '當前網(wǎng)絡(luò )不可用', duration: 2000 } default: return '' } } //網(wǎng)絡(luò )狀態(tài)變化函數 function netStateChange (event) { console.log(event.data.state) store.commit('showToast', checkoutNetState(event.data.state)) } //消息收發(fā) 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,'首頁(yè)信息') 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 // 對方接聽(tīng) case 4: $bus.$emit('onCall', videoCustom) break // 對方掛斷 case 5: $bus.$emit('onClose') break // 對方正在通話(huà)中 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) }
到此這篇關(guān)于vue實(shí)現集成騰訊TIM即時(shí)通訊的文章就介紹到這了,更多相關(guān)vue騰訊TIM即時(shí)通訊內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。
Copyright ? 2009-2022 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 特網(wǎng)科技 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 百度云 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站