SiriKit 和快捷指令的新特性
What's new in SiriKit and Shortcuts
2020年6月25日
一句话判断
Siri 快捷指令在 2020 年的更新重点是”可发现性”——你的 App 的快捷指令现在可以自动出现在 Siri 建议中,用户不需要手动添加就能使用。
这场 Session 讲了什么
SiriKit 和 Shortcuts 在 2020 年有几个重要更新。最核心的是 Intent 的可发现性改进:系统会根据用户的使用模式自动建议相关的快捷指令。这意味着即使你的 App 没有被用户显式配置到 Shortcuts 中,系统也可能在合适的时机建议用户使用你的 Intent。
新增了几个 Intent 类型:INSearchForMediaIntent(搜索媒体内容)、INAddMediaIntent(添加到播放列表)、INUpdateMediaAffinityIntent(标记喜欢/不喜欢)。这些 Intent 丰富了媒体 App 的 Siri 集成能力。
Shortcuts App 本身也有了重大更新——新的快捷指令动作构建方式、更好的变量处理、以及与 Widget 的集成(快捷指令可以直接通过 Widget 触发)。
值得深挖的点
自动建议的工作原理。 系统通过分析你的 App 的 Intent Donation(捐赠)来学习用户的使用模式。每次用户在 App 中执行某个操作时,你应该通过 INInteraction.donate() 告诉系统。系统积累足够的捐赠数据后,会在合适的场景(锁屏、搜索、Siri 面板)自动建议用户使用这个快捷指令。
Intent Donation 的策略。 不是所有操作都值得捐赠。Session 建议只捐赠那些用户经常重复执行、且适合语音触发的操作。比如”播放我的跑步歌单”值得捐赠,但”修改账号设置”就不值得。
代码片段
import Intents
// 捐赠 Intent——告诉系统用户执行了什么操作
func donatePlayPlaylistIntent(playlist: Playlist) {
let intent = INPlayMediaIntent()
intent.mediaItems = [
INMediaItem(
identifier: playlist.id,
title: playlist.name,
type: .playlist,
artwork: INImage(imageData: playlist.artworkData)
)
]
let interaction = INInteraction(intent: intent, response: nil)
interaction.donate { error in
if let error = error {
print("Intent 捐赠失败: \(error)")
}
}
}
// 新增的搜索媒体 Intent
class SearchMediaIntentHandler: NSObject, INSearchForMediaIntentHandling {
func handle(
intent: INSearchForMediaIntent,
completion: @escaping (INSearchForMediaIntentResponse) -> Void
) {
guard let searchTerm = intent.mediaSearch?.mediaName else {
completion(INSearchForMediaIntentResponse(code: .failure, userActivity: nil))
return
}
searchCatalog(query: searchTerm) { results in
let mediaItems = results.map { result in
INMediaItem(
identifier: result.id,
title: result.title,
type: .song,
artwork: INImage(imageData: result.artwork)
)
}
let response = INSearchForMediaIntentResponse(code: .success, userActivity: nil)
response.mediaItems = mediaItems
completion(response)
}
}
}
// 配置 Intent 的交互方式
// 在 Intent 定义中设置支持的交互方式
// - Siri: 语音触发
// - Shortcuts App: 手动添加到快捷指令
// - Suggestions: 自动出现在系统建议中
// 在 Info.plist 中声明支持的 Intent
// INIntentsSupported:
// - INPlayMediaIntent
// - INSearchForMediaIntent
// - INAddMediaIntent
最佳实践
- 在用户执行关键操作时及时捐赠 Intent。 捐赠数据是自动建议的基础,数据越多建议越准确。
- 只捐赠用户可能想重复执行的操作。 一次性操作(如删除账号)不应该捐赠。
- 为 Intent 提供丰富的参数描述。 让用户在 Shortcuts App 中可以看到并编辑参数,增加灵活性。
- 测试 Siri 建议是否正确触发。 在设置中确保你的 App 的 Siri 建议权限已开启。
还有什么值得关注
- Shortcuts 现在支持在 Widget 中触发,配合 WidgetKit 使用
- 新的
INShortcutAPI 可以更方便地创建快捷指令 - Intent 的参数现在支持枚举类型和自定义类型
- Siri 的语音理解能力在 2020 年有所提升,支持更自然的表达方式