我该如何判断我的意图是否在“快捷指令”应用程序中运行?

7
在我的应用程序中,我创建了一个SiriKit意图,允许用户搜索人员。如果他们直接从Siri触发此意图,我想使用此搜索字符串打开我的应用程序并显示结果 - 我可以通过将`.continueInApp`和一个`NSUserActivity`传递给完成处理程序来实现这一点。然而,如果该意图是Shortcuts应用程序中的流程的一部分,则我希望将结果作为输出从意图处理程序传递出去 - 同样,我可以通过返回结果数组和`.success`传递给完成处理程序来实现这一点。我的问题是,我的处理程序如何确定它所运行的上下文,以便根据情况启动我的应用程序或直接返回结果?
1个回答

6

我可能错了,但我认为iOS不会暴露这样的信息(如发起者,例如Siri或Shortcuts),因为这将允许开发人员定义与其意图静态定义不同的应用程序行为(其中Siri / Shortcuts 应该是透明的)。我怀疑苹果永远不会同意这样做。

在我看来,如果这确实是你想要的,唯一的选项是获取堆栈跟踪,确定调用函数是否在Siri / Shortcuts之间表现出差异,并从那里解决问题。

虽然有点丑陋,但这会起作用。


我怀疑你可能是对的,但我不确定你的推理是否正确 - 如果我为我的Siri意图提供UI,我也有类似的问题 - 即使在快捷方式中执行意图,UI仍然会显示 - 显然,在直接从Siri执行时与在快捷流程中执行时存在差异,用户期望看到结果,并在下一步中处理结果 - 即“交互式”与“非交互式”。我将更仔细地查看SoupChef示例。 - Paulw11
在查看了SoupChef示例之后,似乎他们的快捷方式也是以同样的方式工作。唯一的解决方案似乎是创建两个意图 - 一个旨在从Shortcuts应用程序内运行,另一个旨在直接从Siri调用。 - Paulw11
我使用'SoupChef'示例得出了上述结论;)。 我同意用户界面存在差异,但它由iOS控制,并且对于Siri的情况,Intents是事先明确的。 您想要的是适用于ShortCuts的第二组意图。 然而,我没有看到您可以运行两个单独的意图,他们的示例说的是将为Siri设计的意图公开或不公开,以供ShortCuts使用。 我没有看到仅为ShortCuts创建意图的选项。 我可能错过了什么。 - Alex
我并没有真正看到这一点。用户仍然掌控着他们提供的信息。我认为它还没有完全实现 - 在iOS 13之前,您的意图无法作为Shortcuts流程的一部分发送/接收数据 - 现在可以了。希望他们将来会添加这个功能。 - Paulw11
谢谢,我想这不是你期望的答案,但感谢你的贡献。嘿,能请教你帮个忙吗?我有一个问题在这里 https://stackoverflow.com/questions/57921856/apple-turicreate-always-return-the-same-label ,不知道你是否能提供一些意见?我已经分享了所有必要的代码,以便任何人可以在30秒内尝试。这个问题困扰我有一段时间了,我已经没有什么策略了。非常感谢你的帮助! - Alex
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接