怎么用小程序集成环信IM
发表于:2024-10-18 作者:千家信息网编辑
千家信息网最后更新 2024年10月18日,怎么用小程序集成环信IM,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。小程序集成环信IM最近在做一款有语音直播功能的小程序,用到了环
千家信息网最后更新 2024年10月18日怎么用小程序集成环信IM
怎么用小程序集成环信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问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。
聊天室
登录
成功
代码
程序
函数
方法
功能
问题
就是
更多
源码
帮助
解答
不行
易行
简单易行
不大
产品
做法
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
密钥能直连数据库吗
软件开发最重要的3点
风场网络安全违规心得
林业一张图数据库标准
如何变管理为服务器
网络技术服务部微信扣钱
软件开发项目如何缴税
数据库中获取数据的函数
工业图像用什么软件开发
螃蟹游戏为什么服务器进不去
中国网络安全保险契机
流媒体服务器 架构
超赢收银系统数据库清空
金融互联网科技龙头企业
10台服务器并发量
数据库外键约束怎么做
DNA甲基化表达差异数据库
不可缺少的即时通讯软件开发
网络技术还是信息安全
数据库怎么调整布局
安腾服务器安全性
qq软件开发的费用预估
阿里服务器基地
煤矿网络安全规定
服务器主板2020
循环修改数据库表结构
服务器大小的基本单位是
sd数据库如何用
软件开发的形式化方法优缺点
博彦科技是互联网股吗