问题标签 [inshortcut]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3511 浏览

ios - SiriKit 自定义意图参数和快捷键

我试图弄清楚如何使用 iOS12 中的自定义意图来定义和创建快捷方式。我想创建一个快捷方式,以便用户可以将任务添加到我的应用程序并为其命名(以及将来的其他参数)。例如,只需对 Siri 说“添加名称为‘取衣服’的任务”。

这是我定义意图的方式: 在此处输入图像描述

然后我尝试使用这个创建一个 Siri 快捷方式:

但是,它最终在应用程序中出现异常:

无法从意图创建快捷方式({ taskName = ; identifier = EE4661C6-1826-4A14-84EC-FD684647FE2B; }),因为它没有有效的参数组合

所以我不确定如何正确地做到这一点。捐赠快捷方式时是否必须提供任务名称?但这意味着每次都会显示相同的 taskName 并将其添加到系统中,这不是我想要的。还是新的 SiriKit 的可定制性不足以处理通用输入?

0 投票
0 回答
234 浏览

sirikit - 如果任何整数参数 == 0,INShortcut 是否会失败?

自定义意图的 Siri 快捷方式。我已经包含了几个参数、一些字符串、一个字符串数组和几个整数。一些整数用于枚举的原始值,一个是应用程序属性的真正整数值,一个使用 0 和 1 作为布尔值。

我发现如果传递给 INShortcut 方法的意图参数中的任何整数为 0,则 INShortcut 失败。只要它们都是非0,它就成功了。fwiw,意图日志显示所有属性值与预期完全一致,无论是零还是非零。

我有错觉吗?有没有其他人观察到这一点?是否记录了该行为而我只是​​错过了它?

谢谢...

0 投票
3 回答
182 浏览

objective-c - 未调用自定义 Intent 处理程序 - iOS 声明 IntentHandlerMethodForIntent 未实现

我的自定义意图的 Objective-C 实现中的 IntentHandler 无法接收来自语音激活快捷方式的呼叫。当使用 Siri 调用捐赠的交互时,我观察到我在控制台应用程序中收到以下错误,声称意图的意图处理程序方法未实现:

此错误与尝试使用语音命令触发自定义意图导致 iOS 调用我的 appDelegate,特别是 application:continueUserActivity:restorationHandler: 的事实一致。根据文档,restoreHandler 仅应在未处理意图且必须由主应用程序处理的情况下调用。

由于 Objective-C 实现的文档很少,我无法弄清楚我缺少什么。我试图将 Siri Shortcuts 的示例 SoupChef 应用程序实现映射到我的实现。我无法弄清楚我哪里出错了。这是我的实现(对不起所有细节,但我希望你能看到一些错误):

首先,我实现了两个额外的目标;一个共享框架和一个意图扩展。我还实现了一个意图定义文件。

这是我的目标的图像:

在此处输入图像描述

W_P_r 是主应用程序,W_P_rKit 是共享框架,PartsListManagerIntents 是 Intents 扩展。

接下来,这是我的 Intents 定义文件和它所属的目标成员:

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

我还在 main 目标和 PartsListIntentManager 目标的 add 的功能部分中添加了一个应用程序组。我将 Siri 功能添加到主要目标。

所有这些都会自动创建一些代码,包括 PartsListManagerIntents 目标中的默认 IntentHandler.m 和 info.plist。我已将 info.plist 更新如下:

在此处输入图像描述

这是自动生成的 IntentHandler(我已对其进行修改以记录活动并调用驻留在 W_P_rKit 共享框架中的特定意图处理程序:

请注意,CreatePartsListIntentHandler 是一个实现 CreatePartsListIntentHandling 协议的类(IntentHandler 的解析、确认和处理方法)。

现在这里是应该触发 iOS 调用 IntentHandler 的相关实现:

在我的应用程序中,当用户填写新项目的名称时,我拨打电话以捐赠互动,如下所示:

对 donateCreatePartsListIntent 的调用执行以下操作:

一旦用户创建了空的部件列表(强制进行上述交互捐赠),视图控制器将显示一个“添加 Siri 快捷方式”按钮。点击按钮会自动调用以下方法来创建快捷方式:

对 prepareCreatePartsListIntent 的调用执行以下操作:

这确实会创建一个在快捷方式应用程序中可见的快捷方式。单击快捷方式或说出调用短语将直接将您带到应用委托的 application:userActivity:restorationHandler。但它不调用 IntentHandler。

为什么我的 IntentHandler 没有被调用?为什么 iOS 会发送错误消息 _invokeIntentHandlerMethodForIntent:intentHandler:parameterNamed:keyForSelectors:executionHandler:unimplementedHandler:?

实际上,我已经为此苦苦挣扎了好几个星期。任何帮助或提示都会很有帮助。