使用NSUserActivity时如何将值返回Siri快捷方式?

时间:2019-06-12 22:30:06

标签: ios swift sirikit sirishortcuts

我正在使用NSUserActivity定义应用程序功能,因此它会出现在Spotlight和Siri快捷方式中:

let activity = NSUserActivity(activityType: "com.myapp.siriTest")
activity.title = "Test function"
activity.userInfo = ["parameter" : "test"]
activity.isEligibleForSearch = true
activity.isEligibleForPrediction = true
activity.persistentIdentifier = NSUserActivityPersistentIdentifier(rawValue: "com.myapp.siriTest")
view.userActivity = activity
activity.becomeCurrent()

这部分工作正常,在调用上述功能后,“测试功能”按钮将出现在Spotlight和“快捷方式”中。如果我以此意图启动应用程序,则可以在AppDelegate中收听它:

func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
    print("app started from spotlight or shortcuts"); 
    return true
}

两个问题:

  1. 如果该应用程序是使用“快捷方式”应用程序创建的快捷方式启动的,是否可以将值返回给快捷方式?例如,我将返回一些文本,而我在快捷方式中的下一步将发送包含该文本的短信。
  2. 如果我有多个NSUserActivity,如何在AppDelegate restoreHandler中区分它们?

1 个答案:

答案 0 :(得分:0)

我对此很好奇,但apparently这是不可能的。

快捷方式的输出由SiriKit中的意图响应处理。

Jayson之类的应用所采用的一种(棘手的)解决方法是将NSUseractivity的输出复制到剪贴板,然后可以使用“获取剪贴板”操作在快捷方式中对其进行访问。

或者,将intents添加到您的项目中。