欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Vue在H5 項目中使用融云進行實時個人單聊通訊

 更新時間:2020年12月14日 16:27:26   作者:源哥哥吶  
這篇文章主要介紹了Vue在H5 項目中使用融云進行實時個人單聊通訊,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

由于其他博客的相關(guān)融云的Vue項目開發(fā)不是特別完善,此項目加入了自己的一些思考,可供大家有一點方向。

1.融云官網(wǎng)注冊賬號,創(chuàng)建應(yīng)用并獲取必要的初始化參數(shù) appkey

appkey

2.融云web開發(fā)文檔 本人使用3.x 版本

3.vue項目引入cdn(index.html)

​ 項目需求:用戶當(dāng)前會話列表+用戶當(dāng)前會話頁面

// 注意在dom之前引入

<script src="https://cdn.ronghub.com/RongIMLib-3.0.0-dev.js"></script>

4.在項目開始之前先獲取融云返回的Token(此操作需要后端操作,token用于后面初始化連接融云時使用)

// 獲取融云token
	// RongToken --- api ---
  getRongToken() {
    let userId = this.$store.state.member.info.member_id
    let name = this.$store.state.member.info.member_name
    let portraitUri = this.$store.state.member.info.member_avatar
    RongToken(userId,name,portraitUri).then((res) => {
      if(res.code == 200) {
        this.appToken = res.data.token
        // 將融云token 存入vuex
        this.$store.commit('setAppToken',res.data.token)
      }else{
        return;
      }
    })
  },

5.融云初始化

// 初始化融云
initRong() {
  this.IM = RongIMLib.init({
    appkey: 'xxxxxxx' // 融云appkey
  })
},

6.建立連接

// 建立連接 

getConnect() {
  var user = {
    token: this.$store.state.im_chat.appToken
  };
  this.IM.connect(user).then((res) => {
    // console.log('鏈接成功, 鏈接用戶 id 為: ', res.id); 
    // 改變用戶連接狀態(tài) 用于監(jiān)聽用戶是否已連接 
    this.$store.commit('changeConnectStatus',true)
  }).catch((error) => {
    // console.log('鏈接失敗: ', error.code, error.msg);
  });
},

7.會話列表(用于監(jiān)聽會話列表及渲染當(dāng)前會話列表)

// 用于監(jiān)聽會話列表
ImWatch() {
  let IM = this.IM
  let conversationList = [];
  let option = {
    count: 30
  }
  IM.Conversation.getList(option).then((allConversationList) => {
    // console.log('獲取會話列表成功', allConversationList);
    conversationList = IM.Conversation.merge({
      conversationList: conversationList,
      updatedConversationList: allConversationList
    }); // TODO 更新會話列表界面
    this.list = conversationList
  });
  IM.watch({
    conversation: (event) =>{
      var updatedConversationList = event.updatedConversationList; // 更新的會話列表
      // console.log('更新會話匯總:', updatedConversationList);
      // console.log('最新會話列表:', IM.Conversation.merge({
      //   conversationList: conversationList,
      //   updatedConversationList: updatedConversationList
      // }));
      this.list = updatedConversationList
    },
    message: function(event){
      var message = event.message;
      // console.log('收到新消息', message);
    },
    status: (event)=>{
      var status = event.status;
      if(status != RongIMLib.CONNECTION_STATUS.CONNECTED) {
        this.$store.commit('changeConnectStatus',false)
      }
      switch (status) {
      case RongIMLib.CONNECTION_STATUS.CONNECTED:
        console.log('鏈接成功');
        break;
      case RongIMLib.CONNECTION_STATUS.CONNECTING:
        console.log('正在連接中');
        break;
      case RongIMLib.CONNECTION_STATUS.DISCONNECTED:
        console.log('已主動斷開連接');
        break;
      case RongIMLib.CONNECTION_STATUS.NETWORK_UNAVAILABLE:
        console.log('網(wǎng)絡(luò)不可用'); // SDK 內(nèi)部會自動進行重連
        break;
      case RongIMLib.CONNECTION_STATUS.SOCKET_ERROR:
        console.log('Socket 鏈接錯誤'); // SDK 內(nèi)部會自動進行重連
        break;
      case RongIMLib.CONNECTION_STATUS.KICKED_OFFLINE_BY_OTHER_CLIENT:
        console.log('其他設(shè)備登錄, 本端被踢'); // 己端被踢, 不可進行重連. 否則會造成多端循環(huán)互踢
        break;
      case RongIMLib.CONNECTION_STATUS.BLOCKED:
        console.log('鏈接斷開, 用戶已被封禁');
        break;
      default:
        console.log('鏈接狀態(tài)變化為:', status);
        break;
      }
    }
  })
},

