Bug 汇总之微信开发

以前总是懒得总结,以至于在过去的几年里,解决了多少bug 都不知道,收获了什么也 说不清楚。以至于在面试的时候,当面试官问起,你在过去的项目中,遇到的最困难的问题,是什么,怎么解决的,都没有很好的表述方式。所以,总结很重要,记录总结也很重要。

下面的这些都是项目中遇到的,暂时想起这么多,然后bug会在以后遇到的时候持续补充~

微信sdk 录音开发的bug

有些用户点击录音,录音没有反应

微信开发一定要在执行wx.ready(),后再调用其他方法。 虽然文档说,用户触发事件不需要写在 ready()函数里,但是有些用户手机还是有问题的,所以必需要写在 ready()函数里。

invalid signature签名错误

微信sdk开发官网列出了一些常见的错误 见 微JS-SDK说明文档 中的 附录5-常见错误及解决方法

微信分享的时候,再次分享会有一些问题,比如,图片不见了或者描述不对,附录5第6条说到,因为页面一旦分享,微信客户端会在你的链接末尾加入其它参数,如果不是动态获取当前链接,将导致分享后的页面签名失败。

所以,确保你获取用来签名的url是动态获取的,动态页面可参见实例代码中php的实现方式。如果是html的静态页面在前端通过ajax将url传到后台签名,前端需要用js获取当前页面除去’#’hash部分的链接(可用location.href.split('#')[0]获取,而且需要 encodeURIComponent

传入URL的参数,都需要 encodeURIComponent编码,获取的时候 decodeURIComponent 解码处理,不然很容易出bug。

使用开始录音接口时,弹出“要使用你的录音功能,是否允许”

第一次用微信调用时,总是出现这个提示框,只要点击确定,原有的 animate就出现了问题。

解决方案是,在进入需要点击录音的页面,就开始调用微信录音接口,允许录音。如果微信弹出对话框, 用户可以在这个时候点选是/否, 而不至于影响真正录音时的体验。

具体原因:使用微信jssdk接口录音,在同一个域只需要授权一次,即第一次使用录音的时候,微信自己会弹出对话框询问是否允许录音,用户点击允许后,之后再使用录音时,便不会再咨询用户是否允许。 在第一次按住录音后,由于用户未曾允许录音,微信会提示用户授权允许在本页面使用微信录音功能,这时用户会放开录音按钮转而去点击允许,在用户允许后,才真正会开始录音,而此时用户早已放开录音按钮,那么录音按钮上便不会再有touchend事件,录音便会一直进行。

解决策略:使用localStorage记录用户是否曾授权,并以此来判断是否需要在刚进入页面是自动录一段录音来触发用户授权

if(!localStorage.rainAllowRecord || localStorage.rainAllowRecord !== 'true'){
    wx.startRecord({
        success: function(){
            localStorage.rainAllowRecord = 'true';
            wx.stopRecord();
        },
        cancel: function () {
            alert('用户拒绝授权录音');
        }
    });
}

点击录音时,ios录音延时。

点击录音的时候,发现ios下,微信‘正在录音…’提示,总是延时那么0.6s 左右才出现,导致 写的 animate 录音动画不能同步,安卓瞬间就开始录音。

一开始以为是微信调用接口请求延时问题,后来发现跟这个没关系,接口都是瞬间执行,所以觉得是 ios 系统,调起录音功能延时。

解决方案: js判断手机系统,是ios就等待 0.6s后,执行 animate 录音动画。

在ios设备上,使用微信录音功能后,再播放audio标签的音频,音量极低。

点击录好的音频,第一次音量特别小,然后再点击,一次比一次音量大。一时间真不知道从何下手,真是日了狗了了。之前也有人问过这个问题,已经向微信相关技术人员反应了这个bug。

微信开发,ios播放音频的时候报错 The element has no supported sources

音频资源是 获取后台的。在手机端安卓没有问题。

ios 不能正常播放,我是用vue写的,第一次进入的组件时候,可以播放,返回上一个组件,再次进入当前组件 播放就不可以了。 困扰好久了…头疼。哪位大神知道。

看文档说音频状态为4时,可以播放。测试了下音频 audio的 readyState,安卓和浏览器的都是 4,微信开发者平台是0,ios是0,ios延时5s打印 就是 1,很奇怪…

真是煞费苦心。试了无数次,然后 发呆了好久 偶然间换了思路,就解决了。果然遇到暂时不可解决的bug,不能太钻牛角尖,需要放松~

解决方法:之前是直接用audio标签,通过改变 src 更改音频的播放资源。所以,ios下有问题,但是 每次播放的时候,js里先创建一个audio对象就可以了。

let audio = new Audio();
audio.src = "XXX.mp3";
audio.play();

PS:需要引入微信sdk, wx.ready 后执行播放。

app h5微信支付, hit push hold!!

原因是你分享的微信账号在其他手机登陆了,但是本机还没有退出登陆,导致没有权限分享。重新进入微信并登陆就好了。

打赏一个呗

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