logo
即时通讯
客户端 SDK
当前页

集成 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 (可选)新建项目

  1. 启动 HBuilderX,选择“文件 > 新建 > 项目”菜单。
  1. 在出现的表单中,选择 “uni-app” 平台,并勾选 “uni-app x” 后填写项目名称。
  1. 单击“创建”,即可创建项目。

2.2 集成 SDK

以下两种方式可以任选一种导入。

2.3 制作自定义调试基座

说明

uni-app x 官方自定义调试基座使用说明,请参考 使用自定义基座运行

  1. 选择 “运行 > 运行到手机或模拟器 > 制作自定义调试基座” 菜单。

  2. 在弹出的界面中,按照 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);
}
// #endif

4 完整参考代码

// <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>     

上一篇

简介

下一篇

收发语音消息

当前页

返回到顶部