ios - Swift AppIntent 当包含参数时总是要求确认

标签 ios swift sirikit sirishortcuts

我正在尝试向 MacOS 项目添加语音控制(通过 Siri)。所以我可以直接说“覆盖到左边 10”

框架的预期:

  • Siri 通过说“覆盖到左侧 10”来识别快捷方式
  • 可以识别参数“向左”和“10”。

实际上它是如何工作的:

  • Siri 只能识别字面意思“叠加方向”,然后 Siri 会询问“什么方向”,然后询问“多少像素”

我的问题是AppIntent可以直接从命令中识别参数吗?没有确认每个参数?非常感谢!

enum Direction:String{
    case left, right, up, down
}

extension Direction: AppEnum{
    static var caseDisplayRepresentations: [Direction : DisplayRepresentation] = [
        .down: "down",
        .up: "up",
        .left: "to the left",
        .right: "to the right",
    ]
    
    static var typeDisplayName: LocalizedStringResource = "Direction"
    static var typeDisplayRepresentation: TypeDisplayRepresentation = "Direction"
}

struct MoveGridIntent: AppIntent {
    
    static var title: LocalizedStringResource = "Overlay Direction"
    static var description = IntentDescription("move the grid")
    static var openAppWhenRun: Bool = true

    @Parameter(title: "Direction", description: "the direction the overlay is going to move", requestValueDialog: IntentDialog("Which direction"))
    var direction: Direction
    
    @Parameter(title: "pixels", inclusiveRange: (1, 50))
    var pixels: Int
       
    static var parameterSummary: some ParameterSummary {
        Summary("Overlay \(\.$direction) \(\.$pixels)")
    }
    
    @MainActor
    func perform() async throws -> some IntentResult {
        print("MoveGridIntent", "move overlay", direction, "for \(pixels) pixels !!")
        return .result()
    }
}

最佳答案

您可以在安装时通过实现 AppShortcutsProvider 将应用意图添加到快捷方式应用中,如下所示:

struct MyShortcuts : AppShortcutsProvider {
    static var appShortcuts: [AppShortcut] {
        AppShortcut(
            intent: MoveGridIntent(),
            phrases: ["Move overlay by \(\.$pixels) \(\.$direction) with \(.applicationName)"])
    }
}

请务必在提供的每个短语中使用 applicationName,否则它们将无法被识别。

我目前正在为自己的一个项目解决这个问题,并注意到,涉及的参数和专业词汇越多,它就越令人讨厌。不过,对于您的示例来说,它应该可以正常工作。

编辑:您的调用短语中只能有一个动态参数!上面的例子不起作用。

如果没有 - 我猜测,我自己仍在研究 - 您可能需要在参数和/或 AppIntentVocabulary.plist 上添加解析器 code> 到您的本地化(还不确定,这是否只对旧式 SiriKit 实现有影响)。

我还建议观看https://developer.apple.com/videos/play/wwdc2022/10170/https://developer.apple.com/videos/play/wwdc2022/10032

关于ios - Swift AppIntent 当包含参数时总是要求确认,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75994067/

相关文章:

ios - 无法理解 iOS 中的静态类

ios - 如何在没有第三方库的情况下创建自定义幻灯片菜单?

ios - 选定行复选标记颜色更改

function - SWIFT - 辅助类回调

uitableview - 我的导航栏位于我的 TableView 中 - Swift

ios - SiriKit 对一般服务的支持

iphone - 设备中应用程序启动异常,在模拟器中运行良好

swift - 如何为多种数字类型制作通用函数?

ios - watchOS 是否支持自定义 SiriKit Intents 的语音快捷方式?

ios - Siri 与自定义意图的集成面临问题