Spotlight your app with App Shortcuts
System & Services 进阶 20m

用 App Shortcuts 让你的 app 脱颖而出

Spotlight your app with App Shortcuts

2023年6月5日

在 Apple 官方观看视频

一句话判断

App Shortcuts 是零配置的快捷操作,装上 app 就能用,iOS 17 让它更进一步。

这场 Session 讲了什么

App Shortcuts 基于 App Intents 框架,让你的 app 功能可以在安装后立即可用——无需用户手动设置。它们可以通过 Siri 语音触发、在 Spotlight 搜索结果中展示,也可以在 Shortcuts app 中参与更复杂的自动化流程。

实现一个 App Shortcut 分为两步:定义 App Intent(描述具体任务)和定义 App Shortcut(将 intent 与 Siri 触发短语、标题和图标关联)。Session 详细演示了如何创建一个简单的”创建待办列表”快捷操作,以及更高级的”总结待办列表”功能——后者涉及 Entity(实体)和 Query(查询)两个核心概念。

Entity 代表 app 中用户会引用的概念(如待办列表),Query 帮助系统在运行时找到相关实体。通过实现 suggestedEntities,你可以控制哪些实体出现在 Spotlight 和 Shortcuts 的建议中。

值得深挖的点

Entity 的 display representation 需要包含图片或符号,否则该实体不会出现在 Spotlight 或 Shortcuts 的顶层。这是一个容易被忽视但影响发现性的细节。

另一个要点是 shortcut phrases 的设计。你可以为每个 App Shortcut 提供多个触发短语,增加被 Siri 识别的机会。短语设计应该自然口语化,避免过于技术化的表述。

代码片段

// 定义 App Intent
struct CreateListIntent: AppIntent {
    static var title: LocalizedStringResource = "Create List"
    
    @Parameter(title: "List Name")
    var listName: String
    
    func perform() async throws -> some IntentResult {
        // 创建待办列表
        return .result()
    }
}

// 定义 Entity 和 Query
struct TodoList: AppEntity {
    static var typeDisplayRepresentation = TypeDisplayRepresentation(name: "Todo List")
    var displayRepresentation: DisplayRepresentation {
        DisplayRepresentation(title: "\(name)")
    }
    static var defaultQuery = TodoListQuery()
    
    var id: String
    var name: String
}

// 注册 App Shortcut
struct DemoShortcuts: AppShortcutsProvider {
    static var appShortcuts: [AppShortcut] {
        AppShortcut(
            intent: CreateListIntent(),
            phrases: [
                "Create a list in \(.applicationName)",
                "Make a new list in \(.applicationName)"
            ],
            shortTitle: "Create List",
            systemImageName: "list.bullet"
        )
    }
}

最佳实践

  • 为 Entity 提供 image 或 symbol,确保在 Spotlight 中可见
  • 提供多个触发短语以提高 Siri 识别率
  • 实现 suggestedEntities 控制推荐内容
  • 保持 intent 的 perform() 方法简洁高效
  • 使用 @Parameter 声明输入参数,享受类型安全的好处

还有什么值得关注

  • App Shortcuts 在 iOS 17 中扩展到了更多 Apple 设备
  • 通过 Spotlight 的发现性在 iOS 17 中得到了显著提升
  • App Intents 框架是 Swift only,充分利用了 Swift 的类型系统
WWDC 2023