SiriKit官方文档 - Part1-4 指定自定义词汇

最近在看SiriKit的官方文档,自啃 + Google翻译,如有错误或语义不当还望指出。

官方文档原文 - Specifying Custom Vocabulary

有自定义词汇的App需要让Siri知道正确使用该词汇。自定义词汇是指Siri内在可能无法理解的任何术语。例如,一个乘车预定App将特定车辆类型称为“Vroom”,可以定义其术语并提供如何使用的示例。定义自定义词汇有助于Siri理解与你的App结合使用的命令,以此提高用户体验。

以下两种方法可以定义应用的自定义词汇:

  • 注册针对单个用户的术语,请使用INVocabulary对象。
  • 注册App中所有用户共有的术语命令,请在你的iOS应用中添加一个全局词汇表文件。

重要

Siri将自定义词汇当作提示,将尽可能多的定制术语纳入其中。主要针对用法可能会混淆的术语,并且Siri会始终优先使用术语,所以请把最重要的自定义词汇排在列表的前面。

除了定义任何自定义术语,你使用全局词汇表文件为Siri提供你的每个App支持的意图的示例短语。Siri会在Siri指南中展示你的示例短语,用户可以阅读以了解如何调用你的App的服务。

注册用户特定词汇术语

使用共享的INVocabulary对象注册特定于单个用户的词汇。用户特定术语必须属于以下类别之一:

  • 联系人姓名(仅当不受“联系人”框架管理时)
  • 联系人组
  • 照片标签
  • 相册名称
  • 锻炼名称
  • 车辆配置文件名称(仅限CarPlay)

当选择要注册的词汇时,选择可能被不熟悉你的App的人容易误解的术语。不要注册易于理解的术语,例如“我的相册”或“我的锻炼”。而是关注字面意义不同于你的App的这些术语的用法的术语。例如,消息传递App可能会从用户的收藏夹列表中注册电影名称(Screen Names)。

要注册术语,请使用INVocabulary对象的setVocabularyStrings:ofType:方法。你注册的每组术语必须与特定类别相关联。如果注册一组新的术语将替换该类别的先前术语,那每次调用该方法时都要包含所需的所有术语。最重要的术语应始终在你创建的NSOrderedSet对象中。

代码4-1展示了注册一组自定义锻炼的样例。App基于最后一次使用的锻炼名称排序锻炼名称,将最近使用的锻炼放在有序集的前列。通常情况下你是从App注册用户特定的术语,而不是你的Intents扩展。

代码4-1注册用户特定词汇

1
2
3
4
5
NSOrderedSet* workoutNames = [self sortedWorkoutNames];

INVocabulary* vocabulary = [INVocabulary sharedVocabulary];
[vocabulary setVocabularyStrings:workoutNames
ofType:INVocabularyStringTypeWorkoutActivityName];
1
2
3
4
let workoutNames = self.sortedWorkoutNames()

let vocabulary = INVocabulary.shared()
vocabulary.setVocabularyStrings(workoutNames, of: .workoutActivityName)

有关注册用户特定词汇术语的更多信息,请参考INVocabulary Class Reference

创建全局词汇文件

使用全局词汇表文件来指定使用App的示例短语,以及注册App的所有用户都通用的字词。所有App应至少提供一些示例短语,Siri在Siri指南中显示这些短语作为如何使用你的App的示例。如果你的App使用适用于该App的所有用户的自定义术语,则可以在全局词汇表文件中声明该术语。

注意

建议你为App提供一个全局词汇文件,并使用它为你的每个App支持的意图指定一个或多个示例短语。虽然全局词汇文件不是必须提供的,但App Store对声明Siri支持但不包含样本短语的App发出警告。

全局术语必须属于以下类别之一:

  • 乘坐选项
  • 锻炼名称

全局词汇表文件是一个属性列表文件,其名称为AppIntentVocabulary.plist,你将其包含在iOS应用包中。将此文件的初始版本放置在与App的基本开发语言相对应的.lproj目录中。在每个App的特定语言项目(.lproj)目录中包含文件的本地化版本。在Xcode中,你可以从文件检查器(File inspector)中自动创建本地化版本。

创建全局词汇表文件

  1. 选择 New > File。
  2. 在 iOS > Resource,选择Property List文件类型。
  3. 点击 Next。
  4. 将文件的名称设置为 AppIntentVocabulary.plist。
  5. 单击 Create。
  6. 在项目中选择 AppIntentVocabulary.plist 文件。
  7. 在根元素下添加两个键。
    • 将第一个键的名称设置为 ParameterVocabularies。
    • 将第二个键的名称设置为 IntentPhrases。
  8. App Vocabulary File Format 中所述配置其余键。

全局词汇表文件在根级别包含两个Key:

  • ParameterVocabularies Key 定义App的自定义术语及其应用的意图参数。
  • IntentPhrases Key 包含用于调用服务的示例短语。如果你为App定义自定义术语,至少有一些范例词组来展示如何使用这些字词。

术语必须与意图对象的特定属性相关联。当Siri听到一个自定义术语时,它使用该术语来填充意图对象中的相应属性。(具体来说,它会将你为该术语提供的标识符分配给属性。)你可以将同一术语与多个意图相关联。例如,一个自定义锻炼名称可能应用在所有与锻炼相关的意图。

重要

在开发过程中,Xcode将你的全局词汇转移到Siri,但是会限制该词汇到你的开发设备的可用性。获取词汇数据不是即时的,因此在测试任何自定义词汇之前,你可能需要等待一两分钟。

有关全局词汇表文件的结构和键的详细信息,请参阅App Vocabulary File Format

SiriKit译文系列

SiriKit官方文档 - Part1-1 SiriKit介绍
SiriKit官方文档 - Part1-2 创建一个Intents扩展
SiriKit官方文档 - Part1-3 解决和处理意图
SiriKit官方文档 - Part1-4 指定自定义词汇
SiriKit官方文档 - Part1-5 创建Intents UI扩展
SiriKit官方文档 - Part2-1 参考-意图域
SiriKit官方文档 - Part2-2 参考-App词汇文件格式