我试图弄清楚如何使用iOS12中的“自定义意图”定义和创建快捷方式。我想创建一个快捷方式,以便用户可以将任务添加到我的应用程序中并为其命名(以及将来的其他参数)。例如只需对Siri说“添加名称为'Pick up clothes'的任务”。
然后我正在尝试使用以下方法创建Siri快捷方式:
TaskIntent *taskIntent = [[TaskIntent alloc] init];
taskIntent.suggestedInvocationPhrase = @"TaskIt";
INShortcut *taskShortcut = [[INShortcut alloc] initWithIntent:taskIntent];
INUIAddVoiceShortcutViewController *addSiri = [[INUIAddVoiceShortcutViewController alloc] initWithShortcut:taskShortcut];
addSiri.delegate = self;
[self presentViewController:addSiri animated:YES completion: nil];
但是,它最终在应用程序中出现异常:
无法通过意图创建快捷方式({ taskName =; 标识符= EE4661C6-1826-4A14-84EC-FD684647FE2B; }),因为它没有有效的参数组合
所以我不确定如何正确执行此操作。捐赠快捷方式时是否必须提供taskName?但这意味着每次都会显示相同的taskName并将其添加到系统中,这不是我想要的。还是新的SiriKit无法自定义以处理通用输入?
答案 0 :(得分:2)
是的,在创建自定义TaskIntent
之后,您需要填充其参数。也就是说,您需要为taskName
设置一个值:
taskIntent.taskName = @"Test";
每当用户在您的应用程序中执行相关操作时,您就捐赠意图。如果您的用户使用taskName
输入任务,则可以通过创建意图并将taskIntent.taskName
参数设置为用户输入的任务名称来捐赠此taskName。这将为输入任务提供捷径再次使用相同的标题,这可能不是您想要的。由于任务标题不同且无法预测,因此添加任务不是重复的,因此INAddTasksIntent
似乎比捐赠快捷方式更合适。
答案 1 :(得分:1)
您不能使用创建的自定义意图的参数询问Siri问题。
您可以在SiriKit中创建两种类型的意图:
对于内置意图,您可以使用参数询问Siri问题,例如“向John发送一条消息,说“帮助我预订机票”。 SiriKit将帮助您找到意图,提取参数(John和消息内容)并为您发送消息。
对于Siri快捷方式的自定义意图,您不能使用参数提问。您只能使用不带参数的命令来触发意图,并执行与捐赠相同的操作(捐赠自定义意图时,必须在其中设置参数。)
内置意图和自定义意图之间的差异可能是由以下事实引起的:对于内置意图,SiriKit需要大量机器学习训练工作才能识别意图并提取参数。但是自定义意图没有经过训练的机器学习模型,并且不能像内置意图那样起作用。