在钉钉中添加企业微应用,需要用到录音功能,于是用到钉钉的JSAPI组件来调起手机的基础录音能力,下面是钉钉调起录音功能的api:
首先外层包了一层dd.ready,内层调用了stopRecord这个api,内部定义了一个onSuccess作为回调函数,用来处理录音成功的结果。在录音成功的回调函数中,我们调用了一个http请求,通过回调的mediaId来请求刚才发送的音频,之后调起发送语音的IM接口来发送语音。
在联调和测试环境功能都可以正常使用,但是上到线上以后,安卓设备可以正常录音,IOS设备却不能成功录音。
一开始我们怀疑是jsapi没有成功回调的问题,有些IOS设备的问题在测试环境没有暴露出来。但是由于是线上环境,vconsole和alert都不能使用,而用PC端在访问钉钉网页的时候,录音功能本来就无法使用。中间着实考虑了好久用什么办法来定位问题。
最后我们通过在回调函数中发送打日志的请求,往服务器发送。在服务器中看打印的日志发现,线上环境,jsapi的最后的回调是能够调用成功的。继续往下跟踪时发现,在手机端发送http请求没有发送成功,于是怀疑是IOS的webview校验机制和安卓不同,IOS的webview在https环境,不能发送http的请求,把请求都换成https,问题就解决了。
如果界定前后端问题的首要渠道是看接口数据,那么在JavaScript语言当中,界定前端代码内部问题的首要渠道就是回调函数是否回调成功。
因为JavaScript是单线程的,所以我们会在JavaScript中使用很多回调,如果怀疑回调是否成功,那么我们第一反应是在进入回调函数时打印些信息。
但是如果是在线上环境就可以在回调函数中打印日志,如果没有服务端的日志服务,我们甚至可以先在手机端抓包来观察。
如果您觉得对你有所帮助,请点击广告或赏赞。大洋洋会把所有经费用来买书,为您呈现更加丰富的内容~