微信H5中JSSDK 录音识别注意事项记录

微信H5中JSSDK 录音识别注意事项记录

问题一:长按按钮录制时,IOS 会触发文本复制功能

解决方案:在按钮的css上添加样式:user-select: none;

问题二:首次进入H5页面后调用wx.startRecord时会触发微信授权,可能会导致一直停留在录制界面

解决方案:建议在切换录音识别的按钮上触发一次wx.startRecord,并且立马调用wx.stopRecord
当然不需要每次都触发,主要当前用户未授权则需要触发,可以弄一个标记。
例如:

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

问题三:IOS有时候touchend事件不触发。

解决方案:将@touchcancel事件也加入进去。

- @touchStart="touchStart"
- @touchend="touchEnd"
- @touchcancel="touchEnd"

问题四:IOS 长按触发开始录制的瞬间松开触摸,可能导致touchend优先于wx.startRecord执行

原因:wx.startRecord函数是放到touchStart方法中执行的,wx.startRecord执行比较耗时,这时候触摸松开touchend可能就已经在执行了,会导致本次录音失败。
解决方案:在touchend方法执行第一行记录一个时间戳:touchEndTime=new Date().getTime();
当执行wx.startRecord成功后判断:new Date().getTime() - touchEndTime <600,如果为True则执行wx.stopRecord
参考代码:

let touchEndTime = null;
// 触摸结束方法
function touchEnd (){
	touchEndTime=new Date().getTime();
	 ...... 
}
wx.startRecord({
    success: function(){
    	let now = new Date().getTime();
    	if(touchEndTime && now - this.touchEndTime <600){
    		wx.stopRecord()
    		alert('录音时间过短。');
    	}
    },
    cancel: function () {
    	alert('用户拒绝授权录音');
    }
});
// 

### 微信公众号 JSSDK 开发教程 #### 获取 Access Token 为了使用微信JSSDK,在服务器端需要先获取`access_token`。这是调用微信接口的全局唯一票据,有效时间为7200秒。开发者需自行负责在服务端维护此令牌并实现缓存机制以提高效率[^3]。 ```java // Java示例代码用于获取 access_token String accessTokenUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET"; URL url = new URL(accessTokenUrl); HttpURLConnection connection = (HttpURLConnection)url.openConnection(); connection.setRequestMethod("GET"); BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); StringBuilder response = new StringBuilder(); String line; while ((line = reader.readLine()) != null){ response.append(line); } reader.close(); JSONObject jsonResponse = new JSONObject(response.toString()); String accessToken = jsonResponse.getString("access_token"); ``` #### 配置 JS SDK 接口签名 前端页面加载前,通过后台向微信公众平台发起请求获得配置所需的参数列表,包括但不限于`noncestr`, `timestamp`, 和 `signature`等字段。这些数据用来验证当前网页访问合法性以及防止跨站伪造攻击[^1]。 ```javascript wx.config({ debug: false, // 开启调试模式, 调用的所有 api 的返回值会在客户端 alert 出来,建议仅在测试环境开启 appId: 'your-app-id', // 必填,公众号的唯一标识 timestamp: res.timestamp, // 必填,生成签名的时间戳 nonceStr: res.nonceStr, // 必填,生成签名的随机串 signature: res.signature,// 必填,签名 jsApiList: ['getLocation'] // 必填,需要使用的JS接口列表 }); ``` #### 使用 JSSDK 功能 一旦完成上述准备工作之后就可以正常使用各种功能API了。比如这里展示了一个简单的例子——利用`getLocation()`方法取得用户的地理位置信息: ```html <button id="get-location">Get Location</button> <script src="//res.wx.qq.com/open/js/jweixin-1.6.0.js"></script> <script type="text/javascript"> document.getElementById('get-location').onclick = function(){ wx.getLocation({ success:function(res){ console.log(`Latitude:${res.latitude}, Longitude:${res.longitude}`); }, cancel:function(){ console.error('User refused to provide location.'); } }); }; </script> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值