苹果正式推出集成Siri 和 Apple Intelligence新框架:App Intents ,允许开发者在 iOS 18.2+、macOS 15.2+ 等平台上,让其应用的屏幕内容可被 Siri 和 Apple Intelligence 访问读取并执行相应的操作。
App Intents 可以让开发者把应用的功能和内容更深地融入系统体验中,比如 Siri、Spotlight 搜索、快捷指令(Shortcuts)和小组件(Widgets)。通过这个框架,用户能够更轻松地访问应用的核心功能,而 Siri 也可以更智能地帮助用户。
使用 App Intents 后,你的应用可以做到以下几点:
- 通过 Siri 直接控制应用:用户可以对 Siri 说“查找我的航班”或“添加待办事项”等命令,Siri 会直接与应用交互。
- 让应用内容出现在 Spotlight 搜索中:用户无需打开应用就可以在 Spotlight 搜索到内容,比如从笔记应用中找到某个笔记内容。
- 支持快捷指令和自动化操作:用户可以创建快捷指令,在特定情境下自动执行应用操作。
- 使用硬件按钮触发操作:支持用户通过 iPhone 或 Apple Watch 上的按钮直接启动特定功能。
App Intents 的基本组成部分
- App Intent(应用意图):定义应用中用户可以触发的具体操作,比如“打开文档”或“发送消息”。当用户通过 Siri、快捷指令或 Spotlight 搜索时,这些意图可以被直接调用。
- App Entity(应用实体):表示应用中的具体内容,比如照片、联系人或文件。通过定义 App Entity,用户可以在 Spotlight 或 Siri 中搜索并访问这些内容。比如,一个食谱应用可以定义“食谱”实体,用户可以通过 Siri 搜索具体的菜谱。
- App Enum(应用选项):用于定义一组选项,例如照片应用中的“相册分类”或任务管理应用中的“任务状态”。这样,Siri 在识别用户请求时可以更好地理解内容的上下文。
使用快捷指令和自动化功能
App Intents 允许用户通过快捷指令应用(Shortcuts)设置自动化操作。例如,用户可以创建一个“早上好”快捷指令,让 Siri 在早上自动打开新闻应用,显示当天的新闻。
支持硬件交互
App Intents 还支持通过 iPhone 和 Apple Watch 上的物理按钮直接启动应用操作。例如,在 iPhone 的操作按钮或 Apple Watch 上,用户可以设置快捷方式,比如“一键打开相机”或“启动健身追踪”。
App Intents 的实际应用场景
举个更具体的例子,假设你开发了一款旅行助手应用:
- 查询航班信息:通过 App Intent 定义“查看航班”操作,用户可以对 Siri 说“查找我的航班”,Siri 会直接从应用中提取相关信息。
- Spotlight 搜索支持:用户在 Spotlight 中搜索航班号,就可以找到对应的航班信息,甚至不用打开应用。
- 快捷指令支持:用户可以设置一个快捷指令,例如“出差模式”,点击一下可以自动显示天气、航班和酒店信息。
- Apple Watch 操作按钮:用户可以设置 Apple Watch 的操作按钮,快速访问当前航班信息或行程安排。
让应用内容与 Siri 和 Apple Intelligence 交互
苹果同时正式推出全新的集成 API ,通过这项新功能,当用户在应用中查看某些内容(例如文档、图片或网页)时,可以直接使用 Siri 询问内容的具体信息或进行操作。也就是Siri 会时刻查看你的应用屏幕信息,读取你的屏幕内容,随时听从你的召唤来进行操作。
例如,用户在阅读一个文档时,可以对 Siri 说“这份文件的主要内容是什么?”然后 Siri 可以通过开发者提供的内容结构回答这个问题。
视频播放器
00:00
10:11
使用场景举例
假设有一个文档阅读应用和一个邮件客户端,用户在这两个应用中都可以直接通过 Siri 获取帮助:
- 文档阅读应用:用户正在阅读一份报告,他可以问 Siri“这份报告的结论是什么?” Siri 会读取应用提供的文档内容,并总结结论。
- 邮件客户端:用户收到一封长邮件,但没有时间阅读,可以对 Siri 说“总结一下这封邮件的内容。” Siri 会通过应用的邮件内容为用户提供简要的概述。
通过为 Siri 和 Apple Intelligence 提供应用的屏幕内容,开发者可以提升用户体验,使他们能够更直观地使用 Siri 进行查询、获取内容信息和执行操作。此外,这种集成支持第三方服务,使应用在 Apple 的生态系统中更具互动性和便捷性。
如何实现
开发者需要通过 AppEntity
(应用实体)来定义应用内的内容。AppEntity
是一种数据结构,它可以描述特定的内容类型,例如照片、文档或网页链接。创建 AppEntity
后,开发者需要将它与应用的 NSUserActivity
对象关联,使系统可以识别并跟踪这些内容。
例如,开发者在图片查看应用中创建一个表示照片的 AppEntity
,然后将它与用户的“正在查看照片”这个活动关联,这样 Siri 就能理解用户正在查看的具体内容。
使用 Transferable 协议以支持多种内容格式
为了让 Siri 可以将应用内容与其他服务共享或显示,AppEntity
需要符合 Transferable
协议。该协议允许开发者定义内容的多种表示形式(如富文本、纯文本、PDF、图片等)。这样,无论用户是在发送邮件、保存文件,还是需要内容的不同形式,Siri 都可以处理这些请求。
例如,一个邮件应用可以将一封邮件的内容定义为富文本、纯文本和 PDF 三种形式,Siri 可以根据用户的需求选择最合适的格式来显示或分享内容。
集成操作至 Siri 和 Apple Intelligence
苹果还为开发者提供了将应用操作和内容与 Siri 和 Apple Intelligence 集成的方式,从而让用户通过 Siri 更便捷地与应用交互。
也就是Siri 和 Apple Intelligence 不仅可以读取屏幕信息,还可以根据用户的要求来和应用互动,执行相应的操作和完成任务。
视频播放器
00:00
07:34
使用特定领域的助手架构(Assistant Schema)实现功能
Apple 提供了多个助手架构(Assistant Schema),每个架构都对应不同的内容领域(例如浏览器、文档阅读器、文件管理等)。这些架构帮助 Siri 根据内容的类型提供定制化的响应。例如:
- 浏览器架构:如果一个应用是浏览器,开发者可以使用
.browser.tab
这个架构,用户可以询问 Siri 有关当前网页的问题。 - 文件管理架构:对于文件管理应用,开发者可以使用
.files.file
架构,用户可以请求 Siri 总结文件内容。 - 照片架构:对于照片应用,使用
.photos.asset
架构,用户可以让 Siri 回答关于照片中的对象问题(例如描述照片中的内容)。
通过使用这些助手架构,开发者可以确保 Siri 能够理解不同内容领域的请求,提供更加智能和上下文相关的回答。
什么是助手架构(Assistant Schema)?
助手架构可以理解为一组标准化的“模板”,Apple 设计这些模板是为了帮助 Siri 识别应用的具体功能。比如,如果你的应用是图片管理类的,那么使用 photos.openAsset
这样的架构,可以让 Siri 理解你要展示一张照片。
关键组成部分:
- AppIntent:定义用户可以通过 Siri 触发的功能(比如打开一张照片)。
- AppEntity:表示应用中的特定内容(比如一张具体的照片或一个文件)。
- AppEnum:用于定义可选项(比如图片分类的不同选项)。
如何开始集成 Siri 和 Apple Intelligence?
要开始,开发者需要创建符合这些助手架构的代码。Apple 提供了一些 Swift 代码的“快捷方式”,称为“宏”,来帮助开发者快速生成符合架构要求的代码。
举个例子,如果你的应用中有“查看图片”这一功能,可以用以下代码告诉 Siri 这是一个照片查看的功能:
@AssistantIntent(schema: .photos.openAsset)<br/>struct<span> </span>OpenAssetIntent:<span> </span>AppIntent<span> </span>{<br/>var<span> </span>target:<span> </span>AssetEntity<span> </span>// 表示具体的图片对象<br/>// 其他代码...<br/>}<br/>
这段代码会生成“查看图片”的意图,使 Siri 可以识别到应用中的“查看图片”功能,并自动帮用户打开图片。
满足助手架构的要求
每种架构都有自己的规则,必须遵守。常见规则包括:
- 不允许添加额外的必填参数:比如,如果“查看图片”只需要一个图片 ID,不能强制用户提供额外的信息。
- 可选参数只能在快捷指令中使用:这意味着一些扩展的选项(比如图片标题或描述)只能在快捷指令应用中看到,而不会影响 Siri 的基本操作。
这样做是为了确保 Siri 能流畅地理解并执行应用的操作。
创建应用意图并符合架构
要创建一个应用意图并符合架构,开发者可以按照以下步骤操作:
- 确定应用的功能领域:每个应用意图都有自己对应的功能领域(例如,照片、文件、邮件等)。
- 在 Xcode 中创建新的 Swift 文件:使用代码补全工具,选择合适的架构,例如,输入
photos_
就会显示与照片领域相关的所有操作,比如openAsset
。 - 使用宏来符合架构:添加
@AssistantIntent(schema:)
宏来告诉 Siri 这是一个特定功能,例如打开照片。 - 构建和调试:通过编译代码,确保没有架构不匹配的错误。
这样 Siri 就能理解你的应用意图,并在执行过程中不出错。
确保内容和选项符合架构
在一些操作中,应用可能有特定内容或选项。例如,图片应用中有“照片”这种内容(AppEntity),还可能有“分类”这样的选项(AppEnum)。如果这些内容和选项需要用在 Siri 操作中,也需要符合架构。
例如,定义照片实体可以这样做:
@AssistantEntity(schema: .photos.asset)<br/>struct<span> </span>AssetEntity:<span> </span>IndexedEntity<span> </span>{<br/>var<span> </span>id:<span> </span>String<span> </span>// 照片的唯一标识<br/>var<span> </span>title:<span> </span>String?<span> </span>// 照片的标题<br/>// 其他属性...<br/>}<br/>
这样,Siri 可以识别到“照片”这个内容类型,并理解它的属性(比如标题、分类等),从而能更好地回答用户的问题。
更新和迁移现有意图
如果你的应用已经有一些现成的意图,更新时需要特别注意,因为用户可能已经在快捷指令里用了这些意图。要避免影响用户的使用体验,可以为新意图设置 isAssistantOnly = true
,让它只被 Siri 识别,而不显示在快捷指令列表中。
例如:
@AssistantIntent(schema: .photos.createAssets)<br/>struct<span> </span>CreateAssetsIntent:<span> </span>AppIntent<span> </span>{<br/>static<span> </span>let<span> </span>isAssistantOnly:<span> </span>Bool<span> </span>=<span> </span>true<span> </span>// 仅供 Siri 使用<br/>// 其他代码...<br/>}<br/>
这样可以确保用户的快捷指令不会因更新意图而被中断。
通过集成 Siri 和 Apple Intelligence,应用的操作变得更加自动化,用户可以用语音轻松控制应用。开发者只需要定义好符合 Siri 要求的操作和内容,就可以使 Siri 识别并执行这些操作,让用户体验到更智能、便捷的服务。
App Intents框架文档:https://developer.apple.com/documentation/appintents
评论区