亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

小程序集成環(huán)信IM

cod7ce / 1197人閱讀

摘要:最近在做一款有語音直播功能的小程序,用到了環(huán)信集成功能,由于我搜了下目前用環(huán)信做小程序的的確是少之又少,而且環(huán)信官方說從月份不再更新代碼具體原因我也沒問,可能本身微信就是一款聊天工具所以用處不大我們產(chǎn)品需要用到聊天室功能,之前做端登錄完成之

最近在做一款有語音直播功能的小程序,用到了環(huán)信IM集成功能,由于我搜了下目前用環(huán)信做小程序的的確是少之又少,而且環(huán)信官方說從2月份不再更新代碼(具體原因我也沒問,可能本身微信就是一款聊天工具所以用處不大)

我們產(chǎn)品需要用到聊天室功能,之前做H5端登錄完成之后加入聊天室即可:

 WebIM.conn.open(options);
 WebIM.conn.joinChatRoom(option1);

同樣方法在小程序上不行,一直報(bào)錯(cuò):

Cannot read property "sendIQ" of undefined

百度了一下,說加入聊天室要放在登錄成功后的回調(diào)里,于是查看它的源碼connection.js發(fā)現(xiàn):

connection.prototype.open = function (options) {


    var pass = _validCheck(options, this);

    if (!pass) {
        return;
    }
    var conn = this;

    if (conn.isOpening() || conn.isOpened()) {
        return;
    }

    if (options.accessToken) {
        options.access_token = options.accessToken;
        _login(options, conn);
    } else {
       //登錄成功的回調(diào)函數(shù)
        var suc = function (data, xhr, myName) {
            conn.context.status = _code.STATUS_DOLOGIN_IM;
            conn.context.restTokenData = data;
            if (data.statusCode != "404" && data.statusCode != "400") {
                wx.showToast({
                    title: "登錄成功",
                    icon: "none",
                    duration: 4000
                });
            }
            //回調(diào)成功后執(zhí)行這個(gè)方法
            _login(data.data, conn);
           
        };
        
        var options = {
            url: apiUrl + "/" + orgName + "/" + appName + "/token",
            data: loginfo,
             success: suc || _utils.emptyfn,
            error: error || _utils.emptyfn
        };
        _utils.ajax(options);
    }

登錄成功有一個(gè)內(nèi)部回調(diào),回調(diào)里面調(diào)用了一個(gè) _login(data.data, conn)的方法:

//具體里面執(zhí)行什么去源代碼查看,我就不貼代碼了
var _login = function (options, conn) {
    
    var callback = function (status, msg) {
      _loginCallback(status, msg, conn);
    };


};

執(zhí)行完login方法有一個(gè)_loginCallback回調(diào):

var _loginCallback = function (status, msg, conn) {
    var conflict, error;
    //console.log("_loginCallback 1", Strophe.Status, status, msg)
    if (msg === "conflict") {
        conflict = true;
    }
    console.log(status)
    if (status == Strophe.Status.CONNFAIL) {
     
    } else if (status == Strophe.Status.ATTACHED || status == Strophe.Status.CONNECTED) {
      //登錄成功
       
    } else if (status == Strophe.Status.DISCONNECTING) {
  
    } else if (status == Strophe.Status.DISCONNECTED) {
      
    } else if (status == Strophe.Status.AUTHFAIL) {
     
    } else if (status == Strophe.Status.ERROR) {

    }
    conn.context.status_now = status;
};

通過斷點(diǎn)發(fā)現(xiàn)當(dāng)執(zhí)行到 else if (status == Strophe.Status.ATTACHED || status == Strophe.Status.CONNECTED)時(shí),登錄成功.所以需要把加入聊天室的回調(diào)需要放在這個(gè)判斷里面,我的具體做法如下:

//項(xiàng)目中封裝一個(gè)加入聊天室函數(shù)
 joinRoom: function () {
    var option1 = {};
    var option2 = {};
    //加入聊天室
    WebIM.conn.joinChatRoom(option1);
    WebIM.conn.joinChatRoom(option2);
  };
   //在環(huán)信登錄函數(shù)中添加一個(gè)自己的回調(diào):
    var options = {
      apiUrl: WebIM.config.apiURL,
      user: userId + "",
      pwd: userId + "",
      grant_type: "password",
      appKey: WebIM.config.appkey,
      //自己添加的回調(diào)函數(shù)
      callBack:function(){
      //調(diào)用加入聊天室
        that.joinRoom();
      }
    };
    WebIM.conn.open(options);
    

修改環(huán)信connection.js代碼:

//登錄代碼
connection.prototype.open = function (options) {

        var suc = function (data, xhr, myName) {
            //callBack傳入加入聊天室回調(diào)
            _login(data.data, conn, options.callBack);
        };
        var options = {
            url: apiUrl + "/" + orgName + "/" + appName + "/token",
            data: loginfo,
             success: suc || _utils.emptyfn,
             //添加加入聊天室的回調(diào)函數(shù)
             callBack: options.callBack,
            error: error || _utils.emptyfn
        };
    }
};
//_login代碼
var _login = function (options, conn, callBack) {
     
    var callback = function (status, msg) {
    //把加入聊天室函數(shù)傳給_login回調(diào)函數(shù)
      _loginCallback(status, msg, conn, callBack);
    };
};
//_loginCallback代碼
var _loginCallback = function (status, msg, conn,callBack) {
    var conflict, error;
    //console.log("_loginCallback 1", Strophe.Status, status, msg)
    if (msg === "conflict") {
        conflict = true;
    }
    console.log(status)
    if (status == Strophe.Status.CONNFAIL) {
     
    } else if (status == Strophe.Status.ATTACHED || status == Strophe.Status.CONNECTED) {
      //登錄成功執(zhí)行加入聊天室
       callBack();
    } else if (status == Strophe.Status.DISCONNECTING) {
  
    } else if (status == Strophe.Status.DISCONNECTED) {
      
    } else if (status == Strophe.Status.AUTHFAIL) {
     
    } else if (status == Strophe.Status.ERROR) {

    }
    conn.context.status_now = status;
};

