微信jssdk录音功能开发记录

标签(空格分隔): 前端

0.需求描述

在微信浏览器内打开的页面,制作一个按钮,用户按住按钮后开始录音,松手后停止录音并将录音上传并长期保存。

1.开发流程

如果开发的是普通的展示性页面,就和开发普通的页面没有区别,不过这里要用到设备(手机)的录音功能,就需要调用微信app的录音接口,需要使用微信jssdk。

先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。[需要有微信公众号]

引入JS文件

通过config接口注入权限验证配置

通过ready接口处理成功验证

通过error接口处理失败验证

//假设已引入微信jssdk。【支持使用 AMD/CMD 标准模块加载方法加载】

wx.config({

debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。

appId: '', // 必填,公众号的唯一标识

timestamp: , // 必填,生成签名的时间戳

nonceStr: '', // 必填,生成签名的随机串

signature: '',// 必填,签名,见附录1

jsApiList: [] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2

});

wx.ready(function(){

// config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。

});

wx.error(function(res){

// config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。

});

本次需求核心功能:录音并保存

//假设全局变量已经在外部定义

//按下开始录音

$('#talk_btn').on('touchstart', function(event){

event.preventDefault();

START = new Date().getTime();

recordTimer = setTimeout(function(){

wx.startRecord({

success: function(){

localStorage.rainAllowRecord = 'true';

},

cancel: function () {

alert('用户拒绝授权录音');

}

});

},300);

});

//松手结束录音

$('#talk_btn').on('touchend', function(event){

event.preventDefault();

END = new Date().getTime();

if((END - START) < 300){

END = 0;

START = 0;

//小于300ms,不录音

clearTimeout(recordTimer);

}else{

wx.stopRecord({

success: function (res) {

voice.localId = res.localId;

uploadVoice();

},

fail: function (res) {

alert(JSON.stringify(res));

}

});

}

});

//上传录音

function uploadVoice(){

//调用微信的上传录音接口把本地录音先上传到微信的服务器

//不过,微信只保留3天,而我们需要长期保存,我们需要把资源从微信服务器下载到自己的服务器

wx.uploadVoice({

localId: voice.localId, // 需要上传的音频的本地ID,由stopRecord接口获得

isShowProgressTips: 1, // 默认为1,显示进度提示

success: function (res) {

//把录音在微信服务器上的id(res.serverId)发送到自己的服务器供下载。

$.ajax({

url: '后端处理上传录音的接口',

type: 'post',

data: JSON.stringify(res),

dataType: "json",

success: function (data) {

alert('文件已经保存到七牛的服务器');//这回,我使用七牛存储

},

error: function (xhr, errorType, error) {

console.log(error);

}

});

}

});

}

//注册微信播放录音结束事件【一定要放在wx.ready函数内】

wx.onVoicePlayEnd({

success: function (res) {

stopWave();

}

});

2.小麻烦

要防止用户误操作(如:反复点击、误触摸)导致的无效录音。

小于300ms不录音

防止用户长按导致的浏览器默认弹出微信浏览器默认的“复制对话框”。

使用css设置按钮 user-select:none;

微信播放录音接口事件回调函数无效

微信注册事件一定要放在wx.ready中。

阻止默认事件

touch 事件记得加 event.preventDefault(); 防火防爆

微信存储静态资源时间为3天,如何长期保存

要么存到自己服务器,要么利用其它资源,比如七牛,还可以帮我们自由转换amr格式到mp3等格式呢!

微信服务器默认资源格式为amr,这个格式在android机器可以使用audio标签播放,在ios机器使用audio标签无法播放。

微信录音功能授权引发的交互问题

使用微信jssdk接口录音,在同一个域只需要授权一次,即第一次使用录音的时候,微信自己会弹出对话框询问是否允许录音,用户点击允许后,之后再使用录音时,便不会再咨询用户是否允许。

在第一次按住录音后,由于用户未曾允许录音,微信会提示用户授权允许在本页面使用微信录音功能,这时用户会放开录音按钮转而去点击允许,在用户允许后,才真正会开始录音,而此时用户早已放开录音按钮,那么录音按钮上便不会再有touchend事件,录音便会一直进行。

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

if(!localStorage.rainAllowRecord || localStorage.rainAllowRecord !== 'true'){

wx.startRecord({

success: function(){

localStorage.rainAllowRecord = 'true';

wx.stopRecord();

},

cancel: function () {

alert('用户拒绝授权录音');

}

});

}

3.难题

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

但是使用微信接口(wx.playVoice)播放录音的音量是正常的,而且之后,audio标签的音量会有所增大(但是依然音量很低)。

该问题正在沟通微信相关技术人员。

暂时的解决策略为:对于刚刚录音的音频,使用wx.playVoice来播放,否则使用audio播放服务器资源。原因是不确定该音频本地是否存在,刚刚录音的音频肯定是存在的。

