Design 入门 22m
设计高质量的 Siri 媒体交互
Design high quality Siri media interactions
2020年6月24日
一句话判断
如果你的 App 有音频或视频内容,Siri Media Intents 让用户可以说”嘿 Siri,用 XX 播放周杰伦”——这场 Session 重点讲的是交互设计而非代码实现。
这场 Session 讲了什么
Session 从用户体验设计的角度讲解了如何让 Siri 媒体交互更加自然和高效。重点不是 API 细节,而是如何设计你的 App 在 Siri 中的交互模式。
核心内容涵盖三个层面:首先是意图识别——用户说”播放摇滚乐”时,你的 App 应该如何理解并响应。其次是结果呈现——Siri 展示搜索结果时应该显示什么信息(专辑封面、歌曲名、艺术家)。最后是错误处理——当用户请求的内容不存在时,如何优雅地降级(建议相似内容而非直接说”找不到”)。
Session 还介绍了媒体交互的四种模式:按名称播放(“播放《晴天》”)、按类型播放(“播放流行音乐”)、按艺术家播放(“播放周杰伦的歌”)、以及浏览发现(“播放一些轻松的音乐”)。每种模式有不同的设计考量。
值得深挖的点
模糊匹配与容错。 用户说”播放稻香”时可能发音不准,或者你的曲库中写的是”稻香 (Live版)“。Siri 的媒体交互需要模糊匹配能力——先在你的 App 中搜索,如果没有精确结果再尝试模糊搜索。这种”先精确后模糊”的策略比直接报错体验好得多。
上下文记忆与连续交互。 “播放周杰伦的歌” → “下一首” → “音量大一点”。用户期望 Siri 记住当前的播放上下文。你的 Intent Handler 需要维护这个状态,确保连续的语音命令能正确关联到当前的播放会话。
代码片段
import Intents
// 处理媒体播放意图
class PlayMediaIntentHandler: NSObject, INPlayMediaIntentHandling {
func handle(intent: INPlayMediaIntent, completion: @escaping (INPlayMediaIntentResponse) -> Void) {
// 解析用户请求的媒体内容
let mediaItems = resolveMediaItems(from: intent)
if mediaItems.isEmpty {
// 没有找到匹配内容,返回降级响应
let response = INPlayMediaIntentResponse(
code: .failureNoContentViewable,
userActivity: nil
)
completion(response)
return
}
// 开始播放
playbackManager.play(mediaItems)
let response = INPlayMediaIntentResponse(
code: .success,
userActivity: nil
)
// 设置播放队列信息
response.nowPlayingInfo = buildNowPlayingInfo(for: mediaItems.first!)
completion(response)
}
}
// 构建 Now Playing 信息
func buildNowPlayingInfo(for item: MediaItem) -> [String: Any] {
return [
MPNowPlayingInfoMediaTypeKey: MPNowPlayingInfoMediaType.audio.rawValue,
MPMediaItemPropertyTitle: item.title,
MPMediaItemPropertyArtist: item.artist,
MPMediaItemPropertyAlbumTitle: item.album,
MPMediaItemPropertyPlaybackDuration: item.duration,
MPNowPlayingInfoPropertyElapsedPlaybackTime: 0
]
}
// 在 Info.plist 中注册支持的媒体类型
// 让 Siri 知道你的 App 可以处理哪些媒体请求
// INMediaSupportedIntentMediaTypes:
// - music (音乐)
// - podcasts (播客)
// - audiobooks (有声书)
// - radio (广播)
最佳实践
- 为常见请求提供快速响应路径。 “播放我的歌单”是最常见的请求,优化这条路径的响应速度。
- 找不到内容时推荐替代项。 “没找到’晴天’,要播放’七里香’吗?“比”找不到”体验好得多。
- Now Playing 信息要完整。 标题、艺术家、专辑、时长、封面——这些信息会显示在锁屏和控制中心。
- 测试各种语音表达方式。 用户可能说”播放摇滚”、也可能说”来点摇滚乐”或”我想听摇滚”。确保各种表达都能正确理解。
还有什么值得关注
- Siri 媒体交互现在支持 HomePod,App 可以通过 AirPlay 在 HomePod 上播放
- INMediaSearch 是新的搜索 Intent,支持更复杂的搜索条件
- 媒体交互支持”播放列表中的第 N 首”这种精确索引
- 设计建议中强调了”最少必要信息”原则——只问用户最关键的选择
WWDC 2020