Зарегистрируйте несколько ярлыков Siri одновременно - PullRequest
0 голосов
/ 01 ноября 2018

Я написал некоторый код, который пытается зарегистрировать несколько ярлыков Siri одновременно, перебирая значения enum

Когда я запускаю код и открываю приложение настроек, на нем отображается только последний зарегистрированный ярлык.

Как мне зарегистрировать несколько ярлыков 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()
      }
    }

  }

1 Ответ

0 голосов
/ 01 ноября 2018

Твой код мне подходит. Как правило, Настройки-> Siri показывает только последние зарегистрированные ярлыки. Если вы зайдете в Настройки-> Siri-> Все ярлыки, вы увидите все имена там.

Как вы упомянули в своем коде activity.isEligibleForSearch = true В качестве альтернативы, перейдите к поиску по телефону от прокрутки справа от дома и введите ярлык, вы также должны увидеть всплывающее окно элемента ярлыка.

РЕДАКТИРОВАТЬ 1: Доказательство моего кода:

  1. Info.plist: Вы должны указать, сколько NSUserActivityTypes:

    <Key>NSUserActivityTypes</key>
    <array> 
    <string>com.rio.SiriShortcuts.makeGreen</string>
    <string>com.rio.SiriShortcuts.makeRed</string>
    </array>
    
  2. Класс enum:

    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 ().

...