jssdk更新日志_微信jssdk录音功能开发记录相关推荐

  1. jssdk更新日志_关于jssdk版本的阿里云网站内容、产品介绍、帮助文档、论坛交流和云市场相关问题...

    {"moduleinfo":{"list_count":[{"count_phone":21,"count":21}], ...

  2. jssdk分享设置_微信JSSDK分享页面自定义当前链接最简单示例

    这个是使用微信原本的Deom修改 但是一定要注意几个注意事项,代码很简单,却让我一周mmp 在微信开发者工具调试,有时候你代码正确但是会报错 一定要真机调试 appid和secret一定要正确 一定要 ...

  3. 微信jssdk录音功能开发记录

    微信jssdk录音功能开发记录 标签(空格分隔): 前端 0.需求描述 在微信浏览器内打开的页面,制作一个按钮,用户按住按钮后开始录音,松手后停止录音并将录音上传并长期保存. 1.开发流程 如果开发的 ...

  4. c# sha1签名 微信_微信公众号开发——微信JSSDK使用(踩坑)

    这段时间有个工作,是要在移动端给地图上加上导航功能,找了一圈,最后决定使用微信JSSDK的'打开地理位置接口'来开发,也是着实踩了下坑啊,分享一下 微信JSSDK介绍 因为微信公众号的开通对于大部分开 ...

  5. jssdk信息验证失败_微信公众号开发——微信JSSDK使用

    微信JSSDK介绍 官方文档地址: 概述 | 微信开放文档​links.jianshu.com 因为微信公众号的开通对于大部分开发人员来说还是一个稍高的门槛,所以,微信搞了一个微信测试号,开发人员使用 ...

  6. 前端微信签名验证工具_微信JSSDK签名

    微信JS-SDK说明文档 https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115 生成签名 1.签名规则 参与签名的 ...

  7. 微信分享源码PHP版JS-SDK接口_微信JSSDK分享功能图文实例详解

    本文实例讲述了微信JSSDK分享功能.分享给大家供大家参考,具体如下: 这里以微信分享到朋友圈,分享给微信好友为例为参考,进行调用测试,想添加其他的功能,自行查看开发人员文档即可 工欲善其事,必先利其 ...

  8. js sdk 一键分享 微信_微信JSSdk实现分享功能

    1. 概述 微信分享服务器的作用是为用户在微信浏览器端对来自网站以及客户端的页面进行二次分享链接时更友好的展示提供服务.为实现二次分享功能需要使用微信JS-SDK来开发. 微信JS-SDK是微信公众平 ...

  9. js sdk 一键分享 微信_微信jssdk实现分享到微信

    本来用的是这个插件http://overtrue.me/share.js/和百度分享 相同之处:在微信分享的时候,分享的链接都不能获取到缩略图... 不同之处:百度分享在微信低版本是可以看到缩略图的( ...

最新文章

  1. 对象----《你不知道的JS》
  2. window 下相关命令
  3. 【linux】lsof的常用命令汇总
  4. [转]几种调用WebService的方法
  5. SLAM的评价指标、真实值、估计值及误差分析(转)
  6. ZF1.* 愤怒小鸟系列二:快速自定义创建MVC
  7. 【ArcGIS遇上Python】Python批量将多个文件夹下的多个影像数据镶嵌至新栅格
  8. Java 8最新消息
  9. 学习Enroll例程
  10. 百度吹过的牛实现了,你的呢?5本书带你搞定AI前沿技术
  11. mysql腾讯面试题_2020腾讯阿里精选面试题100+(包含答案)
  12. 一个模型使召回阶段又准确又多样
  13. 最简单的基于FFmpeg的内存读写的例子:内存转码器
  14. Antenna Placement(二分图的最大匹配)
  15. html怎么快捷复制粘贴,如何使用快捷键复制粘贴
  16. .NET Core使用微软官方类库实现汉字简繁切换以及转拼音
  17. 记录一下QT下载安装及相关说明
  18. ios开发中UIButton设置标题和图片不能同时显示问题解决
  19. 51单片机-TLC5615代码
  20. 羊皮卷之二:我要用全身心的爱来迎接今天

热门文章

  1. 为编辑器TeXworks添加命令biber
  2. LaTeX中处理参考文献的三种方法总结
  3. html页面鼠标单击----------爱心特效
  4. Android的Ui层次
  5. 装机教你电脑城精明装机十大技巧
  6. DM8DSC iscsi+Mutipath环境下的共享集群部署
  7. 打印系统开发(38)——API(3)——windows设置默认打印机
  8. 医疗器械电磁兼容试验及标准要求
  9. 麻省理工学院计算机系正教授,我校教授应邀赴美国麻省理工学院等高校做主题演讲并访问交流...
  10. OpenInfra白金会员畅谈开源基础架构“白金十年”,妙!