會話列表

8.會話頁面(用于監(jiān)聽當(dāng)前新消息是否是當(dāng)前聊天對象以及是否渲染在當(dāng)前會話頁面)

// 用于當(dāng)前會話頁面
ImWatch() {
  let IM = this.IM
  var conversation = IM.Conversation.get({
    targetId: this.targetId,
    type: RongIMLib.CONVERSATION_TYPE.PRIVATE
  });
  var option = {
    timestrap: 0, // 為0從當(dāng)前時間最新獲取
    count: 20
  };
  conversation.getMessages(option).then((result) =>{
    var list = result.list; // 歷史消息列表
    var hasMore = result.hasMore; // 是否還有歷史消息可以獲取
    // console.log('獲取歷史消息成功', list, hasMore);
    this.list = list
  });
  IM.watch({
    message: function(event){
      var message = event.message;
      // console.log('收到新消息', message);
    },
    // 監(jiān)聽會話
    conversation:(res) => {
      var updatedConversationList = res.updatedConversationList;
      // 發(fā)送信息過來--用戶id
      // 發(fā)送過來id != 當(dāng)前用戶id 或者當(dāng)前會話id 則不渲染在列表中
      // 等于當(dāng)前id 或 會 話id 則即加入列表中
      let updateId = updatedConversationList[0].latestMessage.content.user.id
      let member_id = this.$store.state.member.info.member_id
      let targetId = Number(this.targetId)
      if(updateId != targetId && updateId != member_id){
        return;
      }
      this.list.push(updatedConversationList[0].latestMessage)
    },
    status: (event)=>{
      var status = event.status;
      if(status != RongIMLib.CONNECTION_STATUS.CONNECTED) {
        this.$store.commit('changeConnectStatus',false)
      }
      switch (status) {
      case RongIMLib.CONNECTION_STATUS.CONNECTED:
        console.log('鏈接成功');
        break;
      case RongIMLib.CONNECTION_STATUS.CONNECTING:
        console.log('正在連接中');
        break;
      case RongIMLib.CONNECTION_STATUS.DISCONNECTED:
        console.log('已主動斷開連接');
        break;
      case RongIMLib.CONNECTION_STATUS.NETWORK_UNAVAILABLE:
        console.log('網(wǎng)絡(luò)不可用'); // SDK 內(nèi)部會自動進行重連
        break;
      case RongIMLib.CONNECTION_STATUS.SOCKET_ERROR:
        console.log('Socket 鏈接錯誤'); // SDK 內(nèi)部會自動進行重連
        break;
      case RongIMLib.CONNECTION_STATUS.KICKED_OFFLINE_BY_OTHER_CLIENT:
        console.log('其他設(shè)備登錄, 本端被踢'); // 己端被踢, 不可進行重連. 否則會造成多端循環(huán)互踢
        break;
      case RongIMLib.CONNECTION_STATUS.BLOCKED:
        console.log('鏈接斷開, 用戶已被封禁');
        break;
      default:
        console.log('鏈接狀態(tài)變化為:', status);
        break;
      }
    }
  })
},

9.會話頁面(用于點擊發(fā)送之后監(jiān)聽發(fā)送信息及渲染當(dāng)前頁面)

// 監(jiān)聽當(dāng)前發(fā)送的信息
send() {
  if(this.context == '') {
    Toast('請輸入內(nèi)容');
    return;
  }
  var conversation = this.IM.Conversation.get({
    targetId: this.targetId, // 發(fā)送的目標(biāo)id
    type: RongIMLib.CONVERSATION_TYPE.PRIVATE, // 單聊
  });
  conversation.send({
    messageType: RongIMLib.MESSAGE_TYPE.TEXT, // 'RC:TxtMsg'
    content: {
      content: this.context, // 文本內(nèi)容
      // 發(fā)送消息攜帶的參數(shù) 用于頁面渲染及相關(guān)判斷
      user:{
        id:this.$store.state.member.info.member_id,
        username:this.$store.state.member.info.member_name,
        shopname:this.storeName,
        portraitUri:this.$store.state.member.info.member_avatar,
      }
    }
  }).then((message) =>{
    // console.log('發(fā)送文字消息成功', message);
    this.context = ''
  }).catch((error) => {
    Toast('發(fā)送失敗,請重試')
  });
}

