>[danger]把環信SDK集成到vueCli中
----
1. [登錄環信即時通信云]([https://www.easemob.com/](https://www.easemob.com/)), 注冊一個應用, 得到key值

2. vue項目中, 安裝以下模塊
`$ npm install --save easemob-websdk crypto-js underscore`
3. 在node_modules中配置代碼
(1) easemob-websdk/src/connection.js



~~~
var meStrophe = require("../../strophe.js");
var Strophe = require("../../strophe.js").Strophe;
~~~
~~~
var config = {
xmppURL: 'im-api.easemob.com',
apiURL: (location.protocol === 'https:' ? 'https:' : 'http:') + '//a1.easemob.com',
appkey: '1135181219098181#shuangshenghuoyan',
https: false,
isMultiLoginSessions: true,
isAutoLogin: true,
isWindowSDK: false,
isSandBox: false,
isDebug: false,
autoReconnectNumMax: 2,
autoReconnectInterval: 2,
isWebRTC: (/Firefox/.test(navigator.userAgent) || /WebKit/.test(navigator.userAgent)) && /^https\:$/.test(window.location.protocol),
heartBeatWait: 4500,
isHttpDNS: false,
msgStatus: true,
delivery: true,
read: true,
saveLocal: false,
encrypt: {
type: 'none'
}
}
~~~
~~~
WebIM.config = config;
~~~
(2) strophe.js/dist/strophe.js

~~~
setJid: function (jid) {
this.jid = jid;
this.authzid = Strophe.getBareJidFromJid(this.jid);
this.authcid = Strophe.getNodeFromJid(this.jid);
},
getJid: function () {
return this.jid;
},
~~~
4. main.js中配置環信
~~~
/*****配置環信******/
// 1. 安裝并引入環信SDK
import websdk from 'easemob-websdk'
let WebIM = window.WebIM = websdk;
Vue.prototype.WebIM = WebIM;
// 2. 創建連接
const conn = new WebIM.connection({
isMultiLoginSessions: WebIM.config.isMultiLoginSessions,
https: typeof WebIM.config.https === 'boolean' ? WebIM.config.https : location.protocol === 'https:',
url: WebIM.config.xmppURL,
heartBeatWait: WebIM.config.heartBeatWait,
autoReconnectNumMax: WebIM.config.autoReconnectNumMax,
autoReconnectInterval: WebIM.config.autoReconnectInterval,
apiUrl: WebIM.config.apiURL,
isAutoLogin: true
});
// 3. 把鏈接對象擴展給Vue實例屬性(以后可以用this.myCon代表環信鏈接對象)
Vue.prototype.myCon = conn;
/*******配置環信結束***********/
~~~
5. store/index.js 設置業務代碼
~~~
export default new Vuex.Store({
state: {
// 保存聊天數據
chatData: [
{
'type': "text",
"own": true,
"content": "晚上吃飯了嘛?"
},
{
'type': "text",
"own": false,
"content": "還沒吃呢, 你準備請我吃點什么?"
},
{
'type': "text",
"own": true,
"content": "吃飯之前, 先念詩吧"
},
{
'type': "text",
"own": false,
"content": "\n" +
"人生若只如初見,何事秋風悲畫扇。\n" +
"等閑變卻故人心,卻道故人心易變。\n" +
"驪山語罷清宵半,淚雨零鈴終不怨。\n" +
"何如薄幸錦衣郎,比翼連枝當日愿。"
}
],
},
mutations: {
changeMessage(state, dataObj) {
state.chatData.push(dataObj);
}
},
actions: {
// 4. 注冊發送消息, 監聽事件
listenConnect({commit}, state) {
let conn = state;
conn.listen({
onOpened: function (message) {
// 連接成功回調
// 如果isAutoLogin設置為false,那么必須手動設置上線,否則無法收消息
// 手動上線指的是調用conn.setPresence(); 如果conn初始化時已將isAutoLogin設置為true, 則無需調用conn.setPresence();
},
onClosed: function (message) {
//連接關閉回調
},
onTextMessage: function (message) {
// 收到文本消息
// 注意對象key關鍵字和chat里要解析時用的key保持一致
commit('changeMessage', {
// 消息類型
'type': "text",
// 是否是自己發送的(false代表接收他人消息)
"own": false,
// 具體消息值
"content": message['data']
});
},
onEmojiMessage: function (message) {
//收到表情消息
},
onPictureMessage: function (message) {
//收到圖片消息
},
onCmdMessage: function (message) {
//收到命令消息
},
onAudioMessage: function (message) {
//收到音頻消息
},
onLocationMessage: function (message) {
//收到位置消息
},
onFileMessage: function (message) {
//收到文件消息
},
onVideoMessage: function (message) {
// 收到視頻消息
let node = document.getElementById('privateVideo');
let option = {
url: message.url,
headers: {
'Accept': 'audio/mp4'
},
onFileDownloadComplete: function (response) {
// 文件下載完成
node.src = WebIM.utils.parseDownloadResponse.call(conn, response);
},
onFileDownloadError: function () {
// 文件下載錯誤
console.log('File down load error.')
}
};
WebIM.utils.download.call(conn, option);
},
onPresence: function (message) {
//處理“廣播”或“發布-訂閱”消息,如聯系人訂閱請求、處理群組、聊天室被踢解散等消息
},
onRoster: function (message) {
//處理好友申請
},
onInviteMessage: function (message) {
//處理群組邀請
},
onOnline: function () {
//本機網絡連接成功
},
onOffline: function () {
//本機網絡掉線
},
onError: function (message) {
//失敗回調
},
onBlacklistUpdate: function (list) {
// 黑名單變動
// 查詢黑名單,將好友拉黑,將好友從黑名單移除都會回調這個函數,list則是黑名單現有的所有好友信息
console.log(list);
},
onReceivedMessage: function (message) {
//收到消息送達服務器回執
},
onDeliveredMessage: function (message) {
//收到消息送達客戶端回執
},
onReadMessage: function (message) {
//收到消息已讀回執
},
onCreateGroup: function (message) {
//創建群組成功回執(需調用createGroupNew)
},
onMutedMessage: function (message) {
//如果用戶在A群組被禁言,在A群發消息會走這個回調并且消息不會傳遞給群其它成員
}
// 其他方法見文檔
});
},
// 5. 本地發送消息變更事件
async localMessageChange({commit}, state) {
commit('changeMessage', {
'type': "text",
"own": true,
"content": state
});
}
}
});
~~~
接著看 [環信_聊天組件](%E7%8E%AF%E4%BF%A1_%E8%81%8A%E5%A4%A9%E7%BB%84%E4%BB%B6.md)
- web前端
- CSS問題
- 布局
- 雙飛翼布局_flex方式
- 雙飛翼布局_margin方式
- 圣杯布局_flex方式
- 圣杯布局_margin方式
- 子元素居中問題
- 彈性布局
- 概念_
- 標準模式與混雜模式
- 各種FC
- line-height
- vertical-align
- CSS3新特性
- 效果
- div添加箭頭
- CSS繪制三角形
- JavaScript
- 兼容
- 事件相關
- 原理
- Ajax原理
- 繼承原理
- 原型鏈繼承
- 組合繼承
- 寄生組合繼承
- 數據綁定
- 1單向數據綁定m到c到v
- 2偽雙向數據綁定
- 3雙向數據綁定
- socket.io
- 運行時
- this指向
- 0.1+0.2問題
- 對象/數組-深拷貝&淺拷貝
- 事件循環
- typeof
- instanceof
- 概念
- 閉包
- 回調函數
- Promise
- 原生對象
- Attribute和property區別
- 防抖函數
- 節流函數
- 語言類型
- Vue
- Vue優缺點
- 仿Vue源碼
- 1數據綁定_Observe
- 2數據綁定_訂閱者&觀察者定義
- 3數據綁定_Vue類實現
- 4數據綁定_Vue訪問data更改
- 5DOM編譯_Compile_雙大括號模板講解
- 6DOM編譯_v-model講解
- 7DOM編譯_v-on:事件綁定講解
- 項目總結
- 使用Svg圖標
- vueCli環境_真機測試
- vueCli集成環信SDK
- 父子組件雙向綁定
- React
- React優缺點
- 我的組件庫
- Vue的組件庫
- 環信_聊天組件
- 面試題
- HTML_分類
- CSS_分類
- JavaScript_分類
- VueJS_分類
- ReactJS_分類
- AngularJS_分類
- 瀏覽器端
- 筆試題
- CSS
- 特殊布局
- JavaScript_
- 經典_宏任務_微任務
- 瀏覽器問題
- CORS
- web服務器
- Apache
- 開啟跨域
- Nginx
- 常用命令
- 正向代理
- 反向代理
- 負載均衡
- mac安裝Nginx
- 配置80端口
- 算法
- 冒泡排序
- 選擇排序
- 合并對象_排序
- 楊輝三角
- 紅黑樹
- 計算機基礎
- 網絡相關
- OSI七層模型
- http協議
- http工作原理
- https協議
- GET和POST區別
- hosts文件
- php相關
- session機制
- Linux
- 阿里云服務器
- linux使用Mysql
- 安裝mysql
- 導入.sql文件
- 遠程連接mysql
- linux使用xampp
- 安裝Xampp
- 配置web訪問
- 域名綁定服務器
- linux搭建git服務器_apache下
- 代碼管理
- 什么是git
- 命令行_使用git
- .gitignore文件講解
- 軟件
- VSCode的安裝
- 理財
- 基金
- 攝影