Как проверить, запускается ли мое приложение с помощью ярлыка Siri на WatchOS? - PullRequest
0 голосов
/ 28 апреля 2020

Я пытаюсь создать собственный ярлык SiriKit на WatchOS. Я прочитал этот вопрос для проблемы iOS, но я считаю, что решение в watchOS другое.

Чтобы сделать это, я выполнил следующие действия:

  1. В цели расширения WatchKit я добавил возможность Siri;
  2. Я создал расширение Intents через: File> New> Target> watchOS> Расширение Intents;
  3. In the Intent Группа расширений, я создал файл определения намерения SiriKit. В этом файле я сделал некоторые пользовательские изменения и установил флажок «Намерение подходит для предложений Siri»;
  4. В группе «Расширение намерений» я также создал файл с именем 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()
    }
}
Наконец, в Info.plist внутри группы расширений Intent я добавил «HandWashIntent» в IntentsSupported. Точно так же в Info.plist внутри группы расширений WatchKit я добавил «HandWashIntent» в NSUserActivityTypes.

Итак, в общем, я хочу, чтобы голосовой ярлык «Начать руку ва sh "до конца. Этот ярлык откроет приложение и pu sh определенный c контроллер. Я прочитал в вопрос , что WKExtensionDelegate в watchOS «эквивалентен» AppDelegate в iOS. Затем я попытался манипулировать userActivity в ExtensionDelegate, но функции для этого не существует.

Затем я использовал функцию handle (_:) в ExtensionDelegate:

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

но безуспешно. Итак, как мне проверить, запускается ли мое приложение с помощью ярлыка Siri на WatchOS?

1 Ответ

0 голосов
/ 28 апреля 2020

Проверьте этот метод в классе AppDelegate. Словарь launchOptions, указывающий причину запуска приложения. От LaunchOptionsKey вы получите информацию.

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