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

小程序集成環信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號
亚洲精品成人区在线观看| 国产精品亚洲一区二区麻豆| 国产精品亚韩精品无码a在线| 伊人精品视频在线| 亚洲精品V欧洲精品V日韩精品| 青春草国产成人精品久久| 久久久久久久91精品免费观看| 精品无码AV无码免费专区| 久久精品免视看国产成人| 国产人妖乱国产精品人妖| 中文字幕精品无码一区二区 | 久久久精品国产Sm最大网站| 日本加勒比久久精品| 日韩欧群交P片内射中文| 国产精品第一页第一页| 香蕉久久夜色精品国产| 99久久精品国产第一页 | 国产精品麻豆入口| 香港aa三级久久三级老师2021国产三级精品三级在 | 亚洲精品无码永久在线观看你懂的| 国产精品偷窥熟女精品视频| 这里只有精品视频在线| 日本国产精品久久| 一区二区日韩国产精品| 亚洲精品无码永久在线观看| 国产精品 码ls字幕影视| 亚洲精品一级无码中文字幕| 伊人 久久 精品| 国产精品成人观看视频| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 99ee6热久久免费精品6| 97精品在线视频| 51精品视频免费国产专区| 精品一区高潮喷吹在线播放| 精品一区精品二区制服| 99在线精品一区二区三区| 3D动漫精品啪啪一区二区下载| 在线播放偷拍一区精品| 岛国精品在线观看| 四虎国产精品永久在线网址| 2015日韩永久免费视频播放|