iOS AppIntent与Siri:如何在初始请求中传递参数?
解决方案
一、AppIntents 完全支持直接传递参数
你提到的「Siri逐步询问参数」是默认行为,但通过配置Intent的参数属性,完全可以让Siri在初始请求中直接解析并传递参数(比如书名、作者)。
具体实现步骤:
- 定义一个遵循
AppIntent协议的自定义Intent,将书名、作者设为必填参数 - 给参数添加
@Parameter属性,并配置displayName和description,帮助Siri理解参数含义 - 可选:如果参数属于特定实体(比如书籍、作者),可以使用
EntityProperty或自定义Entity类型,提升Siri的识别准确率
示例代码:
import AppIntents struct AddBookIntent: AppIntent { static var title: LocalizedStringResource = "添加书籍" @Parameter(title: "书名", description: "要添加的书籍名称") var bookTitle: String @Parameter(title: "作者", description: "书籍的作者姓名") var authorName: String func perform() async throws -> some IntentResult { // 这里执行添加书籍的逻辑,比如存入本地数据库或同步到后端 print("添加书籍:\(bookTitle),作者:\(authorName)") return .result() } }
配置完成后,用户可以直接说「嘿Siri,添加一本名为《Atomic Habits》、作者为James Clear的书籍」,Siri会自动解析参数并调用你的Intent,无需分步询问。
二、关于SiriKit的替代方案
如果需要更底层的控制,SiriKit的INAddMediaIntent(媒体类)或自定义Intent也能实现类似功能,但AppIntents是苹果在iOS 16+推出的简化方案,语法更简洁,集成成本更低,优先推荐使用AppIntents。
三、快捷指令与Siri的结合
你创建的快捷指令是支持Siri触发的,只需确保:
- 快捷指令中设置了可接收的参数(比如「书名」「作者」变量)
- 在快捷指令的「设置」中开启「在Siri中显示」,并录制对应的语音触发短语
- 当用户说出包含参数的触发语时,Siri会自动将参数映射到快捷指令的变量中
内容的提问来源于stack exchange,提问作者iVentis
相关产品推荐
相关产品推荐

