集成 SDK
本文介绍如何集成 ZIM Audio SDK。
1 前提条件
在集成 ZIM Audio SDK 之前,请确保
- 开发环境满足以下要求:
- HBuilder X 4.27 或以上版本。
- iOS 12.0 或以上版本的设备或模拟器(推荐使用真机)。
- Android 5.0 或以上版本的设备或模拟器,如果为真机,请开启“允许调试”选项。
- iOS / Android 设备已经连接到网络。
- 已在 ZEGO 控制台 创建项目,获取到了接入 ZIM SDK 服务所需的 AppID、AppSign。ZIM 服务权限不是默认开启的,使用前,请先在 ZEGO 控制台 自助开通 ZIM 服务(详情请参考控制台的 服务配置 - 即时通讯 - 开通服务),若无法开通 ZIM 服务,请联系 ZEGO 技术支持开通。
- 已集成 ZIM SDK,详情请参考 快速开始 - 实现基本收发消息 的 “2 集成 SDK”。
2 集成 SDK
2.1 (可选)新建项目
此步骤以如何创建新项目为例,如果是集成到已有项目,可忽略此步。
- 启动 HBuilderX,选择“文件 > 新建 > 项目”菜单。

- 在出现的表单中,选择 “uni-app” 平台,并勾选 “uni-app x” 后填写项目名称。

- 单击“创建”,即可创建项目。
2.2 集成 SDK
以下两种方式可以任选一种导入。
2.3 制作自定义调试基座
说明
uni-app x 官方自定义调试基座使用说明,请参考 使用自定义基座运行。
-
选择 “运行 > 运行到手机或模拟器 > 制作自定义调试基座” 菜单。

-
在弹出的界面中,按照 uni-app 教程,填写相关信息,并单击“打包”进行云打包。

打包成功后,控制台会收到 uni-app 的相关提示。

2.4 切换运行基座为自定义调试基座
自定义调试基座,请选择“运行 > 运行到手机或模拟器 > 运行到 Android App 基座 > 使用自定义基座运行”菜单。
3 申请录音权限
使用 ZIM Audio SDK 前,请设置麦克风权限,以实现采集语音。
注意
- iOS 平台 APP 会自动申请权限,无需处理。
- Android 6.0 及以上版本在一些比较重要的权限上要求必须申请动态权限,参考执行如下代码,申请录音权限。
// Android 平台申请录音权限
// #ifdef APP-ANDROID
const filePath = ''; // 录音文件的绝对路径
const permissionCheck = ["android.permission.RECORD_AUDIO"]
// 检查是否已经授权
if (!UTSAndroid.checkSystemPermissionGranted(UTSAndroid.getUniActivity()!, permissionCheck)) {
// 没有授权,请求授权
UTSAndroid.requestSystemPermission(
UTSAndroid.getUniActivity()!,
permissionCheck,
function (allRight : boolean, _ : string[]) {
if (allRight) {
// 授权成功,开始录制
// ZIMAudio.getInstance().startRecord({ filePath, maxDuration: 1 * 60 * 1000 } as ZIMAudioRecordConfig);
}
},
function (all : boolean, _ : string[]) {
//用户拒绝了部分权限
});
} else {
// 已经授权成功,开始录制
// ZIMAudio.getInstance().startRecord({ filePath, maxDuration: 1 * 60 * 1000 } as ZIMAudioRecordConfig);
}
// #endif4 完整参考代码
// <script>
import { ZIMAudio, ZIMAudioRecordConfig, ZIMAudioPlayConfig, ZIMAudioANSParam } from '@/uni_modules/zego-zim-audio-uts';
export default {
onShow() {
this.useZIMAudio();
},
methods: {
async useZIMAudio() {
// 录音文件存放的绝对路径
let filePath = '';
// 创建实例
const zimAudio = ZIMAudio.getInstance();
zimAudio.onError((res) => console.log('onError: ' + JSON.stringify(res)));
zimAudio.onRecorderStarted(() => {
console.log('onRecorderStarted');
setTimeout(() => {
zimAudio.isRecording().then((res) => console.log('isRecording: ' + res));
zimAudio.completeRecord().then(async () => {
// 录制完成后,可播放录音文件
await zimAudio.setAudioRouteType(0);
await zimAudio.startPlay({ filePath, routeType: 0 } as ZIMAudioPlayConfig);
// zimAudio.uninit();
});
// zimAudio.cancelRecord();
}, 10 * 1000);
});
zimAudio.onRecorderCancelled(() => console.log('onRecorderCancelled'));
zimAudio.onRecorderCompleted((res) => console.log('onRecorderCompleted: ' + res));
zimAudio.onRecorderProgress((res) => console.log('onRecorderProgress: ' + res));
zimAudio.onRecorderFailed((res) => console.log('onRecorderFailed: ' + res));
zimAudio.onPlayerStarted((res) => {
console.log('onPlayerStarted: ' + res);
setTimeout(() => {
zimAudio.isPlaying().then((res) => console.log('isPlaying: ' + res));
zimAudio.stopPlay();
}, 5 * 1000);
});
zimAudio.onPlayerInterrupted(() => console.log('onPlayerInterrupted'));
zimAudio.onPlayerStopped(() => console.log('onPlayerStopped'));
zimAudio.onPlayerEnded(() => console.log('onPlayerEnded'));
zimAudio.onPlayerProgress((res) => console.log('onPlayerProgress: ' + res));
zimAudio.onPlayerFailed((res) => console.log('onPlayerFailed: ' + res));
// 参考 ZEGO 文档,https://doc-zh.zego.im/zim-server/zim-audio/obtain-a-license 接口用以上配置生成的鉴权
const license = '';
// ZIMAudio.setAdvancedConfig('audio_session_do_nothing', 'true');
await zimAudio.initWithLicense(license);
// ZIMAudio.setAdvancedConfig('audio_session_mix_with_others', 'true');
await zimAudio.enableAGC(true);
await zimAudio.enableANS(true);
await zimAudio.setANSParam({ mode: 1 } as ZIMAudioANSParam);
// #ifdef APP-ANDROID
const apkName = ''; // apk 包名
filePath = '/storage/emulated/0/Android/data/' + apkName + '/test.mp3';
// Android 平台:请求录制权限
const permissionCheck = ["android.permission.RECORD_AUDIO"]
if (!UTSAndroid.checkSystemPermissionGranted(UTSAndroid.getUniActivity()!, permissionCheck)) {
UTSAndroid.requestSystemPermission(
UTSAndroid.getUniActivity()!,
permissionCheck,
function (allRight : boolean, _ : string[]) {
if (allRight) {
zimAudio.startRecord({ filePath, maxDuration: 1 * 60 * 1000 } as ZIMAudioRecordConfig)
}
},
function (all : boolean, _ : string[]) {
//用户拒绝了部分权限
});
} else {
zimAudio.startRecord({ filePath, maxDuration: 1 * 60 * 1000 } as ZIMAudioRecordConfig);
}
// #endif
// 通过以下 swift 代码获取文件目录
// import Foundation;
// func getSandboxDirectory() -> String {
// // temporaryDirectory cachesDirectory documentDirectory
// return FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0].path
// }
// filePath = getSandboxDirectory();
// #ifdef APP-IOS
filePath = filePath + '/test.mp3';
zimAudio.startRecord({ filePath, maxDuration: 1 * 60 * 1000 } as ZIMAudioRecordConfig);
// #endif
}
}
}
// </script> 