日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > vue >内容正文

vue

WebIM Vue Demo 使用文档

發(fā)布時(shí)間:2023/12/20 vue 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WebIM Vue Demo 使用文档 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

簡(jiǎn)介

使用 Vue 框架開(kāi)發(fā)的WebIM Demo,僅供參考集成:

  • Vue Demo (體驗(yàn)Demo)
  • Github.com(Github 源碼地址)

項(xiàng)目運(yùn)行

  • 說(shuō)明:音視頻功能必須使用 https + webkit瀏覽器
  • NODEJS 版本建議 6+ 低于 13 (升級(jí)到13,結(jié)果用不了) 目前用的是 V8.11.4

1.將源碼克隆到本地

git clone https://github.com/easemob/webim-vue-demo.git

2.進(jìn)入項(xiàng)目根目錄,安裝運(yùn)行需要的依賴模塊

npm install

3.上述操作完成后

# 啟動(dòng)測(cè)試 npm start (如需要測(cè)試音視頻功能,通過(guò) HTTPS=true npm start 啟動(dòng)) # 打包發(fā)布,發(fā)布后文件在 build/ 目錄下 npm run build

4.修改appkey 運(yùn)行
在WebIMConfig.js 中,將 appkey 改為自己在IM管理后臺(tái)申請(qǐng)的key,apiUrl ,xmppUrl 默認(rèn)的無(wú)需更改,如果已聯(lián)系環(huán)信商務(wù)購(gòu)買vip集群服務(wù),需要更改成環(huán)信提供的地址,或者直接將 isHttpsDNS改為 true,就不需要在本地配置apiUrl ,xmppUrl

目錄介紹

目錄說(shuō)明
build打包后的文件
config項(xiàng)目的配置
node_modules項(xiàng)目依賴
static資源文件
travisCI腳本
src項(xiàng)目源文件
components項(xiàng)目組件
config表情和項(xiàng)目中ui配置
pages項(xiàng)目頁(yè)面
router路由
storevuex store
utilssdk 引入和配置

Demo 文件說(shuō)明

  • 所有SDK 的調(diào)用都在 src/stroe,使用 VueX管理
SDK 集成

分為 NPM,本地引入文件 兩種方式,這里主要將下 Demo 集成方式:
demo 是使用 NPM 方式集成,代碼目錄:src/utils/WebIM.js

  • 引入 SDK 和配置文件,實(shí)例化。
  • 注冊(cè) SDK 監(jiān)聽(tīng)事件
登陸/注冊(cè)

集成IM SDK,只有登陸成功后才能進(jìn)行收發(fā)消息等操作
代碼目錄:src/pages/login
SDK 方法目錄:src/store/login

# 登陸 onLogin: function (context, payload) {context.commit("setUserName", payload.username);var options = {apiUrl: WebIM.config.apiURL,user: payload.username,pwd: payload.password,appKey: WebIM.config.appkey};WebIM.conn.open(options);localStorage.setItem("userInfo", JSON.stringify({ userId: payload.username, password: payload.password })); }, # 注冊(cè) onRegister: function (context, payload) {const _this = this;var options = {apiUrl: WebIM.config.apiURL,username: payload.username,password: payload.password,nickname: payload.nickname,appKey: WebIM.config.appkey,success: () => {//注冊(cè)成功,開(kāi)發(fā)者自己定義提示},error: (err) => {//注冊(cè)失敗,開(kāi)發(fā)者自己定義提示};WebIM.conn.registerUser(options); },
消息模塊

代碼目錄:src/components/chat
SDK 方法目錄:src/store/chat

  • index 為發(fā)送消息 (群組消息需要設(shè)置type msg.setGroup("groupchat"))

  • message 為顯示消息上屏

  • 圖片消息
    代碼目錄: src/components/upLoadImage

  • 附件消息
    代碼目錄: src/components/upLoadFile

  • 表情消息
    代碼目錄: src/components/chatEmoji

  • 錄音發(fā)送
    支持直接錄音發(fā)送
    代碼目錄:src/components/recorder

