最近在看SiriKit的官方文档,自啃 + Google翻译,如有错误或语义不当还望指出。
有自定义词汇的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 | NSOrderedSet* workoutNames = [self sortedWorkoutNames]; |
1 | let workoutNames = self.sortedWorkoutNames() |
有关注册用户特定词汇术语的更多信息,请参考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)中自动创建本地化版本。
创建全局词汇表文件
- 选择 New > File。
- 在 iOS > Resource,选择Property List文件类型。
- 点击 Next。
- 将文件的名称设置为 AppIntentVocabulary.plist。
- 单击 Create。
- 在项目中选择 AppIntentVocabulary.plist 文件。
- 在根元素下添加两个键。
- 将第一个键的名称设置为 ParameterVocabularies。
- 将第二个键的名称设置为 IntentPhrases。
- 按 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词汇文件格式