Kürzlich erstelle ich ein kleines Programm mit Sprach-Live-Übertragungsfunktion und verwende die Huanxin-IM-Integrationsfunktion. Da ich gesucht habe, gibt es tatsächlich nur sehr wenige Leute, die Huanxin verwenden, um kleine Programme zu erstellen. Es gibt nur wenige, und Huanxin hat offiziell erklärt, dass der Code ab Februar nicht mehr aktualisiert wird (ich habe nicht nach dem genauen Grund gefragt, vielleicht ist WeChat selbst ein Chat-Tool und daher nicht sehr nützlich)
Unser Produkt muss Verwenden Sie die Chatroom-Funktion, und wir haben es früher mit H5 gemacht. Nachdem die Client-Anmeldung abgeschlossen ist, können Sie dem Chatroom beitreten:
WebIM.conn.open(options); WebIM.conn.joinChatRoom(option1);
Die gleiche Methode funktioniert nicht mit dem Miniprogramm und es meldet ständig einen Fehler:
Cannot read property 'sendIQ' of undefined
Baidu suchte und sagte, dass der Beitritt zum Chatroom nach erfolgreicher Anmeldung in den Rückruf eingefügt werden sollte, also habe ich den Quellcode von Connection.js überprüft und Folgendes gefunden:
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); }
Es gibt einen internen Rückruf für eine erfolgreiche Anmeldung und ein _login(data.data, conn)-Methode wird im Rückruf aufgerufen:
//具体里面执行什么去源代码查看,我就不贴代码了 var _login = function (options, conn) { var callback = function (status, msg) { _loginCallback(status, msg, conn); }; };
Nach dem Ausführen der Login-Methode gibt es einen _loginCallback-Rückruf:
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; };
Durch Unterbrechen habe ich festgestellt, dass, wenn die Ausführung else if (status == Strophe.Status.ATTACHED || status == Strophe.Status.CONNECTED), die Anmeldung ist erfolgreich. Daher muss der Rückruf zum Beitritt zum Chatroom in diesem Urteil platziert werden. Die spezifische Methode lautet wie folgt:
//项目中封装一个加入聊天室函数 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);
Ändern Sie die Huanxin-Verbindung.js Code:
rrreeDa der Huanxin-Applet-Code viele Fallstricke aufweist, schauen Sie sich den Quellcode genauer an. Dies ist der Huanxin-Arbeitsauftrag Beantworte meine Frage: