Design high quality Siri media interactions
Design 入门 22m

设计高质量的 Siri 媒体交互

Design high quality Siri media interactions

2020年6月24日

在 Apple 官方观看视频

一句话判断

如果你的 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