OpenClaw iOS App Review 全流程实测指南:从 Gateway 接入、审批、语音到推送与权限验收
【免费下载链接】openclawThe AI that really does things. Any OS. Any Platform. The lobster way. 🦞项目地址: https://gitcode.com/GitHub_Trending/cl/openclaw
OpenClaw 的 iOS 客户端是连接移动端与 OpenClaw Gateway 的入口,而面向 Apple App Review 的验收流程则覆盖了这款应用最核心的端到端能力:设置码接入 Gateway、执行审批、实时语音对讲、后台语音续播、锁屏 Live Activity、远程推送唤醒、设备权限,以及 Share Sheet 分享。本文以仓库内 apps/ios/APP-REVIEW-NOTES.md 为骨架,结合 iOS 端源码(apps/ios/Sources)逐项拆解每一步操作、预期结果与底层实现,帮助你在真机上完整复现一次 App Review 演练。
1. 验收前的准备:Demo 账号与设置码
整个验收流程围绕“live OpenClaw iOS App Review Gateway”展开。按照原文档,评审者只需在 OpenClaw App 的Notes字段中使用官方提供的单一设置码字符串即可完成接入。这个设置码是预先生成的一串代码,内部已包含:
- 公开的 Gateway 主机地址(public Gateway host);
- 用于首次连接的设置凭据(setup credential)。
它省去了手工填写主机、端口、证书等多项参数的繁琐过程,对应 iOS 端“设置码”这一整套引导体系(见 apps/ios/Sources/Onboarding/OnboardingWizardView.swift,其中包含Paste setup code、Apply Setup Code等界面文案,以及 apps/ios/Sources/Gateway/GatewayTrustPromptAlert.swift 中的Trust and connect信任提示)。
2. 设置接入走查(Setup Walkthrough)
按以下步骤在真机上完成首次接入(对应原文档Setup Walkthrough小节):
- 打开 OpenClaw App,点击
Continue。 - 在
Connect Gateway界面点击Set Up Manually。 - 在
Setup Code区块点击Paste setup code输入框。 - 将 App Review 提交
Notes字段中的设置码粘贴进去。 - 点击
Apply Setup Code。 - 若出现
Trust and connect,点击Trust and connect(信任并连接)。 - 等待进入
Connected界面。 - 在
Connected界面点击Open OpenClaw。 - 确认
Control界面显示Gateway Online。 - 依次进入
Settings→Approvals→Open Notifications→Enable Notifications。 - 在
Enable OpenClaw Hosted Push Relay?弹窗中点击Continue。 - 若 iOS 询问是否允许 OpenClaw 发送通知,点击
Allow。 - 确认
Notifications显示为Enabled。
实现细节:设置码与手动连接两条路径共同由 apps/ios/Sources/Onboarding/OnboardingWizardConnectionSections.swift 等向导模块驱动;设置码粘贴框与Apply Setup Code动作对应 apps/ios/Sources/Design/SettingsProTabSections.swift 中Paste setup code的输入实现。此环节同时完成了 Gateway 在线状态确认与通知(推送)权限的首次申请,为后续审批、推送唤醒等演示打基础。
3. 聊天与审批演示(Chat / Approval Demo)
3.1 Chat 基础验证
- 点击
Chat标签页。 - 点击标注为
Message main...的输入框。 - 发送这条精确消息:
Start Apple review checklist.预期结果:助手回复可用的 App Review 演示列表。
3.2 执行审批(Approval Demo)
- 点击
Chat标签页,在Message main...输入框发送:
Run the approval demo.- 预期结果:iPhone 弹出
Exec approval required(执行审批请求),展示的是一条无害命令:
printf 'OpenClaw App Review approval demo complete\n'- 点击
Allow Once,随后 Chat 回复:
The approval demo completed.实现细节:审批能力属于 OpenClaw 的“执行审批”(Exec Approval)体系。iOS 端通过 apps/ios/Sources/Push/ExecApprovalNotificationBridge.swift 将待审批执行转发到通知层,配合推送/本地通知呈现审批请求;审批通过后 Gateway 侧继续执行该命令并把结果回传聊天。Allow Once属于一次性授权,不改变后续命令的默认审批策略。
4. 语音对讲(Talk)与后台音频
4.1 基础语音对讲
- 点击
Talk标签页,点击Start Talk。 - 若 iOS 请求麦克风权限,点击
Allow;若请求语音识别(Speech Recognition)权限,同样点击Allow。 - 确认界面切换为
Ready to talk并显示Stop Talk。 - 说出:
Summarize this review setup in one sentence.- 预期结果:助手通过语音回复。说完后点击
Stop Talk。
4.2 Talk + 后台音频(Background Audio)
- 点击
Talk标签页。 - 确认扬声器按钮为高亮状态。
- 确认后台聆听(background-listening)按钮为高亮状态。
- 点击
Start Talk,按提示允许麦克风与语音识别权限。 - 确认
Stop Talk可见后说:
Tell me when you can hear me.- 关键步骤:在 Talk 进行中,返回主屏幕或锁屏让 OpenClaw 进入后台(不要强制退出 App)。
- 继续说话并等待助手的音频回复。
预期结果:实时 Talk 音频在 App 进入后台后依然持续。重新打开 OpenClaw,确认 Talk 仍处于活动状态,再点击Stop Talk。
实现细节:后台持续语音依赖 iOS 的持续后台音频会话与语音识别能力。iOS 端语音模块位于 apps/ios/Sources/Voice,并通过 apps/ios/Sources/LiveActivity/VoiceLiveActivityCoordinator.swift 将语音状态同步到 Live Activity;apps/ios/Sources/StartLiveVoiceIntent.swift 还提供了通过 Siri 快捷指令/App Intent 直接发起语音会话的入口。锁屏后语音会话能够继续,说明应用正确配置了相应的后台模式。
5. Gateway 状态与实例确认(Gateway Status)
- 点击
Control标签页,再点击Instances。 - 确认界面显示
Gateway online。 - 确认至少有一个
agent实例处于连接状态。 - 确认当前这台 iPhone 评审设备出现在已连接实例列表中。
实现细节:实例列表来自 Gateway 的实时状态通道。iOS 端 apps/ios/Sources/Status 与 apps/ios/Sources/Node 负责订阅并展示 Gateway/Agent 的在线状态,每台设备(含本机)都会作为一个可识别的节点/实例出现。这一步同时验证了“设置码接入 → 建立长连接 → 状态上报”整条链路是通的。
6. 锁屏 Live Activity / 灵动岛(Dynamic Island)
- 点击
Settings,点击Reconnect。 - 立即返回主屏幕或锁屏,让 OpenClaw 进入后台。
- 在 Gateway 重连期间观察锁屏或灵动岛。
预期结果:重连期间,iOS 可展示一个名为OpenClaw的 Live Activity,内容为连接状态(如Connecting...或Reconnecting...)。在快速网络下该状态可能一闪而过——因为 Gateway 重连成功后,OpenClaw 会结束这条 Live Activity。
实现细节:Live Activity 由 apps/ios/Sources/LiveActivity/LiveActivityManager.swift 统一管理,它是连接、注意力、工具执行与语音状态的单一 ActivityKit 呈现入口:
- 各状态生产者独立上报,由
LiveActivityPresentationArbiter仲裁谁可见,避免低优先级更新盖掉紧急状态; - 连接状态对应
showConnecting,会把Connecting.../Reconnecting...归一化为语义化的.connecting/.reconnecting(见connectingPresentation),未知文案才原样透传; - 更新采用“最多一个在途更新 + 一个可替换待更新”的合并策略(
enqueueLatestUpdate),防止 ActivityKit 慢写入堆积过期队列; - 语音与工具类 Live Activity 通过心跳任务持续刷新
staleDate(语音约 240 秒、工具约 240 秒),让锁屏呈现不会过期; - 启动时会
hydrateCurrentAndPruneDuplicates,从系统恢复正在活动的 Activity 并清理重复项。
属性与状态模型定义在 apps/ios/Sources/LiveActivity/OpenClawActivityAttributes.swift,重连触发清理连接状态后由reconcile决定呈现或结束。
7. 推送通知与推送唤醒(Push Notification / Push Wake)
7.1 推送通知演示
- 点击
Chat标签页,在Message main...输入框发送:
Start push notification demo.- 立即将 OpenClaw 切到后台并锁屏(不要强制退出 App)。
- 预期结果:锁屏收到可见的
OpenClaw通知,正文为:
OpenClaw App Review push notification demo- 点击通知(如提示则解锁 iPhone)。若 OpenClaw 打开在
Control页,切到Chat,预期 Chat 回复:
The push notification demo completed.7.2 推送唤醒与节点状态演示(Push Wake / Status)
- 在
Chat标签页发送:
Start push wake demo.- 立即切到后台并锁屏(不要强制退出 App)。
- 等待锁屏出现
OpenClaw通知——通常在消息发出后约 10 秒出现。 - 点击通知(如提示则解锁)。若打开在
Control页,切到Chat。 - 预期结果:App 重连到 live Gateway,Chat 回复:
The push wake and node status demo completed.实现细节:推送体系位于 apps/ios/Sources/Push,支持两种传输模式(由 apps/ios/Sources/Push/PushBuildConfig.swift 的transport决定):
- direct(直连):App 直接把 APNs token 与 topic 注册给 Gateway(见
DirectGatewayPushRegistrationPayload); - relay(托管中继):通过 OpenClaw Hosted Push Relay 转发,注册负载包含
relayHandle、sendGrant、gatewayDeviceId、installationId等字段(见RelayGatewayPushRegistrationPayload与 apps/ios/Sources/Push/PushRelayClient.swift),这正是接入时Enable OpenClaw Hosted Push Relay?弹窗背后的能力。
apps/ios/Sources/Push/PushRegistrationManager.swift 负责根据构建配置生成 Gateway 注册负载并维护注册状态;APNs 令牌等敏感信息由 apps/ios/Sources/Push/PushRelayKeychainStore.swift 存入钥匙串。锁屏通知在 App 被系统挂起时送达,点击通知后 App 重新唤起并重连 Gateway,实现“推送唤醒”——这就是 Push Wake 演示验证的核心链路;通知打开时还会把BackgroundAliveBeacon等后台存活信标状态一并带回(见 apps/ios/Sources/Push/BackgroundAliveBeacon.swift)。
8. 设备权限与隐私(Device Permissions)
OpenClaw不在引导期展示聚合权限页。可选权限按“用到才申请”的时机触发:评审者调用相关功能,或在 Settings 中对某项权限点击Continue时,立即弹出对应的原生 iOS 授权弹窗,中间没有额外的 OpenClaw 对话框或延迟动作。
8.1 权限检查清单
- 点击
Settings→Permissions。 - 确认以下常驻控制项可用:
Camera(相机)Location(定位),含Off、While Using、Always三档Keep Awake(保持唤醒)
- 确认始终可见的
Apple Health区块将集成标识为Apple Health Summaries。 - 展开
Privacy & Access,确认以下控制项在未被申请过时显示Continue:Contacts(通讯录)Photos(照片)Calendar (Add Events)(日历-添加事件)Calendar (View Events)(日历-查看事件)Reminders(提醒事项)
- 对任意未申请过的权限点击
Continue,确认对应的原生 iOS 授权弹窗立即出现,然后在系统弹窗中做出选择。
若评审设备此前已对该权限做过决定,则对应行显示当前状态或管理操作,而不再显示Continue。
实现细节:iOS 端将各系统框架(Contacts / Photos / EventKit / HealthKit)的原生授权状态统一归一为granted / limited / notRequested / denied四种语义(见 apps/ios/Sources/Permissions/DevicePermissions.swift)。例如 EventKit 的writeOnly(仅添加)会映射为limited,用于区分“只能添加事件”与“完整读写”;Calendar (Add Events)与Calendar (View Events)分别对应写入与读取两种授权语义。请求动作由 apps/ios/Sources/Permissions/PermissionRequestBridge.swift 与 apps/ios/Sources/Permissions/EventKitPermissionRequester.swift 承接,做到“点击 Continue → 立即弹出系统弹窗”。
8.2 可选的 Apple Health 摘要
Apple Health Summaries默认关闭。在Settings→Permissions中,始终可见的Apple Health区块会标明该功能及其使用的数据类型。点击Enable Apple Health Summaries会打开 Apple 的 Health 授权面板。
OpenClaw 仅向 Apple Health 申请只读访问以下数据:步数(steps)、睡眠(sleep)、静息心率(resting heart rate)、体能训练(workouts)。聚合在设备端完成,只有用户主动请求的today摘要会经用户自己的 Gateway 与所配置的 AI 提供方发出;不支持单个样本、来源、元数据、临床记录、后台摄取或写入。Gateway 侧还额外要求health.summary出现在gateway.nodes.allowCommands中,才会放行该命令。
两点重要声明:
- 应用不会因为查询结果为空就推断读取授权状态——HealthKit 刻意让“被拒绝”与“无数据”在读取侧无法区分,因此 OpenClaw 只记录用户显式的共享选择(见 apps/ios/Sources/Health/HealthSummaryService.swift 中
health.summary.enabled开关与HealthAuthorization.enable()的注释逻辑); - 该功能仅用于个人健康与健身摘要,不用于诊断或医疗建议。
实现细节:健康模块在 apps/ios/Sources/Health/HealthSummaryService.swift。HealthAuthorization.readTypes恰好对应上述四类只读类型;聚合逻辑值得注意:
- 步数使用
HKStatisticsQueryDescriptor的.cumulativeSum; - 静息心率使用
.discreteAverage(单位count/min); - 睡眠通过
HKSampleQueryDescriptor读取sleepAnalysis分类样本,只保留HKCategoryValueSleepAnalysis的入睡区间,并调用mergedDuration合并重叠区间,确保同一分钟在离机聚合结果中不会被重复计数; - 体能训练统计条数与总时长,且只统计“今天零点到当前时刻”(
dateRange返回DateInterval(start: 今天零点, end: now))。
9. 分享扩展(Share Sheet)
- 打开 Safari,访问
https://example.com。 - 点击 Safari 工具栏的
More按钮,再点击Share。 - 在分享面板中点击
OpenClaw。 - 确认 OpenClaw 分享扩展出现,并显示
Edit text, then tap Send.与Send to OpenClaw。 - 点击
Send to OpenClaw。
预期结果:OpenClaw 分享扩展将分享的 Safari 页面发送到 live review Gateway,并显示Sent to OpenClaw.。返回 OpenClaw Chat 即可看到分享的Example Domain页面。
实现细节:分享扩展是 iOS App Extension 能力,把网页内容(URL/标题等)封装后经 Gateway 会话送入助手,属于“任意来源内容收口到 OpenClaw 处理”的典型入口。此环节同时验证了 App Extension 与主 App 之间的数据/会话衔接。
10. 附录:验收清单速查
| 模块 | 核心验证点 | 预期结果 |
|---|---|---|
| 设置接入 | 设置码粘贴 → Apply → Trust | Connected,Control显示Gateway Online |
| 通知启用 | Settings → Approvals → Notifications | 显示Enabled |
| Chat | Start Apple review checklist. | 助手回复演示列表 |
| 审批 | Run the approval demo.+Allow Once | 弹出Exec approval required,Chat 回复The approval demo completed. |
| Talk | Start Talk+ 语音指令 | 语音回复,Stop Talk可结束 |
| Talk 后台 | 后台/锁屏继续对话 | 语音持续,重开 App 仍可Stop Talk |
| Gateway 状态 | Control → Instances | Gateway online,agent 与 iPhone 均在列 |
| Live Activity | Settings → Reconnect 后立即锁屏 | 锁屏/灵动岛显示Connecting.../Reconnecting... |
| 推送通知 | Start push notification demo.后锁屏 | 锁屏收到OpenClaw App Review push notification demo |
| 推送唤醒 | Start push wake demo.后锁屏 | 约 10 秒收到通知,点开后重连并回复The push wake and node status demo completed. |
| 权限 | Settings → Permissions 逐项Continue | 立即弹出对应原生 iOS 授权弹窗 |
| Apple Health | 开启 Summaries 并授权只读 | 设备端聚合today摘要,经 Gateway 发出 |
| Share Sheet | Safari 分享到 OpenClaw | 扩展显示Sent to OpenClaw.,Chat 出现Example Domain |
验收纪律:整个流程中,凡要求“切到后台/锁屏”的环节(Talk 后台、推送通知、推送唤醒、Live Activity),都必须返回主屏幕或锁屏而不是强制退出 App——后台挂起(suspended)状态正是这些演示所要验证的 iOS 能力边界。
参考源码位置
- 验收文档:apps/ios/APP-REVIEW-NOTES.md
- 引导接入:apps/ios/Sources/Onboarding/OnboardingWizardView.swift、apps/ios/Sources/Onboarding/OnboardingWizardConnectionSections.swift
- 网关信任:apps/ios/Sources/Gateway/GatewayTrustPromptAlert.swift
- Live Activity:apps/ios/Sources/LiveActivity/LiveActivityManager.swift、apps/ios/Sources/LiveActivity/OpenClawActivityAttributes.swift、apps/ios/Sources/LiveActivity/VoiceLiveActivityCoordinator.swift
- 推送:apps/ios/Sources/Push/PushRegistrationManager.swift、apps/ios/Sources/Push/PushBuildConfig.swift、apps/ios/Sources/Push/PushRelayClient.swift、apps/ios/Sources/Push/ExecApprovalNotificationBridge.swift
- 权限:apps/ios/Sources/Permissions/DevicePermissions.swift、apps/ios/Sources/Permissions/PermissionRequestBridge.swift
- 健康:apps/ios/Sources/Health/HealthSummaryService.swift
- 语音:apps/ios/Sources/Voice
【免费下载链接】openclawThe AI that really does things. Any OS. Any Platform. The lobster way. 🦞项目地址: https://gitcode.com/GitHub_Trending/cl/openclaw
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考