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

        小程序集成環信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號
        主站蜘蛛池模板: 老司机午夜精品视频资源| 国产精品伦一区二区三级视频 | 久久精品国产亚洲av麻豆色欲| 国产L精品国产亚洲区久久| 国产午夜无码精品免费看| 亚洲欧美日韩国产精品| 国产精品xxxx国产喷水亚洲国产精品无码久久一区| 日韩精品区一区二区三VR| 完整观看高清秒播国内外精品资源| 国产三级国产精品国产普男人| 亚洲精品免费在线观看| 狠狠色丁香婷婷综合精品视频| 国产精品天天看天天狠| 精品一区二区三区免费毛片爱| 午夜精品久久久久久久久| 综合人妻久久一区二区精品| 热RE99久久精品国产66热| 久久久久国产精品麻豆AR影院| 国产三级精品三级在线观看| 国产福利电影一区二区三区,亚洲国模精品一区 | 亚洲AV日韩精品久久久久久 | 999久久久无码国产精品| 嫖妓丰满肥熟妇在线精品| 在线观看亚洲精品福利片| 亚洲国产精品碰碰| 亚洲韩精品欧美一区二区三区| 日本精品久久久久久久久免费| 久久九九久精品国产| 精品无码三级在线观看视频| 精品91自产拍在线观看二区| 国产精品福利电影一区二区三区四区欧美白嫩精品 | 国产精品手机在线| 99国产精品无码| 久久91精品国产91久久户| 国产亚洲美女精品久久久久狼| 国产在线拍揄自揄视精品不卡| 久久精品国产亚洲网站| 国产成人精品免费大全| 国产精品无码久久四虎| 久久久这里有精品中文字幕| 亚洲国产一成久久精品国产成人综合 |