gpt4 book ai didi

ios - SiriKit:在主应用程序中处理意图时如何设置输出属性?

转载 作者:行者123 更新时间:2023-12-05 07:11:49 27 4
gpt4 key购买 nike

上下文

我正在努力为一个重要的应用程序添加对 Siri 快捷方式(Intents?)的支持。我的主要目标是允许用户使用 Shortcuts.app 自动执行应用程序中的某些任务。

我在 Intents Extension 目标的 Intents.intentdefinition 中定义了 MyIntent,连同 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)
}

问题

一旦 Intent 被转发到应用程序,AppDelegate.application(_:continue:restorationHandler:) 方法将被调用,用户事件也具有属性 interaction: INInteraction? 设置。

从提供的 INInteraction 我可以获得 intent: INIntentresponse: INIntentResponse 来相应地处理意图。

然而,缺少的是如何将有关意图结果的信息反馈给 Shortcuts.app 并提供所需的输出属性(file: INFile)。

问题

如果在主应用程序中处理意图,是否有办法提供带有输出属性集的意图响应?

详情

有趣的是,有一个 AppDelegate 方法可以处理这个用例:

optional func application(_ application: UIApplication, 
handle intent: INIntent,
completionHandler: @escaping (INIntentResponse) -> Void)

文档说:

An app with an Intents app extension can use this method to handle an intent directly, instead of handling it in the app extension. You might use this method to implement workflows that you cannot implement easily in your extension. For example, you might use it to start or manage a user's workout session. If your app is not running, SiriKit launches your app in the background so that the Siri interface remains active.

更多信息:https://developer.apple.com/documentation/uikit/uiapplicationdelegate/2887573-application

从理论上讲,应该可以使用新实例化的 MyIntentResponse 调用 completionHandler,这将正确设置 file 属性。

但是,这个方法永远不会被调用。相反,上面提到的 AppDelegate.application(_:continue:restorationHandler:) 被调用。

最佳答案

如果您在 Intents 扩展 handle() 函数中使用 .handleInApp 而不是 .continueInApp,那么您的应用委托(delegate)的 handleIntent() 函数将被调用,而不是 continue:restorationHandler() 函数。这将允许您将 INIntentResponse 传回 completionHandler 中的扩展。

关于ios - SiriKit:在主应用程序中处理意图时如何设置输出属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60621629/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com