會話頁面

到此這篇關(guān)于Vue在H5 項目中使用融云進行實時個人單聊通訊的文章就介紹到這了,更多相關(guān)Vue使用融云實時個人單聊通訊內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue實現(xiàn)頁面上傳文件夾壓縮后傳給服務(wù)器的操作

    vue實現(xiàn)頁面上傳文件夾壓縮后傳給服務(wù)器的操作

    這篇文章主要介紹了vue實現(xiàn)頁面上傳文件夾壓縮后傳給服務(wù)器的操作,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-09-09
  • vue地址欄直接輸入路由無效問題的解決

    vue地址欄直接輸入路由無效問題的解決

    這篇文章主要介紹了vue地址欄直接輸入路由無效問題的解決,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • Vue如何實現(xiàn)pptx在線預(yù)覽

    Vue如何實現(xiàn)pptx在線預(yù)覽

    通過PPTXjs插件,實現(xiàn)PPTX文件在線預(yù)覽,需下載PPTXjs,將其引入HTML頁面,并編寫相應(yīng)的HTML和JS代碼,如果是移動端還需調(diào)整div大小,這是一種便捷的前端PPTX轉(zhuǎn)HTML技術(shù),適合網(wǎng)頁展示使用
    2024-09-09
  • 利用vscode編寫vue的簡單配置詳解

    利用vscode編寫vue的簡單配置詳解

    這篇文章主要給大家介紹了利用vscode編寫vue簡單配置的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面跟著小編一起來學(xué)習(xí)學(xué)習(xí)吧。
    2017-06-06
  • vue?layout模板頁的使用實例詳解

    vue?layout模板頁的使用實例詳解

    Vue 項目中使用布局組件來創(chuàng)建頁面布局的方式是完全可行的,而且在很多項目中都被廣泛采用,包括像 ruoyi 這樣的框架,這篇文章主要介紹了vue?layout模板頁的使用,需要的朋友可以參考下
    2023-08-08
  • vue自定義密碼輸入框解決瀏覽器自動填充密碼的問題(最新方法)

    vue自定義密碼輸入框解決瀏覽器自動填充密碼的問題(最新方法)

    這篇文章主要介紹了vue自定義密碼輸入框解決瀏覽器自動填充密碼的問題,通過將密碼輸入框的type設(shè)置為text,修改樣式上的顯示,來實現(xiàn)既可以讓瀏覽器不自動填充密碼,又可以隱藏密碼的效果,需要的朋友可以參考下
    2023-04-04
  • 基于vue3+threejs實現(xiàn)可視化大屏效果

    基于vue3+threejs實現(xiàn)可視化大屏效果

    本文主要主要講述對threejs的一些api進行基本的封裝,在vue3項目中來實現(xiàn)一個可視化的3d項目,包含了一些常用的功能,場景、燈光、攝像機初始化,模型、天空盒的加載,以及鼠標(biāo)點擊和懸浮的事件交互,感興趣的朋友可以參考下
    2023-06-06
  • vue分割面板封裝實現(xiàn)記錄

    vue分割面板封裝實現(xiàn)記錄

    這篇文章主要為大家詳細(xì)介紹了vue分割面板封裝實現(xiàn)記錄,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • vue使用exif獲取圖片經(jīng)緯度的示例代碼

    vue使用exif獲取圖片經(jīng)緯度的示例代碼

    這篇文章主要介紹了vue使用exif獲取圖片經(jīng)緯度的示例代碼,幫助大家更好的利用vue獲取圖片信息,感興趣的朋友可以了解下
    2020-12-12
  • @click.native和@click的區(qū)別及說明

    @click.native和@click的區(qū)別及說明

    這篇文章主要介紹了@click.native和@click的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08

最新評論