For the complete documentation index, see llms.txt. This page is also available as Markdown.

iOS 和 Android

为 iOS 和 Android 构建声明麦克风和摄像头权限——省略它们会导致 iOS 崩溃以及 Android 上的静默失败。

iOS 和 Android 构建使用原生传输路径。所有核心 SDK 功能——语音对话、口型同步、动作、情绪、空间音频和 Vision——在两个平台上的工作方式完全一致。唯一需要实现的工作是在构建发送到设备或应用商店之前,声明麦克风和摄像头访问的操作系统级权限。

功能支持

功能
iOS
Android

语音对话

✅ 完整支持

✅ 完整支持

口型同步

✅ 完整支持

✅ 完整支持

动作

✅ 完整支持

✅ 完整支持

情绪

✅ 完整支持

✅ 完整支持

长期记忆

✅ 完整支持

✅ 完整支持

叙事设计

✅ 完整支持

✅ 完整支持

Vision(WebcamVisionFrameSource)

✅ 完整支持

✅ 完整支持

空间音频

✅ 完整支持

✅ 完整支持

Unity AudioSource 播放

✅ 完整支持

✅ 完整支持

麦克风设备选择

✅ 完整支持

✅ 完整支持

屏幕共享

❌ 不支持

❌ 不支持

平台
支持的架构

iOS

arm64(设备),x86_64(模拟器)

Android

arm64-v8a、armeabi-v7a、x86_64

iOS 设置

在你的应用可以请求麦克风或摄像头访问之前,iOS 需要用途说明字符串。请在以下位置设置它们 项目设置 → Player → iOS → 其他设置 → 用途说明.

在以下情况下必需
建议的说明

NSMicrophoneUsageDescription

始终需要——所有语音交互都必需

此应用使用你的麦克风,以启用与 AI 训练角色的语音对话。

NSCameraUsageDescription

仅在启用 Vision 时需要

此应用使用你的摄像头,以便 AI 角色能够看到并回应你在模拟中展示的内容。

运行时权限处理

SDK 不会自动请求麦克风权限。在开始对话之前,你的应用必须已获得麦克风权限——如果 SDK 启动麦克风时权限不存在,它会抛出 InvalidOperationException。请在应用初始化期间、首次对话尝试之前请求权限。iOS 每种权限类型只会显示一次权限提示——如果先前已授予或拒绝,后续启动会跳过提示。

在开始会话之前请求权限并检查结果:

示例:iOS 上启用 Vision 的外科咨询训练

一所医学院在 iPad Pro 上部署了一款患者问诊训练应用。住院医师与一个 Convai 患者角色进行口头互动练习。启用 Vision 后,该角色可以识别住院医师举起的实体道具——解剖模型和流程参考卡片。

设置:

  1. 项目设置 → Player → iOS → 其他设置 → 用途说明中,设置:

    • NSMicrophoneUsageDescription: 此应用使用你的麦克风,以启用与 AI 训练角色的语音对话。

    • NSCameraUsageDescription: 此应用使用你的摄像头,以便 AI 角色能够看到并回应你在模拟中展示的内容。

  2. 添加 WebcamVisionFrameSource 到场景中的一个 GameObject,并分配一个 ConvaiVisionPublisher.

  3. 语音对话的标准 SDK 配置。

结果: 首次启动时,iOS 会先显示麦克风权限提示,然后显示摄像头权限提示。两者都授予后,住院医师与角色交谈,并将实体道具举到 iPad 摄像头前。角色会识别其所见内容,并以临床上合适的对话进行回应。

Android 设置

在自定义的 AndroidManifest.xml 位于 Assets/Plugins/Android/AndroidManifest.xml。如果项目中不存在该文件,请创建它——Unity 会在构建时将其与生成的清单合并。

构建后,请验证权限是否出现在导出的 AndroidManifest.xml 中的 APK 或 AAB 里——如果文件格式有误,Unity 的清单合并有时会省略条目。

运行时权限处理

