必须确认三件事:①仅支持app-plus/nvue编译模式,H5/小程序无效;②讯飞后台须选Android/iOS平台获取对应密钥;③真机调试需启用含讯飞SDK的调试或自定义基座。

uni-app App端调用讯飞语音SDK前,必须确认的三件事
不能直接用 uni.getRecorderManager() 或 Web Speech API——App端(尤其是 iOS)不支持,必须走原生 SDK 封装。讯飞官方只提供 Android/iOS 原生 SDK,uni-app 本身不内置语音识别能力,所有“接入”本质是调用原生模块。
- 你的 uni-app 项目必须使用
uni-app nvue或app-plus编译模式,h5或mp-weixin端完全无效 - 讯飞后台创建的应用平台必须选「Android」和「iOS」,获取对应的
appid、appkey、secretKey,Web 平台的 key 不通用 - 真机调试必须开启「调试基座」或自定义基座:HBuilderX 默认基座不含讯飞 SDK,直接运行会报
module not found或静默失败
Android 端集成讯飞 SDK 的最小可行路径
讯飞 Android SDK(msc.jar + libmsc.so)需手动放入 nativeplugins/android/xxx/ 目录,并在 nativeplugins/android/xxx/android.json 中声明权限与 Activity。漏掉任一环节都会导致 java.lang.UnsatisfiedLinkError 或初始化失败。
- 必须在
android.json的permissions数组里加:"android.permission.RECORD_AUDIO"、"android.permission.WRITE_EXTERNAL_STORAGE"(Android 10+ 还需requestLegacyExternalStorage=true) -
android:name必须指向讯飞 SDK 所需的SpeechUtility初始化入口,不能只写空壳类 - 不要把
msc.jar放进libs/目录——uni-app native plugin 机制只认nativeplugins/下结构
iOS 端调用讯飞语音识别时的证书与权限陷阱
iOS 上最常卡在 SpeechRecognizer startListening failed: -1002,根本原因不是代码,而是 Xcode 工程配置缺失。讯飞 SDK 依赖系统语音识别框架,但 uni-app 自动打包会覆盖部分 Info.plist 配置。
- 必须手动在
manifest.json → app-plus → ios → permissions中添加:"microphone": {"description": "用于语音输入"} - 必须在
nativeplugins/ios/xxx/Info.plist里补全:NSMicrophoneUsageDescription和UIBackgroundModes(含audio) - 讯飞 iOS SDK 要求最低部署目标为
iOS 11.0,若你改过build.json中的minimumDeploymentTarget低于此值,SDK 会拒绝加载
uni-app JS 层调用语音识别的正确姿势
别用 uni.requireNativePlugin() 直接 new 实例——讯飞 SDK 初始化是异步且全局单例的,JS 层应封装成 Promise 化接口,并监听状态回调。常见错误是反复调用 start() 导致 error code -20001(资源冲突)。
- 首次调用前必须先执行
plugin.init({appid: 'xxx'}),否则后续所有方法返回null或静默失败 - 识别结果通过
onResult回调返回,不是 Promise resolve;断句、网络超时、取消等事件需分别监听onBeginOfSpeech、onEvent(3001)、onCancel - 安卓端若未在
onEndOfSpeech后主动调用stop(),下次start()可能卡住;iOS 则建议始终配对调用start()/stop()
讯飞语音识别真正难的不是调用那几行 JS,而是原生层权限、签名、ABI 架构(armeabi-v7a/arm64-v8a)、以及 iOS 后台音频能力这些看不见的链路。任何一个环节断了,现象都是“没反应”,而不是报错。










