新項目已經完成好久啦,久的我都想放棄啦。
這個項目裏主要的難點實際上是1v1聊天。他們對比了好幾家的即時通信,最後選擇了騰訊雲通訊。我猜,多是由於騰訊雲上說日活低於10w能夠不付費吧。省錢嘛~踩坑踩了大概一週多兩週了,就把一些步驟寫下來,萬一之後也會用到呢。不過,騰訊雲的demo和sdk真的是萬年不更新了,真的是好難用啊....坑都是本身一個一個踩一個一個填的。javascript
在官網中找到本身所須要的sdk而且下載,而後放在本身的項目中,引用進去。java
var webim = require('../../utils/webim.js');
在將sdk文件引用到項目中後,就能夠開始使用了,首先是登錄。登錄分爲獨立模式和託管模式,託管模式還須要引用額外的文件。不過,因爲咱們的項目只用到了獨立模式,因此我也只有從獨立模式寫起。web
登錄須要用到的方法是 webim.loginjson
webim.login(loginInfo,listener,options,cbOk,cbErr);//第一個是登錄信息,第二個是事件回調,第三個其餘對象,後面兩個就是成功回調和錯誤回調 //用戶信息對象 var loginInfo = { 'sdkAppID':xxxxxxx,//用戶標識接入SDK的應用ID,必填。(這個能夠在騰訊雲的後臺管理看到) 'appIDAt3rd':xxxxxxx,//App 用戶使用 OAuth 受權體系分配的 Appid,必填 (這個其實和上面那個是同樣的) 'identifier':yang47,//用戶賬號,必填 (這個就是本身服務器裏,每一個用戶的帳號,能夠本身設置) 'identifierNick':"楊小花",//用戶暱稱,選填 (這個填不填都沒什麼問題,可是我我的以爲,聊天嘛,仍是得有一個網名) 'accountType':12345,//帳號類型,必填 (這個能夠在後臺管理看到,可是騰訊的文檔上是沒有這個的!!!可是這個必須填,不填不報錯) 'userSig':xxxxxxx //鑑權 Token,identifier 不爲空時,必填 我以爲這個也是必填的,這個須要在一開始就獲取。 } //事件回調對象 監聽事件 var listeners = { "onConnNotify": onConnNotify//監聽鏈接狀態回調變化事件,必填 ,"jsonpCallback": jsonpCallback//IE9(含)如下瀏覽器用到的 jsonp 回調函數, ,"onMsgNotify": onMsgNotify//監聽新消息(私聊,普通羣(非直播聊天室)消息,全員推送消息)事件,必填 ,"onBigGroupMsgNotify": onBigGroupMsgNotify//監聽新消息(直播聊天室)事件,直播場景下必填 ,"onGroupSystemNotifys": onGroupSystemNotifys//監聽(多終端同步)羣系統消息事件,若是不須要監聽,可不填 ,"onGroupInfoChangeNotify": onGroupInfoChangeNotify//監聽羣資料變化事件,選填 ,"onFriendSystemNotifys": onFriendSystemNotifys//監聽好友系統通知事件,選填 ,"onProfileSystemNotifys": onProfileSystemNotifys//監聽資料系統(本身或好友)通知事件,選填 ,"onKickedEventCall" : onKickedEventCall//被其餘登陸實例踢下線 ,"onC2cEventNotifys": onC2cEventNotifys//監聽 C2C 系統消息通道 }; //1v1單聊的話,通常只須要 'onConnNotify' 和 'onMsgNotify'就好了。 //監聽鏈接狀態回調變化事件 var onConnNotify = function (resp) { var info; switch (resp.ErrorCode) {//連接狀態碼 case webim.CONNECTION_STATUS.ON: webim.Log.warn('創建鏈接成功: ' + resp.ErrorInfo); break; case webim.CONNECTION_STATUS.OFF: info = '鏈接已斷開,沒法收到新消息,請檢查下您的網絡是否正常: ' + resp.ErrorInfo; alert(info); webim.Log.warn(info); break; case webim.CONNECTION_STATUS.RECONNECT: info = '鏈接狀態恢復正常: ' + resp.ErrorInfo; alert(info); webim.Log.warn(info); break; default: webim.Log.error('未知鏈接狀態: =' + resp.ErrorInfo); //錯誤信息 break; } }; //監聽新消息事件 注:其中參數 newMsgList 爲 webim.Msg 數組,即 [webim.Msg]。 //newMsgList 爲新消息數組,結構爲[Msg] function onMsgNotify(newMsgList) { //console.warn(newMsgList); var sess, newMsg; //獲取全部聊天會話 var sessMap = webim.MsgStore.sessMap(); for (var j in newMsgList) {//遍歷新消息 newMsg = newMsgList[j]; if (newMsg.getSession().id() == selToID) {//爲當前聊天對象的消息 selSess = newMsg.getSession(); //在聊天窗體中新增一條消息 //console.warn(newMsg); addMsg(newMsg); } } //消息已讀上報,以及設置會話自動已讀標記 webim.setAutoRead(selSess, true, true); for (var i in sessMap) { sess = sessMap[i]; if (selToID != sess.id()) {//更新其餘聊天對象的未讀消息數 updateSessDiv(sess.type(), sess.id(), sess.unread()); } } } // webim.login(loginInfo, listeners, options, function (resp) { loginInfo.identifierNick = resp.identifierNick; //設置當前用戶暱稱 console.log("登陸成功"); that.setData({ loginInfo: loginInfo, }); }, function (err) { console.log("登陸失敗------------------", err.ErrorInfo) })