如何检查我的应用程序是否由WatchOS上的Siri快捷方式启动



我正试图在WatchOS上创建一个自定义SiriKit快捷方式。我读到这个问题是针对iOS的问题,但我相信watchOS的解决方案不同。

为了做到这一点,我遵循了以下步骤:

  1. 在WatchKit扩展目标中,我添加了Siri功能
  2. 我已经通过以下方式创建了一个意向扩展:文件>新建>目标>watchOS>意向扩展
  3. 在Intent Extension组中,我创建了一个SiriKit Intent Definition文件。在这个文件中,我做了一些自定义更改,并选中了"意向符合Siri建议"框
  4. 在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)
}
}
  1. 然后,在IntentHandler.swift中,我添加了以下代码:
class IntentHandler: INExtension {
override func handler(for intent: INIntent) -> Any {
guard intent is HandWashIntent else {
fatalError("Unhandled intent type: (intent)")
}
return HandWashIntentHandler()
}
}
  1. 最后,在Intent Extension Group内的Info.plist中,我在IntentsSupported中添加了"HandWashIntent"。类似地,在WatchKit扩展组内的Info.plist中,我在NSUserActivityTypes中添加了"HandWashIntent">

所以,基本上,我想通过口语快捷键"开始洗手"。此快捷方式将打开应用程序并推送特定的控制器。我读到有问题的消息,watchOS中的WKExtensionDelegate与iOS中的AppDelegate"等效"。然后,我尝试在ExtensionDelegate中操作userActivity,但没有这样做的功能

然后,我在ExtensionDelegate:中使用了函数句柄(_:(

func handle(_ userActivity: NSUserActivity) {
if userActivity.activityType == "HandWashIntent"{
WKExtension.shared().rootInterfaceController?.pushController(withName: "Wash", context: nil)
}
}

但没有成功。那么,我该如何检查我的应用程序是否是通过WatchOS上的Siri快捷方式启动的呢?

在AppDelegate类上检查此方法。指示应用程序启动原因的launchOptions字典。您将从LaunchOptionsKey获得信息。

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
return true
}

最新更新