更新来自 intent 视图控制器的 Siri intent 处理程序响应

Update Siri intent handler response from the intent view controller

提问人:abant 提问时间:8/6/2023 更新时间:8/6/2023 访问量:14

问:

目前,我正在尝试通过我的 intent 视图控制器在我的 siri intent 上更新我的成功消息的响应,但是,当我在 siri 中说出命令时,它只运行在我的 intent 处理程序中传递的默认参数,并完全绕过我在 intent 视图控制器中初始化的响应参数的值。

class IntentViewController: UIViewController, INUIHostedViewControlling {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        FirebaseApp.configure()
    }
    
    func configureView(for parameters: Set<INParameter>, of interaction: INInteraction, interactiveBehavior: INUIInteractiveBehavior, context: INUIHostedViewContext, completion: @escaping (Bool, Set<INParameter>, CGSize) -> Void) {
        

        if interaction.intentHandlingStatus == .success {
            if let response = interaction.intentResponse as? ViewMyMedsIntentResponse {
                response.meds = ["tylenol", "advil", "morphine"]
                getMedsString { [weak self] medsArray in
                    guard let self = self else {
                        // Handle the case when self has been deallocated before the closure is executed
                        completion(false, parameters, self?.desiredSize ?? CGSize.zero)
                        return
                    }
                    
                    let medView = MedsView()
                    self.view.addSubview(medView)
                    medView.translatesAutoresizingMaskIntoConstraints = false
                    NSLayoutConstraint.activate([
                        medView.leadingAnchor.constraint(equalTo: self.view.leadingAnchor),
                        self.view.trailingAnchor.constraint(equalTo: medView.trailingAnchor),
                        medView.topAnchor.constraint(equalTo: self.view.topAnchor),
                    ])
                    medView.setNeedsLayout()
                    medView.layoutIfNeeded()
                    medView.update(meds: medsArray)
                    completion(true, parameters, CGSize(width: self.desiredSize.width, height: medView.frame.height))
                }
                
                return
            }
            
        }
    }
}
import Foundation
import os.log
import Intents

public class ViewMyMedIntentHandler: NSObject, ViewMyMedsIntentHandling {
    
    public func handle(intent: ViewMyMedsIntent, completion: @escaping (ViewMyMedsIntentResponse) -> Void) {
        
        let response = ViewMyMedsIntentResponse(code: .success, userActivity: nil)   
        response.meds = ["None"]  
        completion(response)
    }
    
    
}

[这是我对 ViewMyMedsIntent(https://i.stack.imgur.com/zETac.png) 的意图定义的样子

因此,回顾一下,在意图视图控制器中,我希望 siri 大声说出 [“tylenol”、“advil”、“morphine”],但就像我说的,它绕过了这一点,只是读取我在意图处理程序中传递的 [“None”] 作为默认值。

我试图通过执行 response.meds 来更新意图视图控制器中的响应,希望它能更新响应值,并且 siri 会大声朗读所有药物,但它只是读取意图处理程序中传递的任何内容。另外,作为快速说明,我不想在意图处理程序中进行任何更新,因为我的计划是查询一个 firebase 数据库,我只能在意图视图处理程序中访问该数据库,因为我只能导入 firebase 数据库,因为该库已添加到意图视图控制器中。

Sirikit Siri快捷键

评论


答: 暂无答案