开始使用助眠快捷指令

助眠可以帮助用户方便地聆听舒缓的音效与音频故事,或者进行冥想练习,以便顺利入睡,为新的一天做好准备。你可以为你的 App 启用助眠快捷指令,提供调取这些功能的快捷方式,确保用户所需的各种助眠手段都触手可及。

认识助眠快捷指令

作为 iOS 14“睡眠”体验的一部分,用户可以在《健康》App 的睡眠设置中创建助眠快捷指令,在启用助眠时的锁定屏幕上添加特定快捷指令。用户也可以在《快捷指令》App 的睡眠模式中对这些快捷指令进行设置,睡眠模式会在用户添加首个助眠快捷指令后出现。用户可以在 App 内任意快捷指令的细节视图中开启“在睡眠模式下显示”开关,在睡眠模式中添加已有的或新的快捷指令。

你可以在助眠设置流程中使用助眠 API 展示 App 的 Intent(意图),让用户更方便地发现可用于睡眠模式的相关快捷指令操作。

在示例项目中探索助眠快捷指令

如果你想进一步了解如何将 App 意图展示为助眠快捷指令,可参阅 WWDC20 视频《集成你的 app 和 Wind Down》。这段视频提供了此功能的概览,并包括一个示例代码项目,帮助你入门。你可以在示例代码项目中探索实现,并理解如何把新功能集成到已有的项目中。


注意:除 Xcode 和示例代码项目外,你需要使用 iPhone 或 iPod touch 来探索与测试完整的睡眠体验。查看示例项目的“README”文档,了解更多设置操作。在测试设备上首次构建并运行示例项目后,你的示例快捷指令会在睡眠设置时出现在《健康》App 里。


在项目内,在名为“SoundLibraryDataManager+Intents.swift”的文件里查看功能“updateBedtimeShortcutSuggestions”。这项功能定义了用户可能会播放的精选音景的快捷指令,并把它们添加到“INVoiceShortcutCenter”里,以便系统在《健康》App 中及其它合适的时候提供这些快捷指令。

你可以这样向意图添加可用性信息:

playMediaIntent.shortcutAvailability = .sleepMusic

这会显示出助眠快捷指令中的快捷指令的类别。

对于一款提供睡眠音景、睡前音乐和放松噪音的 App 来说,.sleepMusic 这个值是合适的。出现这个值时,该意图会在睡眠体验设置中出现在助眠的音乐区。

你可以进一步了解这个特定的值,或者在 Xcode 的内嵌文档中发现其它可用的“Wind Down”的值:

  1. 在示例代码中选中 sleepMusic
  2. 按住 Control 点按或右键点按并在上下文菜单中选择“Show Quick Help”,进一步了解该值。
  3. 选择“INShortcutAvailabilityOptions”文档页(Swift 和 Objective-C 均可用)预览可用性选项。

其它意图的值包括:

  • sleepMindfulness
  • sleepJournaling
  • sleepPodcasts
  • sleepReading
  • sleepWrapUpYourDay
  • sleepYogaAndStretching

要查看意图在不同类别内如何显示,你可以把 .sleepMusic 替换成上面的值之一,然后再次运行你的 App。在你构建并运行示例 App 时,它将使用下面这行代码,把这些更新的意图捐献(Donate)给系统: INVoiceShortcutCenter.shared.setShortcutSuggestions(newMediaIntents)

现在,当你再次启动《健康》App 和睡眠设置界面,该意图就会被列在你所选择的新类别下面了。记住:为你自己的 App 提供助眠快捷指令选项时,要选择最适合你捐献的意图的值。(如果你在构建旨在一天中早些时候进行的体验,比如激动人心的视频游戏,那么你可能就完全不需要为睡眠体验捐献此类意图。)

探索意图捐献 在示例项目内,你还可以进一步了解 App 可以怎样捐献意图。在“TrackTableViewController.swift”中探索 play(tracks:) 功能。每次使用这款示例 App 直接播放媒体文件时,这款 App 都会调用此功能。

PlayRequest 初始化器使用 .sleepMedia 可用性选项创建一个意图。然后 donatePlayRequestToSystem() 会向系统捐献一个带有该意图的 INInteraction

swift
private func play(tracks: [Track]?) {
        let request = PlayRequest(container: libraryContainer, tracks: tracks)
        SoundLibraryDataManager.shared.donatePlayRequestToSystem(request)
        
        if let itemsToPlay = AudioPlaybackManager.shared.resolveItems(for: request) {
            AudioPlaybackManager.shared.play(itemsToPlay)
        }
    }

注意:在示例项目内访问 BedtimeIntents目标,你会注意到 INPlayMediaIntent 也在“Supported Intents”区内被定义。

Donating Shortcuts

制作你的专属代码 现在你已经理解示例 App 如何为助眠和睡眠体验提供意图,就可以继续对其进行修改与试验了。例如,你可以使用“Media Player”框架播放资料库里的任何内容,而不仅是示例项目内的音频文件;你还可以为其它助眠活动添加意图,比如服药和刷牙等活动的任务清单。不要忘记,把所有新的意图类型列入项目的“Supported Intents”区。

Creating an Intents App Extension

深入研究设计

在为助眠快捷指令创建意图时,要考虑不同用户的设备将如何显示这些项目。大多数人都会在锁屏界面查看你的快捷指令,该界面同时还会有若干其它快捷指令。在这种情况下,在为意图命名时要做到言简意赅。可以把它想象成一句简短的说明:运行此快捷指令时会发生什么?为什么用户需要把它加入自己的睡前程序?

HIG - iOS - Shortcuts and Suggestions

祝你晚安

你在为助眠快捷指令提供高质量的意图时,它会鼓励用户将你的 App 添加到他们的睡眠程序中。一旦得到实现,这些意图也可以与小组件、智能叠放和《快捷指令》App 等其它机器学习技术协同工作,做到更加准确的呈现,为你的 App 推广更好的用法,并提升用户每日——与每夜——的生活质量。

Learn more about integrating your app with Wind Down

Adding Shortcuts for Wind Down

Creating an Intents App Extension

Adding User Interactivity with Siri Shortcuts and the Shortcuts App

INShortcutAvailabilityOptions

Feature your actions in the Shortcuts app

Design for intelligence

Siri, Shortcuts, and SiriKit