语境
我正在努力将对 Siri Shortcuts (Intents?) 的支持添加到一个重要的应用程序中。我的主要目标是允许用户使用 Shortcuts.app 自动化应用程序中的一些任务。
我已经在目标中定义了MyIntent
,与 一起,它具有输出属性。Intents.intentdefinition
Intents Extension
MyIntentResponse
file: INFile
鉴于应用程序的非平凡性质,我将意图从Intent Extension
主应用程序转发:
func handle(intent: MyIntent, completion: @escaping (MyIntentResponse) -> Void) {
// Can't handle the intent in the app extension yet, let the main app handle it
let response = MyIntentResponse(code: .continueInApp, userActivity: nil)
// TODO: How to update the response (with an output property) if the intent continues in the app?
completion(response)
}
问题
一旦意图被转发到应用程序,该AppDelegate.application(_:continue:restorationHandler:)
方法就会被一个用户活动调用,该用户活动也具有该属性interaction: INInteraction?
集。
从提供的内容中,INInteraction
我可以同时获得intent: INIntent
和response: INIntentResponse
来相应地处理意图。
然而,缺少的是如何与 Shortcuts.app 就意图的结果进行通信并提供所需的输出属性 ( file: INFile
) 的方法。
问题
如果在主应用程序中处理意图,是否有办法提供带有输出属性集的意图响应?
细节
有趣的是,有一种AppDelegate
方法可以处理这个用例:
optional func application(_ application: UIApplication,
handle intent: INIntent,
completionHandler: @escaping (INIntentResponse) -> Void)
文件说:
带有 Intents 应用扩展的应用可以使用此方法直接处理意图,而不是在应用扩展中处理它。您可以使用此方法来实现无法在扩展中轻松实现的工作流。例如,您可以使用它来开始或管理用户的锻炼会话。如果您的应用程序未运行,SiriKit 会在后台启动您的应用程序,以便 Siri 界面保持活动状态。
更多信息:https ://developer.apple.com/documentation/uikit/uiapplicationdelegate/2887573-application
从理论上讲,应该可以只调用具有正确设置属性completionHandler
的新实例化的。MyIntentResponse
file
但是,永远不会调用此方法。相反,上面提到AppDelegate.application(_:continue:restorationHandler:)
的被调用。