站長資訊網
        最全最豐富的資訊網站

        小程序集成環信IM怎么用?(附代碼實例)

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

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

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

        同樣方法在小程序上不行,一直報錯:

        Cannot read property 'sendIQ' of undefined

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

        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 {        //登錄成功的回調函數         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                 });             }             //回調成功后執行這個方法             _login(data.data, conn);                     };                  var options = {             url: apiUrl + '/' + orgName + '/' + appName + '/token',             data: loginfo,              success: suc || _utils.emptyfn,             error: error || _utils.emptyfn         };         _utils.ajax(options);     }

        登錄成功有一個內部回調,回調里面調用了一個 _login(data.data, conn)的方法:

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

        執行完login方法有一個_loginCallback回調:

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

        通過斷點發現當執行到 else if (status == Strophe.Status.ATTACHED || status == Strophe.Status.CONNECTED)時,登錄成功.所以需要把加入聊天室的回調需要放在這個判斷里面,我的具體做法如下:

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

        修改環信connection.js代碼:

        //登錄代碼 connection.prototype.open = function (options) {          var suc = function (data, xhr, myName) {             //callBack傳入加入聊天室回調             _login(data.data, conn, options.callBack);         };         var options = {             url: apiUrl + '/' + orgName + '/' + appName + '/token',             data: loginfo,              success: suc || _utils.emptyfn,              //添加加入聊天室的回調函數              callBack: options.callBack,             error: error || _utils.emptyfn         };     } }; //_login代碼 var _login = function (options, conn, callBack) {           var callback = function (status, msg) {     //把加入聊天室函數傳給_login回調函數       _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) {       //登錄成功執行加入聊天室        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; };

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

        小程序集成環信IM怎么用?(附代碼實例)

        相關學習推薦:小程序開發教程

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 91自慰精品亚洲| 91精品视频在线| 国产区精品一区二区不卡中文| 四虎国产精品永免费| 香蕉国产精品麻豆亚洲欧美日韩精品自拍欧美v国| 人妻少妇精品无码专区二区| 国产成人精品男人的天堂538| 国产a精品视频| 亚洲国产高清精品线久久| 亚洲精品成人片在线播放| 国产精品偷伦视频观看免费| 精品一区二区在线观看| 99精品视频在线观看婷| 久久久无码精品亚洲日韩蜜臀浪潮 | 国产剧情国产精品一区| 合区精品久久久中文字幕一区 | 无码人妻精品一区二区| 国产精品666| 狠狠色伊人久久精品综合网| 一本久久a久久精品vr综合| 国产精品久久午夜夜伦鲁鲁| 亚洲国产精品一区二区第一页免 | 国产韩国精品一区二区三区久久| 精品少妇无码AV无码专区| 亚洲AV永久无码精品成人| 在线精品视频一区二区| 高清免费久久午夜精品| 久久精品人人做人人爽97| 99久久国产热无码精品免费久久久久| 国产精品成熟老女人视频| 日韩国产成人精品视频| 亚洲日韩精品一区二区三区| 亚洲人午夜射精精品日韩| 久久丝袜精品中文字幕| 国产成人精品免费视频动漫| 国产在线精品免费aaa片| 久久精品国产亚洲AV电影| 久久青青草原精品国产| 国产精品国产三级国产AV主播 | 亚洲国产精品一区二区第四页 | 久久亚洲精品无码播放|