一次注册多个 Siri 快捷方式

Register multiple Siri shortcut at once

我写了一些代码,试图通过迭代枚举值一次注册多个 Siri 快捷方式

当我运行代码和打开设置应用程序时,它只显示最后注册的快捷方式。

如何一次注册多个 Siri 快捷方式?

static func registerSiriShortcut(to responder: UIResponder) {

    if #available(iOS 12.0, *) {
      let cases = SiriShortcutType.allCases
      for type in cases {

        let activity = NSUserActivity(activityType: type.siriActivityType)
        activity.title = type.siriShortcutTitle
        activity.isEligibleForSearch = true
        activity.isEligibleForPrediction = true

        responder.userActivity = activity
        responder.userActivity?.becomeCurrent()
      }
    }

  }

我觉得你的代码没问题。一般设置->Siri 只显示最近注册的快捷方式。如果你转到设置->Siri->所有快捷方式,你会在那里看到所有名称。

正如您在代码中提到的那样 activity.isEligibleForSearch = true 或者,从主页向右滑动转到 phone 搜索并键入快捷方式,您应该也会看到快捷方式项目的弹出窗口。

编辑 1:我的代码证明:

  1. Info.plist:需要说明NSUserActivityTypes有多少:

    <Key>NSUserActivityTypes</key>
    <array> 
    <string>com.rio.SiriShortcuts.makeGreen</string>
    <string>com.rio.SiriShortcuts.makeRed</string>
    </array>
    
  2. 枚举class:

    enum SiriShortcutType {
    case makeRed
    case makeGreen
    
    var siriActivityType: String {
        switch self {
            case .makeRed:
            return "com.rio.SiriShortcuts.makeRed"
            case .makeGreen:
            return "com.rio.SiriShortcuts.makeGreen"
        }
    }
    
    var siriShortcutTitle: String {
        switch self {
        case .makeRed:
            return "Make View Red"
        case .makeGreen:
            return "Make View Green"
        }
    }
    
    var color: String {
        switch self {
        case .makeRed:
            return "red"
        case .makeGreen:
            return "green"
        }
    }
    
    static let allCases:[SiriShortcutType] = [.makeRed, .makeGreen]
    }
    
  3. 现在我在 VC 中的注册方法(通过按钮操作调用):

     func registerSiriShortcut() {
    if #available(iOS 12.0, *) {
        let cases = SiriShortcutType.allCases
        var suggestions: [INShortcut] = []
        for type in cases {
    
            let activity = NSUserActivity(activityType: type.siriActivityType)
            activity.userInfo = ["color" : type.color]
            activity.title = type.siriShortcutTitle
            activity.isEligibleForSearch = true
            activity.isEligibleForPrediction = true
            activity.persistentIdentifier = NSUserActivityPersistentIdentifier(type.siriActivityType)
            suggestions.append(INShortcut(userActivity: activity))
        }
        INVoiceShortcutCenter.shared.setShortcutSuggestions(suggestions)
    }
    }
    

编辑 1:INShortcut 支持多个 Siri 快捷方式:请参阅更新的 registerSiriShortcut()。