如何检查我的应用程序是不是由 WatchOS 上的 Siri 快捷方式启动?
Posted
技术标签:
【中文标题】如何检查我的应用程序是不是由 WatchOS 上的 Siri 快捷方式启动?【英文标题】:How do I check if my app is launched by a Siri shortcut on WatchOS?如何检查我的应用程序是否由 WatchOS 上的 Siri 快捷方式启动? 【发布时间】:2020-04-28 15:53:34 【问题描述】:我正在尝试在 WatchOS 上创建自定义 SiriKit 快捷方式。我为 ios 问题阅读了此 question,但我相信解决方案在 watchOS 中有所不同。
为了做到这一点,我遵循了以下步骤:
-
在 WatchKit Extension 目标中,我添加了 Siri 功能;
我通过以下方式创建了一个 Intents 扩展:File> New > Target > watchOS > Intents Extension;
在意图扩展组中,我创建了一个 SiriKit 意图定义文件。在此文件中,我进行了一些自定义更改并选中了“意图符合 Siri 建议”框;
在 Intent Extension 组中,我还创建了一个名为 HandWashIntentHandler.swift 的文件,其中包含以下代码:
class HandWashIntentHandler: NSObject, HandWashIntentHandling
func handle(intent: HandWashIntent, completion: @escaping (HandWashIntentResponse) -> Void)
let activity = NSUserActivity(activityType: "HandWashIntent")
let title = "Hand Wash"
activity.title = title
activity.suggestedInvocationPhrase = "Start hand wash"
activity.isEligibleForPrediction = true
activity.persistentIdentifier = title
let response = HandWashIntentResponse(code: .continueInApp,
userActivity: activity)
completion(response)
-
然后,在 IntentHandler.swift 中,我添加了以下代码:
class IntentHandler: INExtension
override func handler(for intent: INIntent) -> Any
guard intent is HandWashIntent else
fatalError("Unhandled intent type: \(intent)")
return HandWashIntentHandler()
-
最后,在 Intent Extension Group 内的 Info.plist 中,我在 IntentsSupported 中添加了“HandWashIntent”。同样,在 WatchKit 扩展组内的 Info.plist 中,我在 NSUserActivityTypes 中添加了“HandWashIntent”。
所以,基本上,我希望通过语音快捷方式“开始洗手”。此快捷方式将打开应用程序并推送特定控制器。我在question 中读到,watchOS 中的 WKExtensionDelegate 与 iOS 中的 AppDelegate “等效”。然后,我尝试在 ExtensionDelegate 中操作 userActivity,但是没有函数可以这样做。
然后,我在 ExtensionDelegate 中使用了函数handle(_:):
func handle(_ userActivity: NSUserActivity)
if userActivity.activityType == "HandWashIntent"
WKExtension.shared().rootInterfaceController?.pushController(withName: "Wash", context: nil)
但没有成功。那么,如何检查我的应用程序是否由 WatchOS 上的 Siri 快捷方式启动?
【问题讨论】:
【参考方案1】:在 AppDelegate 类上检查此方法。 launchOptions
字典指示应用程序启动的原因。从LaunchOptionsKey
你会得到信息。
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool
// Override point for customization after application launch.
return true
【讨论】:
谢谢,但这不行。由于我正在开发一个仅限手表的应用程序,因此没有委托人可以解决,正如问题本身所提到的那样。以上是关于如何检查我的应用程序是不是由 WatchOS 上的 Siri 快捷方式启动?的主要内容,如果未能解决你的问题,请参考以下文章
如何在真实设备上安装独立的 watchOS 应用程序进行测试?
带有独立 WatchOS 应用程序的 Siri 表盘上的快捷方式/操作