You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检查快捷指令是否已存在并为Intent设置自定义唯一标识符

解决方案

INIntent的identifier是系统自动生成的只读属性,确实不支持开发者手动赋值,你需要通过添加自定义参数的方式存储你自己的唯一ID。

实现步骤

  • 第一步:为你的Intent添加自定义ID参数
    如果你是通过Xcode的.intentdefinition文件定义的Intent,直接在对应的Intent配置页添加一个类型为String的参数,命名为customIdentifier即可,Xcode自动生成的Intent类会自动包含这个可读写的属性。
    如果你是手动继承INIntent创建的自定义类,直接新增一个customIdentifier的String属性,同时在NSSecureCoding的实现中完成该属性的编码、解码逻辑。
  • 第二步:创建快捷指令时赋值自定义ID
    当你生成INShortcut实例关联Intent时,将你生成的唯一ID赋值给Intent的customIdentifier属性,再添加到Siri快捷指令中心即可。
  • 第三步:修改存在性检查逻辑
    将原代码中匹配系统identifier的逻辑,改为匹配你自定义的customIdentifier参数即可,修改后的参考代码如下:
public static func shortcutExists(id: String, completion: @escaping ((Bool) -> Void)) {
    var exists = false
    INVoiceShortcutCenter.shared.getAllVoiceShortcuts { voiceShortcutsFromCenter, error in
        defer {
            completion(exists)
        }
        guard let voiceShortcuts = voiceShortcutsFromCenter, error == nil else {
            return
        }
        for voiceShortcut in voiceShortcuts {
            // 此处替换为你自己定义的Intent类名
            guard let customIntent = voiceShortcut.shortcut.intent as? MyCustomIntent else {
                continue
            }
            if customIntent.customIdentifier == id {
                exists = true
                break
            }
        }
    }
}

注意事项

  • 遍历语音快捷指令时需要先做类型转换,只匹配你自己的自定义Intent类型,避免和其他App的快捷指令、系统内置快捷指令产生类型不匹配的崩溃
  • 如果你的App支持多种不同类型的自定义Intent,可以再新增一个intentType参数做类型区分,避免不同类型Intent的ID重复导致误判

内容的提问来源于stack exchange,提问作者Houman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 05:27:05