# 發(fā)送文本消息 onSendText: function(context, payload){const { chatType, chatId, message } = payload;const id = WebIM.conn.getUniqueId();const time = +new Date();const chatroom = chatType === "chatroom";const type = chatType === "contact" ? "singleChat" : "groupChat";const jid = {contact: "name",group: "groupid",chatroom: "id"};const msgObj = new WebIM.message("txt", id);msgObj.set({msg: message,to: chatId[jid[chatType]],chatType: type,roomType: chatroom,success: function(){//消息發(fā)送成功,開(kāi)發(fā)者自己處理},fail: function(e){//消息發(fā)送失敗,開(kāi)發(fā)者自己處理}});if(chatType === "group" || chatType === "chatroom"){msgObj.setGroup("groupchat");}WebIM.conn.send(msgObj.body); }
好友功能

代碼目錄:src/components/addModel
SDK調(diào)用方法目錄:src/store/friendModule

  • addFriend 添加好友
  • friendBlack 好友黑名單
  • getFriendRequest 收到好友請(qǐng)求
# 添加好友 addFriend: function(context, payload){const username = localStorage.getItem("userInfo") && JSON.parse(localStorage.getItem("userInfo")).userId;const { id } = payload;WebIM.conn.subscribe({to: id,message: username + "請(qǐng)求添加你為好友"}); }, # 接受好友請(qǐng)求 acceptSubscribe: function(context, payload){WebIM.conn.subscribed({to: payload,message: "[resp:true]"}); }, # 拒絕好友請(qǐng)求 declineSubscribe: function(context, payload){const username = localStorage.getItem("userInfo") && JSON.parse(localStorage.getItem("userInfo")).userId;const { id } = payload;WebIM.conn.unsubscribed({to: id,message: username + "拒絕您的好友請(qǐng)求"}); }, # 獲取好友黑名單 onGetFriendBlack: function(context, payload){WebIM.conn.getBlacklist(); }, # 添加好友黑名單 onAddBlack: function(context, payload){let addName = payload.userId.name;WebIM.conn.addToBlackList({name: addName,});Vue.$store.dispatch("onGetContactUserList", { type: "addBlack", addName }); }, # 移除好友黑名單 onRemoveBlack: function(context, payload){let blackName = payload.removeName;WebIM.conn.removeFromBlackList({name: blackName,success: function(){},error: function(){}}); }, # 刪除好友 onDeleteFriend: function(context, payload){let deleteName = payload.userId.name;WebIM.conn.removeRoster({to: deleteName,success: function(){ // 刪除成功conn.unsubscribed({to: deleteName});},error: function(){ // 刪除失敗}}); }
音視頻

單人和多人音視頻,代碼目錄:src/components/emediaModal

  • index 初始化單人音視頻,注冊(cè)單人音視頻
  • multiAVModal 多人音視頻 (請(qǐng)直接參考文件)
# 單人音頻呼叫 onCallVoice: function(context, payload){const { chatType, to } = payload;const type = chatType === "contact" ? "singleChat" : "groupChat";const userInfo = JSON.parse(localStorage.getItem("userInfo"));if(chatType === "contact"){WebIM.call.caller = userInfo.userId;WebIM.call.makeVoiceCall(to, null, payload.rec, payload.recMerge);} }, # 單人視頻呼叫 onCallVideo: function(context, payload){const { chatType, to } = payload;const type = chatType === "contact" ? "singleChat" : "groupChat";const userInfo = JSON.parse(localStorage.getItem("userInfo"));if(chatType === "contact"){WebIM.call.caller = userInfo.userId;WebIM.call.makeVideoCall(to, null, payload.rec, payload.recMerge);} }, # 接收音頻/視頻 邀請(qǐng) accept(){WebIM.call.acceptCall(); }, # 掛斷 WebIM.call.endCall();
音視頻錄制

