微信小程序使用騰訊雲IM(一):登陸

微信小程序使用騰訊雲IM

新項目已經完成好久啦,久的我都想放棄啦。
這個項目裏主要的難點實際上是1v1聊天。他們對比了好幾家的即時通信,最後選擇了騰訊雲通訊。我猜,多是由於騰訊雲上說日活低於10w能夠不付費吧。省錢嘛~踩坑踩了大概一週多兩週了,就把一些步驟寫下來,萬一之後也會用到呢。不過,騰訊雲的demo和sdk真的是萬年不更新了,真的是好難用啊....坑都是本身一個一個踩一個一個填的。javascript

1.下載sdk而且引用至項目

官網中找到本身所須要的sdk而且下載,而後放在本身的項目中,引用進去。java

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

在將sdk文件引用到項目中後,就能夠開始使用了,首先是登錄。登錄分爲獨立模式和託管模式,託管模式還須要引用額外的文件。不過,因爲咱們的項目只用到了獨立模式,因此我也只有從獨立模式寫起。web

2.登錄

登錄須要用到的方法是 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)
        })
相關文章
相關標籤/搜索