如何在不捐赠意图或使用快捷方式的情况下利用 Siri 创建自定义对象?

Posted

技术标签:

【中文标题】如何在不捐赠意图或使用快捷方式的情况下利用 Siri 创建自定义对象?【英文标题】:How can I utilize Siri to create a custom object without donating intents or using shortcuts? 【发布时间】:2019-05-07 20:08:07 【问题描述】:

*使用 Swift 4.2 和 Xcode 10.2

我试图通过允许用户免提创建对象来使我的应用程序功能更加丰富。该应用程序旨在使某些对象的创建更容易,因此允许用户通过调用 Siri 创建基本对象会很棒。但是,我希望在首次下载/运行应用程序时已经集成 Siri 功能。

我现在在使用 SiriKit 和快捷方式时遇到的问题:

建议您在移动应用程序中触发相关功能时“捐赠”自定义意图,以便 Siri 可以建议其他时间建议使用快捷方式 - 我希望这只是我不需要的标准功能捐赠”。 我正在处理一个较老的目标用户群,并提示最终用户进入他们的设置以将快捷方式添加到 Siri 并进行额外的设置,这会让很多用户迷失方向。

例如:

我的应用程序用于创建和发布具有名称和颜色属性的简单平面对象。

我想让用户免提初始化 Siri 并像这样创建这个对象:

“嘿 Siri,创建一个名为 Warkhawk 并颜色为蓝色的飞机”

网络上充斥着关于这些新快捷方式的信息,但我不喜欢你必须在触发应用中的功能时“捐赠”意图,然后转到设置以将其实际添加到 Siri。

如何在不使用快捷方式附带的所有附加步骤的情况下利用 Siri 来适应这个用例?

谢谢!

【问题讨论】:

【参考方案1】:

若想以更快、更轻松的方式捐赠 Siri INIntent,您可以使用

INUIAddVoiceShortcutViewController

像 UIImagePickerController 一样工作,它是一个“快捷方式”,可将用户直接带到短语语音记录屏幕。无需离开您的应用,使其更易于使用。

例如guide

【讨论】:

谢谢!这比强迫用户去他们的设置进行设置要好得多。我只是希望有一种方法可以在没有这一步的情况下集成它。但在这成为现实之前,必须这样做。 有没有办法在不使用INUIAddVoiceShortcutViewController 的情况下添加siri 快捷方式。表示我想在不使用任何 UI 的情况下添加快捷方式 据我所知,用户必须通过注册屏幕,如果没有用户通过此屏幕,您无法添加快捷方式。我认为该答案中描述的这种方式是最简单的。苹果总是想把正在发生的事情说得很清楚,如果可能的话,很多应用程序会在用户不知情的情况下添加快捷方式,我知道对于那些性格好的人来说,这最终会很糟糕,但总的来说我相信这是有道理的。【参考方案2】:

不幸的是,此时如果没有用户交互,您将无法做自己想做的事情。

应用可以在一个受支持的intent domains 中公开 Siri Intent,例如拨打 VoIP 电话或进行付款。我认为这些领域中的任何一个都不适合您的任务。

如您所述,在 ios 12 中,应用可以捐赠 Siri 快捷方式。这些在触发词汇方面具有更灵活的格式,但必须由用户设置。

【讨论】:

感谢您的快速回复!自从我开始搞乱自定义意图以来,我注意到您可以添加参数。你不能用那些有快捷方式的吗? 在深入研究之后,似乎自定义意图只是创建灵活快捷方式的一种方式?只是令人困惑,为什么他们不允许您创建自定义意图并直接通过 Siri 公开它。我看到的自定义意图的唯一用例是创建动态快捷方式。可能是我误会了。 好的,谢谢您解决这个问题。令人困惑的地方是自定义意图和快捷方式相交的地方。自定义意图仅对动态创建快捷方式有用。 Apple 的 SYSTEM 意图与 Siri 集成,预设了可以接受输入的预期参数。这是正确的吗? 对不起,我已经更新了我的答案。我把自己弄糊涂了。自定义意图可以有参数,但目前这些参数不能被 iOS 中的 Shortcuts 应用程序公开/使用。您可以在您的应用中将它们与自定义 Intent 处理一起使用 好吧,这太糟糕了。希望我们能在 iOS 13 中获得该功能。谢谢!

以上是关于如何在不捐赠意图或使用快捷方式的情况下利用 Siri 创建自定义对象?的主要内容,如果未能解决你的问题,请参考以下文章

Android:在不使用 marshall() 的情况下从 Parcelable 到 Serializable 的任何快捷方式?

通知意图 - 如何在不重置的情况下恢复通知中的活动?

在不修改快捷方式的情况下使批处理文件隐藏/最小化

如何在不知道 UUID、任何可能获得核心蓝牙或其他方式的情况下检测 iBeacons

如何在不打开的情况下将数据发送到另一个活动

如何在不改变其位置的情况下在界面生成器中将子视图置于前面