app端实时语音识别转文字不能用uni.createspeechrecognizer,因其在app端未桥接ios/android原生服务而静默失效;必须通过uni-plugin-iflytek等原生插件集成科大讯飞sdk,严格配置manifest.json、权限、采样率(16000)、domain(iat)及网络与省电兼容性处理。

App端实时语音识别转文字,在uni-app里不能靠uni.createSpeechRecognizer搞定——这个API只在小程序(微信/支付宝)生效,App端完全不支持。必须走原生插件或SDK集成路线,科大讯飞是目前最稳定、延迟最低的落地选择。
为什么uni.createSpeechRecognizer在App端无效
这个API底层调用的是各平台原生语音识别服务:iOS用SFSpeechRecognizer,Android用Google SpeechRecognizer。但uni-app的App端(即app-plus)并未桥接这两套系统,调用后既无回调也无错误提示,静默失败。
- 现象:
uni.createSpeechRecognizer()返回null或直接报undefined is not a function - 实测范围:HBuilderX 3.6.20+、iOS 16+/Android 12+全量失效
- 替代路径:必须通过原生插件(如
uni-plugin-iflytek)或自己封装Android/iOS SDK
用uni-plugin-iflytek实现流式识别的关键配置
这个插件封装了科大讯飞MSC SDK,支持onResult逐字返回,是App端唯一能接近“实时”的方案。但配置极易出错:
-
manifest.json中app-plus.plugins必须严格按格式写,键名必须是iFlytek(大小写敏感),不能写成iflytek或iflyteck - Android需手动在
nativeplugins/IflytekVoicePlugin/android/AndroidManifest.xml里补全权限:<uses-permission android:name="android.permission.RECORD_AUDIO"></uses-permission>和<uses-permission android:name="android.permission.INTERNET"></uses-permission> - iOS需在
manifest.json → app-plus → usingComponents里显式开启"microphone": true,否则真机调试时录音权限弹窗都不出现 - 初始化时
createIFlytekRecorder必须传入appid、api_key、api_secret三者,缺一不可;其中api_secret不是密钥对里的私钥,而是科大讯飞控制台“语音听写”服务页生成的APISecret
startRecording后没触发onResult的常见原因
流式识别卡在“开始录音但无文字输出”,基本是音频通道或参数配置问题:
- 采样率不匹配:科大讯飞要求
samplerate: 16000,但uni-app默认录音可能输出44100Hz,需在插件初始化时显式指定{ sampleRate: 16000 } - 语言模型选错:
domain: 'iat'(听写)必须设置,若误设为'asr'或留空,SDK会拒绝处理音频流 - 网络未就绪:首次调用前必须确保设备联网,且SDK内部会发起一次鉴权请求;离线状态下
onError回调里errorCode是10203(网络异常),但不会打印日志,需主动监听 - Android 12+需额外申请
android.permission.POST_NOTIFICATIONS,否则后台录音被系统中断,表现为录几秒自动停止
真机调试时onEnd不触发的兼容性陷阱
部分Android机型(尤其华为EMUI、小米MIUI)会因省电策略杀死后台录音进程,导致stopRecording调用后onEnd永不触发,transcript停留在中间状态。
- 规避方式:在
@touchend里加setTimeout(() => { recorder.stop() }, 300),给SDK留出缓冲时间 - 更稳妥做法:监听
onVolumeChange,当音量值连续500ms为0时,主动调用stop() - iOS端注意:
AVAudioSession类别必须设为PlayAndRecord,否则AirPods等外设无法输入,onError报错码-10871
流式识别真正的难点不在代码,而在权限链路、音频参数对齐和系统级省电干预——这些环节任何一个断开,都会让“实时”变成“偶发”或“完全无响应”。建议真机测试至少覆盖华为P60、小米14、iPhone 15三台设备,别只信模拟器。











