如何在单个Siri快捷指令中同时实现Siri语音响应与自定义UI?
如何同时触发Siri原生语音响应与自定义UI视图?
可以通过在同一个Intent响应实例中同时设置语音参数和userActivity来实现两者的同时触发,完全依赖原生Siri能力,无需第三方方案。具体实现如下:
确认
.intentdefinition配置无误:- 成功响应类型中已添加用于语音播报的自定义参数(如
customIntParameter),并配置好对应的语音模板(例如“还有(customIntParameter)个可用车位”)。 - 保留之前已实现的自定义UI与userActivity关联逻辑。
- 成功响应类型中已添加用于语音播报的自定义参数(如
在Intent Handler的
handle方法中合并两种逻辑:func handle(intent: MyIntent, completion: @escaping (MyIntentResponse) -> Void) { // 1. 准备自定义UI所需的userActivity,携带展示数据 let userActivity = NSUserActivity(activityType: "com.yourapp.MyIntentActivity") userActivity.userInfo = [ "totalSpaces": 100, "occupiedSpaces": 10 ] userActivity.isEligibleForPrediction = true userActivity.persistentIdentifier = NSUserActivityPersistentIdentifier("com.yourapp.MyIntentActivity") // 2. 创建带语音参数的成功响应,再附加userActivity let response = MyIntentResponse.success(customIntParameter: 90) response.userActivity = userActivity // 3. 返回响应,同时触发语音播报和UI展示 completion(response) }
原理说明
- 通过
success(customIntParameter:)创建响应时,Siri会根据.intentdefinition中配置的语音模板,自动填充参数值并生成原生语音播报内容。 - 给响应实例设置
userActivity后,Siri会触发你之前实现的自定义UI加载逻辑,从userActivity中读取数据渲染指定视图。
注意事项
- 自定义UI的解析、渲染逻辑需保持原有正常工作状态,无需额外修改。
- 语音模板必须与响应参数一一对应,确保Siri能生成自然的播报内容。
内容的提问来源于stack exchange,提问作者cokamotka
相关产品推荐
相关产品推荐

