1. 程式人生 > >【小程式】微信小程式使用騰訊雲IM(一):登入

【小程式】微信小程式使用騰訊雲IM(一):登入

微信小程式使用騰訊雲IM

新專案已經寫了很久啦
這個專案裡主要的難點其實是1v1聊天。他們對比了好幾家的即時通訊,最後選擇了騰訊雲通訊。我猜,可能是因為騰訊雲上說日活低於10w可以不付費吧。省錢嘛~踩坑踩了大概一週多兩週了,就把一些步驟寫下來,萬一以後也會用到呢。不過,騰訊雲的demo和sdk真的是萬年不更新了,真的是好難用啊….坑都是自己一個一個踩一個一個填的。

1.下載sdk並且引用至專案

官網中找到自己所需要的sdk並且下載,然後放在自己的專案中,引用進去。

    var webim = require('../../utils/webim.js');

在將sdk檔案引用到專案中後,就可以開始使用了,首先是登陸。登陸分為獨立模式和託管模式,託管模式還需要引用額外的檔案。不過,由於我們的專案只用到了獨立模式,所以我也只有從獨立模式寫起。

2.登陸

登陸需要用到的方法是 webim.login

    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) })