SDK 不会自动请求麦克风权限。在开始对话之前,你的应用必须已获得 RECORD_AUDIO 运行时权限——如果 SDK 启动麦克风时权限不存在,它会抛出 InvalidOperationException。调用 Permission.RequestUserPermission(Permission.Microphone, callbacks) 在应用初始化期间,并在回调返回前不要启动会话。与 iOS 不同,Android 允许重复请求权限。在两次拒绝之后,Android 可能会显示“不要再询问”选项,此后 Permission.RequestUserPermission 将不起作用。请通过应用内指引将用户引导到设备设置来处理这种情况。

示例:Android 上的现场安全合规演练

一家制造公司在发放给生产线员工的 Android 平板上部署了一款安全检查员培训应用。Convai 角色扮演安全审计员,以口头方式带领操作员完成设备检查流程。

设置:

  1. 添加 <uses-permission android:name="android.permission.RECORD_AUDIO" />Assets/Plugins/Android/AndroidManifest.xml.

  2. 标准 SDK 配置——不启用 Vision,因此不需要摄像头权限。

  3. 构建后,请验证 RECORD_AUDIO 是否出现在导出的清单中。

结果: 首次启动时,Android 会显示麦克风权限提示。用户授予访问权限后,Convai 角色开始检查对话。后续启动会跳过该提示。如果用户之前已拒绝权限,应用会引导他们前往设备设置。

移动端的 Vision

WebcamVisionFrameSource 可在 iOS 和 Android 上运行。将该组件添加到场景中的一个 GameObject,并分配一个 ConvaiVisionPublisher。如果所需权限缺失,Unity Inspector 会显示平台特定警告——请在构建前处理这些问题。

在 iOS 上,Vision 需要 NSCameraUsageDescription 在 Player Settings 中——该组件会调用 Application.RequestUserAuthorization(UserAuthorization.WebCam) 在运行时自动请求权限。在 Android 上,Vision 需要 android.permission.CAMERA 在清单中——该组件会调用 Permission.RequestUserPermission(Permission.Camera) 在运行时自动执行。你不需要手动请求摄像头权限;只需在 Player Settings(iOS)或清单(Android)中声明它即可。

当应用转入后台时,操作系统会自动暂停麦克风采集。返回前台后,SDK 会在无需开发者干预的情况下恢复采集。会话状态遵循生命周期配置中定义的重新连接规则。

故障排除

症状
可能原因
修复

首次语音尝试时应用崩溃(iOS)

NSMicrophoneUsageDescription 在 Player Settings 中缺失

在其中添加键 项目设置 → Player → iOS → 其他设置 → 用途说明.

Vision 启动时应用崩溃(iOS)

NSCameraUsageDescription 在 Player Settings 中缺失

在其中添加键 项目设置 → Player → iOS → 其他设置 → 用途说明.

麦克风权限提示从不出现(Android)

RECORD_AUDIO 缺失于 AndroidManifest.xml

添加 <uses-permission android:name="android.permission.RECORD_AUDIO" /> 将其添加到你的清单中,并验证它出现在导出的 APK 中。

Android 上 Vision 的摄像头权限提示从不出现

CAMERA 缺失于 AndroidManifest.xml

添加 <uses-permission android:name="android.permission.CAMERA" /> 添加到你的清单中。

应用进入后台后麦克风停止工作

操作系统已暂停采集——预期行为

SDK 会在返回前台时自动恢复采集。无需任何操作。

第二次启动时 iOS 提示未出现

用户在首次启动时拒绝了——iOS 不会再次提示

添加应用内消息,引导用户前往 设置 → 隐私与安全 → 麦克风 以重新启用。使用 Application.HasUserAuthorization(UserAuthorization.Microphone) 来检测被拒绝状态。

下一步

一旦权限已声明并在实体设备上测试完毕,你的 iOS 和 Android 构建就可以分发了。如果你也在 XR 头显上部署,这些构建还会有额外的 Vision 要求。

XR 头显WebGL

最后更新于

这有帮助吗?