基于React-Native0.55.4的语音识别项目全栈方案

发布时间:2020-04-30 14:24:44 作者:大史不说话
来源:网络 阅读:3128

移动端的API能力验证方案与PC端不一样!不一样!!不一样!!!

即使需要使用的API都存在,也不一定能用,这一点和PC端是有很大区别的,国内的手机系统虽然都是基于Android,但几乎都会经过各大厂商的定制,功能与原版Android系统并不是完全一致的,在考察技术方案的时候一定要确认用demo把功能跑起来才可以,别问我怎么知道的。

一. 移动端直接访问Web应用?

PC端基于Web API的语音识别方案可参考《【Recorder.js+百度语音识别】全栈方案技术细节》一文。

1. 调用Web API的多媒体采集接口需要特定的域

Web API的多媒体接口是WebRTC技术在PC端的实现,由于多媒体采集涉及到用户隐私,所以在浏览器端调用这个接口需要在安全的域下才能被调起,安全的域是指以下三类:

前两类一般用于桌面应用和本地调试,实际网站上线部署需要以https方式部署,如何部署https及申请免费的CA证书等网上有很多文章讲解,本文不再赘述。

2. 手机浏览器几乎都不直接支持WebRTC 接口

将PC端的Web应用以https方式部署好之后,从手机浏览器直接访问时无法唤起录音接口权限认证,navigator.getUserMedia( )方法一只返回permissionDenied错误,无论是在Android6.0以下通过编辑manifest.xml添加还是Android6.0以上通过动态获取的方式取得RECORD_AUDIO权限,网站都可以正常访问,相关的Web API接口也都存在,但即使获得用户授权后也无法调起录音功能。笔者测试了UC浏览器百度移动浏览器Android6.0(API23)自带的浏览器Android8.0(API26)自带的浏览器,结果是都不支持。

二. 方案调研和新的坑

o( ̄▽ ̄)d 既然从移动端直接访问Web应用时无法调起录音接口,至少是无法兼容很多系统和机型,如果不考虑直接原生开发Android的话,只有寄希望于Hybrid的方案了。

2.1 WebView

基于React-Native0.55.4的语音识别项目全栈方案

简单地说就是这个方法在Android webviewiOSPWA 基本都用不了。建议以后开发中可能用到一些不常用的API时完整地看一下相关信息。

2.2 crosswalk

2.3 Cordova/ionic

基于React-Native0.55.4的语音识别项目全栈方案

2.4 React-Native

基于React-Native0.55.4的语音识别项目全栈方案

WebRTC技术录音相关的navigator.getUserMedia,navigator.mediaDevices.getUserMedia,AudioContext这上面这几个方案中都是存在的,但事实是都没能在webview中调起麦克风进行录音。

当然WebRTC作为独立的标准和技术,也是可以融入Android工程的,但从前端开发者的角度来说这条路就有点跑偏了,执着于WebRTC或者团队里有原生开发者的小伙伴可以研究一下。

三. React-Native方案的整体架构

基于React-Native0.55.4的语音识别项目全栈方案

基本上只要多复用现成的组件,加上适量的定制,尽可能不使用一些奇技淫巧,产品的流畅度基本区分不出来是否是Hybrid开发还是Native开发,当然跟笔者的项目体量不是很大也有一定关系。

四. 使用插件清单

五. RN开发细节和遇到的坑

  1. 真机调试时,需要摇晃手机,在配置菜单中填写内网IP+端口号,否则会直接红屏报错。
  2. 真机调试时,需要在设置中开启应用的悬浮框权限,否则可能白屏什么都不显示。
  3. WebRTCAndroid WebView兼容性不好,IOS内置浏览器不支持。
  4. react-native-audio进行录音时,每一次调用Stop之后,若要再次启动录音功能,必须先调用AudioRecorder.prepareRecordingAtPath( )方法重新初始化,否则会红屏报错。
  5. WebView组件必须设置ref={(webview)=>{this.webview = webview}},否则onMessage属性无法监听到来自WebView加载网页通过window.postMessage发来的消息。
  6. TouchableHighlight组件必须先设置onPress属性的回调函数(可以为空函数),否则触摸变色的响应属性UnderlayColor无法生效。
  7. Modal组件在一个自定义组件中只能有一个(如果有多个必须通过条件判断只实例化一个),否则即使未显示的Modal组件的Visible属性设置为false,其实例方法也会和另一个Modal组件发生重叠覆盖,可能出现的现象就是显示了第一个Modal的界面,却执行了第二个Modal的同名方法。
推荐阅读:
  1. 为什么你应该尝试全栈?
  2. 基于C++和JavaScript的全平台全栈式游戏开发解决方案的思考

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

前端 全栈方案 ct

上一篇:linux系统查看系统内存与硬盘大小的命令

下一篇:MYSQL如何自动为查询数据的结果编上序号方法教程

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》