使用 NSUserActivity 时如何将值返回给 Siri Shortcut?

Posted

技术标签:

【中文标题】使用 NSUserActivity 时如何将值返回给 Siri Shortcut?【英文标题】:How to return value back to Siri Shortcut when using NSUserActivity? 【发布时间】:2019-06-12 22:30:06 【问题描述】:

我正在使用 NSUserActivity 定义一个应用功能,因此它出现在 Spotlight 和 Siri Shortcuts 中:

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 和 Shortcuts 中出现 Test function 按钮。如果我从这个意图启动应用程序,我可以在我的 AppDelegate 中收听它:

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

两个问题:

    如果应用程序是从使用 Shortcuts 应用程序创建的快捷方式启动的,是否可以将值返回给快捷方式?例如,我会返回一些文本,然后我在快捷方式中的下一步将发送一条带有该文本的短信。 如果我有多个 NSUserActivity,如何在 AppDelegate restoreHandler 中区分它们?

【问题讨论】:

【参考方案1】:

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

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

Jayson 等应用采用的一种(hacky)解决方法是将输出从 NSUseractivity 复制到剪贴板,然后可以使用“获取剪贴板”操作在快捷方式中访问。

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

【讨论】:

以上是关于使用 NSUserActivity 时如何将值返回给 Siri Shortcut?的主要内容,如果未能解决你的问题,请参考以下文章

使用 NSUserActivity 在锁定屏幕上看不到我的 siri 快捷方式

iOS 10 NSUserActivity,位置建议 - MKMapItem 未出现在地图中

如何将值从python传递给c++并返回?

Siri ShortCuts - NSUserActivity,不显示给定的缩略图

启动对话框以获取结果以将值返回给主要活动

如果值为空,如何将值返回给 sqldatareader?