一次注册多个 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:我的代码证明:
Info.plist:需要说明NSUserActivityTypes有多少:
<Key>NSUserActivityTypes</key>
<array>
<string>com.rio.SiriShortcuts.makeGreen</string>
<string>com.rio.SiriShortcuts.makeRed</string>
</array>
枚举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]
}
现在我在 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()。
我写了一些代码,试图通过迭代枚举值一次注册多个 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:我的代码证明:
Info.plist:需要说明NSUserActivityTypes有多少:
<Key>NSUserActivityTypes</key> <array> <string>com.rio.SiriShortcuts.makeGreen</string> <string>com.rio.SiriShortcuts.makeRed</string> </array>
枚举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] }
现在我在 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()。