具體思路就是這樣,由于環(huán)信小程序代碼有很多坑,所以遇到問題多看看源碼,有些功能就需要自己去修改代碼,這是環(huán)信工單回答我的問題:

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/94404.html

相關(guān)文章

  • 分享一個(gè) React-Native項(xiàng)目(集成環(huán)信聊天)

    摘要:基本就是一邊看文檔一邊做,不懂的,所以這個(gè)項(xiàng)目可能有些地方寫的不好,有時(shí)間想到了改進(jìn)下項(xiàng)目,但是期間學(xué)習(xí)到了很多知識(shí)。 cnodejs客戶端 項(xiàng)目地址 https://github.com/linwh1115/... 首頁和詳情頁UI參考 https://github.com/shinygang/... API由 https://cnodejs.org/api 提供 在官方提供的AP...

    Leck1e 評(píng)論0 收藏0
  • 圓桌論壇實(shí)錄 | 從容器生態(tài)圈解析容器之熱現(xiàn)象

    摘要:容器跟虛擬化是解決不同問題的,從這一點(diǎn)來看與有相似之處,我認(rèn)為虛擬化解決的一個(gè)重大問題是隔離和安全的問題,而容器則解決的是快速交付的問題。同時(shí)也可以應(yīng)用一些虛擬化比較成熟的技術(shù),包括容器的容器的熱遷移,現(xiàn)在也都具備一些初步的方案。 5月26日,數(shù)人云產(chǎn)品戰(zhàn)略發(fā)布會(huì)在北京萬達(dá)索菲特酒店舉行,發(fā)布會(huì)最后一個(gè)環(huán)節(jié)圓桌論壇可謂大咖云集,小數(shù)為大家在第一時(shí)間帶來了實(shí)錄分享,快來感受下容器生態(tài)圈的...

    happen 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<