Integrate your media app with HomePod
Media & Web 进阶 20m

将你的媒体 app 接入 HomePod

Integrate your media app with HomePod

2023年6月5日

在 Apple 官方观看视频

一句话判断

只要你的 app 支持 SiriKit Media Intents,iOS 17 就能让用户通过 HomePod 直接播放你的内容。

这场 Session 讲了什么

iOS 17 带来了一项重要能力:HomePod 用户可以直接通过 Siri 请求播放安装在其 iPhone 或 iPad 上的媒体 app 内容。当用户向 HomePod 发出播放请求时,HomePod 通过 Wi-Fi 将 SiriKit intent 发送到用户的 iPhone,app 启动并通过 AirPlay 将内容回传到 HomePod。

支持的媒体类型非常广泛,包括音乐、有声读物、播客、电台、冥想等。已有的 SiriKit Media Intents 支持 app 无需任何代码改动即可使用此功能。系统支持 Play、Add 和 Affinity(喜爱/添加到播放列表)请求,语音识别会自动将请求路由到被识别的家庭用户对应的设备。

开发者需要关注几个关键点:app 的 Siri 回调响应应尽可能快(最多十秒),超时后 Siri 会给出通用回应。对于无法播放的情况,应返回具体的错误原因(如不支持的媒体类型、需要登录等),这样 Siri 能给出更有帮助的回复。

值得深挖的点

AirPlay 连接的工作机制值得理解。HomePod 和 iPhone 需要在同一 Wi-Fi 网络上,但不需要物理距离接近——你可以在客厅对着 HomePod 说话,而手机在卧室充电,HomePod 依然可以正常播放。

个人 app 词汇表(Personal App Vocabulary)是另一个重要概念。app 可以通过它告诉系统用户特有的实体,如个人播放列表、已购有声读物、收藏的艺术家等。这大大提高了 Siri 对用户个性化请求的理解准确度。

代码片段

处理播放请求并返回具体错误:

// 返回更具体的错误信息
func handle(intent: INPlayMediaIntent) async -> INPlayMediaMediaItemResolutionResult {
    guard let mediaType = intent.mediaType else {
        // 不支持的媒体类型
        return .unsupported(forReason: .mediaTypeNotSupported)
    }
    
    guard isUserLoggedIn else {
        // 用户未登录
        return .unsupported(forReason: .loginRequired)
    }
    
    // 返回后台播放响应
    return .handleInApp
}

最佳实践

  • 使用 handleInApp 响应而非 continueInApp,后台播放体验更好
  • Siri 回调必须在 10 秒内响应,越快越好
  • 为不支持的情况返回具体错误原因,让 Siri 给出有帮助的回复
  • 实现个人 app 词汇表,提升 Siri 对个性化请求的识别率
  • 确保你的 app 正确处理 AirPlay 音频会话

还有什么值得关注

  • INAddMediaIntentINUpdateMediaAffinityIntent 支持添加和喜爱操作
  • 支持 App Intents 来处理 Media Intents 未覆盖的特定请求
  • 对于新闻、播客或有声读物类 app,注意处理播放速率、快进等控制请求
WWDC 2023