錄制功能,SDK V3.0.6 版本開(kāi)始,由SDK 控制是否進(jìn)行錄制(若SDK 不是此版本,錄制功能請(qǐng)聯(lián)系商務(wù)同事協(xié)調(diào)配置)
代碼目錄: src/components/videoSetting
SDK 方法調(diào)用目錄:src/store/chat

  • 請(qǐng)參考發(fā)起音視頻的方法,第三個(gè)參數(shù)為是否錄制、第四個(gè)參數(shù)為是否合并,參數(shù)可以為空
群組功能

群組代碼目錄:src/components/group
SDK 調(diào)用方法目錄: src/store/group

  • createGroup 創(chuàng)建群組
onCreateGroup: function (context, payload) {const { groupname, desc, members, pub, approval } = payloadlet options = {data: {groupname: groupname, // 群組名desc: desc, // 群組描述members: members, // 用戶名組成的數(shù)組public: pub, // pub等于true時(shí),創(chuàng)建為公開(kāi)群approval: approval, // approval為true,加群需審批,為false時(shí)加群無(wú)需審批},success: function (resp) {//創(chuàng)建群組成功},error: function () { //創(chuàng)建群組失敗}};WebIM.conn.createGroupNew(options); },
  • addGroupUser 加入群組
onJoinGroup: function (context, payload) {let options = {groupId: payload.select_groupid, // 群組IDsuccess: function (resp) {//加入成功,開(kāi)發(fā)者自己處理},error: function (e) {//加入失敗,開(kāi)發(fā)者自己處理};WebIM.conn.joinGroup(options); },
  • groupBlack 群組黑名單
onGetGroupBlack: function (context, payload) {let select_id = payload.groupid || payload.select_idlet option = {groupId: select_id,success: function (list) {//獲取成功},error: function () {}};WebIM.conn.getGroupBlacklistNew(option); },
  • groupInfo 群組詳情
onGetGroupinfo: function (context, payload) {let gid = payload.select_id || payload.select_groupid;let options = {groupId: gid, //群組idsuccess: function (resp) {//獲取成功},error: function () { //獲取失敗}};WebIM.conn.getGroupInfo(options) },
  • groupInvite 邀請(qǐng)好友進(jìn)群
onInviteGroup: function (context, payload) {const { select_id, select_name } = payloadlet option = {users: [select_name],groupId: select_id};WebIM.conn.inviteToGroup(option); },
  • groupRequest 收到群組申請(qǐng)
# 收到進(jìn)群申請(qǐng) 同意 onAgreeJoinGroup: function (context, payload) {const { joinName, joinGroupId } = payloadlet options = {applicant: joinName, // 申請(qǐng)加群的用戶名groupId: joinGroupId, // 群組IDsuccess: function (resp) {},error: function (e) { }};WebIM.conn.agreeJoinGroup(options); }, # 收到進(jìn)群申請(qǐng) 拒絕 onRejectJoinGroup: function (context, payload) {const { joinName, joinGroupId } = payloadlet options = {applicant: joinName, // 申請(qǐng)加群的用戶名groupId: joinGroupId, // 群組IDsuccess: function (resp) {},error: function (e) { }};WebIM.conn.rejectJoinGroup(options); },
  • groupSetting 群組設(shè)置
    請(qǐng)參考 src/store/group
消息存儲(chǔ)

代碼目錄:store > chat > msgList
SDK 調(diào)用方法目錄:src/store/chat
如您已經(jīng)開(kāi)通 SDK 增值服務(wù) 消息漫游

  • 關(guān)于持久化:這個(gè)demo采用的 SDK 的增值服務(wù) 消息漫游,拉取歷史消息展示
# 拉取歷史消息 getHistoryMessage: function(context, payload){const options = {queue: payload.name,isGroup: payload.isGroup,count: 10, // 每次獲取消息條數(shù)success: function(msgs){ },fail: function(){ }};WebIM.conn.fetchHistoryMessages(options); },

若您未開(kāi)通上述功能

  • 可以采用 indexdb 做本地存儲(chǔ)
  • 使用 增值功能 消息實(shí)時(shí)回調(diào),將消息實(shí)時(shí)同步到開(kāi)發(fā)者的服務(wù)器
  • 使用 免費(fèi)功能 Rest 拉取歷史消息,消息拉取有延遲,消息實(shí)時(shí)性要求不高的開(kāi)發(fā)者使用此功能
消息撤回

代碼目錄:src/store/chat

recallMessage: function(context, payload){const { chatType, mid } = payload.message;const to = payload.to;const me = this;const chatTypeObj = {contact: "chat",group: "groupchat",chatroom: "chatroom"};const option = {mid,to,type: chatTypeObj[chatType],success: function(){console.log("消息已撤回")payload.message.status = "recall";payload.message.msg = "消息已撤回";Vue.$store.commit("updateMessageStatus", payload.message);},fail: function(){// me.$message('消息撤回失敗');},};WebIM.conn.recallMessage(option); }

SDK 集成方式說(shuō)明

NPM 集成

IM SDK, 音視頻 SDK 支持NPM 安裝,其中單人音視頻SDK 依賴 IM SDK

# 安裝 IM SDK npm install easemob-websdk# 安裝單人音視頻 npm install easemob-webrtc# 安裝多人音視頻 SDK npm install easemob-emedia

項(xiàng)目引入SDK

  • 注:npm 安裝的只有 SDK,還需要本地引入WebIMConfgi.js 文件
import websdk from "easemob-websdk"; import emedia from "easemob-emedia"; import webrtc from "easemob-webrtc";

可直接參考 Demo目錄 src/utils/WebIM.js

引入本地文件 集成
  • 需要下載 React Demo,Vue Demo 沒(méi)有將以下文件本地化
  • 本地文件集成,需要在初始化和消息發(fā)送時(shí)加上 default
# 創(chuàng)建鏈接conn = WebIM.conn = new WebIM.default.connection({})# 消息WebIM.message = WebIM.default.message

1.下載Demo 后,將 SDK 目錄下的 webimSDK.js、EMedia_x1v1.js、EMedia_sdk-dev.js 拷貝到項(xiàng)目目錄下
2.再找到 WebIMConfig.js 文件拷貝到和上述文件的同級(jí)目錄下
3.引入文件

<script type='text/javascript' src='./WebIMConfig.js'></script> <script type='text/javascript' src='./webimSDK.js'></script> <script type='text/javascript' src='./EMedia_x1v1.js'></script> <script type='text/javascript' src='./EMedia_sdk-dev.js'></script>

或 使用import引入本地目錄文件

import config from "./WebIMConfig.js" import websdk from "./webimSDK.js"; import emedia from "EMedia_x1v1.js"; import webrtc from "EMedia_sdk-dev.js";

文件引入后,注冊(cè)監(jiān)聽(tīng),就可以進(jìn)行登陸,收發(fā)消息,音視頻等操作

常見(jiàn)錯(cuò)誤

  • 發(fā)送消息提示:禁止通訊,inter-app communication is not allowed
    需要在初始化SDK 候加上 appKey: WebIM.config.appkey;
  • 訪問(wèn)SDK,xmpp鏈接顯示多個(gè)域名或ip
    需要在地址前加上//或使用 isHttpsDNS:true (在WebIMConfig.js中設(shè)置)
  • npm 安裝集成出現(xiàn)提示
    在 webpack.base.conf.js如圖添加配置unknownContextCritical: false,exprContextCritical: false

總結(jié)

以上是生活随笔為你收集整理的WebIM Vue Demo 使用文档的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。