Siri 和 SiriKit是啥

是一款内置在苹果 iOS 系统中的人工智能助理软件,“Siri” 一词在挪威语中的意思是“带领你走向胜利的美丽女神”

SiriKit 允许通过 Siri 界面并通过语音命令访问应用程序功能。

SiriKit 能干啥

  • 信息传递
  • 支付相关
  • 控制媒体
  • 车载助手

尽管早在 iPhone 4S 时 Siri 就是 iOS 的一部分,但直到 iOS 10 的推出,Siri 的一些功能才通过 SiriKit 提供给开发者。

SiriKit 的目的是允许 Siri 通过语音命令访问 App 的一些功能。

例如,课表管理App可以允许用户通过语音询问下一节课是什么。

Siri 和 SiriKit

当 App 与 SiriKit 集成时,Siri 会处理:

  • 与用户交流
  • 解释用户话语的含义
  • 处理上下文相关的所有任务

然后 Siri 将用户的请求打包成一个 Intents 并将其传递给 App。App负责验证是否提供了足够的信息来执行任务,并指示 Siri 请求任何缺失的信息。

一旦 Intents 包含所有必要的数据,App 就会执行请求的任务并将结果通知 Siri。这些结果将由 Siri 或 App 呈现。

Siri的信息传递

SiriKit Intents

每个域都允许用户请求一组预定义的任务或意图,以由应用程序完成。意图表示 Siri 知道的特定任务,并且 SiriKit 期望集成的 iOS 应用程序能够执行该任务。

例如,消息域包括发送和搜索消息的意图,而锻炼域包含选择、开始和结束锻炼的意图。当用户通过 Siri 向某个应用发出请求时,该请求会被放入相应类型的 Intent 对象中,并传递给该应用进行处理。

SiriKit Integration 工作原理

Siri integration 扩展作为 Target 添加到 Xcode 中的应用程序项目中。

SiriKit 提供了两种类型的扩展,其中关键的一种是 Intents 扩展。此扩展包含一个 意图处理程序 ,它是 Intents 框架的 INExtension 类的子类,并包含 Siri 在与用户通信过程中调用的方法。

意图处理程序的职责是验证 Siri 是否已从用户那里收集到所有必需的信息,然后执行意图中定义的任务。

当用户通过 Siri 向应用发出请求时,第一个调用的方法是 Intents Extension 中包含的意图处理程序类的*handler(forIntent:)*方法。此方法传递当前意图对象并返回 将用作意图处理程序的 对象的 引用。这可以是意图处理程序类本身,也可以是已配置的为实现一个或多个意图处理协议的另一个类。

Siri 调用处理程序方法后的第一步工作会调用一系列方法来解析与意图关联的参数。

解析意图参数

每个意图类型都与一组参数相关联,这些参数用于提供有关应用程序要执行的任务的详细信息,其中有些是可选的:

发送消息的意图必须包含有效的接收者参数才能发送消息。

另一方面,照片搜索意图的许多参数是可选的:

用户可能想要搜索包含特定人物的照片,而不管照片的拍摄日期如何。

Siri 知道每种意图类型的所有可能参数。Siri 将要求应用程序扩展的意图处理程序通过相应的方法来 解析参数

  • 如果 Siri 已经有一个参数,它将要求意图处理程序验证该参数是否有效。

  • 如果 Siri 还没有参数的值,它将询问意图处理程序是否需要该参数。

  • 如果意图处理程序通知 Siri 该参数不是必需的,则 Siri 不会要求用户提供它。

  • 另一方面,如果需要该参数,Siri 会要求用户提供信息。

一旦参数被解析或指示为不需要,Siri 将调用意图处理程序的确认方法(confirm。

确认方法

confirm 方法在扩展意图处理程序中实现,并在所有意图参数都已解析后由 Siri 调用。如果confirm 方法报告就绪状态,Siri 会调用处理方法(handle。

处理方法

处理方法 是执行与意图相关的活动的地方。任务完成后,会将响应传递给 Siri。响应的形式将取决于所执行活动的类型。

照片搜索活动将返回匹配照片的数量,而发送消息活动将指示消息是否发送成功。

handle 方法也可能返回continueInApp响应。这告诉 Siri 任务的其余部分将在主应用程序中执行。收到此响应后,Siri 将启动 App,并传入一个 NSUserActivity 对象。

NSUserActivity 是一个可以保存和恢复应用程序状态的类。

在 iOS 10 及更高版本中,NSUserActivity 类有一个额外的属性,允许 NSInteraction 对象与应用程序状态一起存储。Siri 使用这种属性来存储会话的 NSInteraction 对象并将其传递给主 iOS 应用程序。

例如,照片搜索意图需要使用continueInApp响应和用户活动对象,以便可以将搜索期间找到的照片呈现给用户(SiriKit 目前不提供一种机制来显示来自照片搜索意图的图像Siri 用户界面)。

一个意图处理程序类可能包含多个 handle 方法来处理不同的意图类型。

ToDo

  1. + Capability Siri (需要开发者账户

  2. Info.plist Privacy – Siri Usage Description

  3. 调用 INPreferences 类的*requestSiriAuthorization()*类方法 应该在应用程序第一次运行时进行此调用,不仅可以获取授权,还可以让用户了解应用程序包含 Siri 支持 scenePhase onChange()

  4. 将 Intents 扩展添加到准备开始 SiriKit 集成的项目中将 Intents 扩展添加到准备开始 SiriKit 集成的项目中

    Target…Intents Extension

未待完续…………