Как открыть определенный контроллер представления из пользовательского действия уведомления в watchOS 3

#watchkit #watchos-3 #wkinterfacecontroller #usernotifications

#watchkit #watchos-3 #wkinterfacecontroller #пользовательские уведомления

Вопрос:

Я разрабатываю WatchOS3 приложение, в котором пользователь получает локальные уведомления с пользовательскими действиями. У пользователя есть 2 пользовательских действия, которые он может вызвать в уведомлении, вариант 1 и вариант 2. После того, как пользователь нажмет на любую из опций, приложение должно запуститься в определенном представлении.

До сих пор действия с уведомлениями обрабатывались правильно с помощью этой функции в ExtenionsDelegate :

 func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
    print("Tapped in notification")
    let identifier = response.actionIdentifier
    print(identifier)

    switch(identifier){
    case "option1":
        print("tapped option1")
    case "option2":
        print("tapped option2")
    default: break
    }
    completionHandler()
}
 

И вот код из моего основного InterfaceController , в котором определены категории уведомлений:

 func actioncategories() { 

    let option1 = UNNotificationAction(identifier: "option1", title: "Test Option 1", options: .foreground) //Button 1
    let option2 = UNNotificationAction(identifier: "option2", title: "Test Option 2", options: .foreground) //Button 2

    let actioncategory = UNNotificationCategory(identifier: "action_category", actions: [option1, option2], intentIdentifiers: []) 

    UNUserNotificationCenter.current().setNotificationCategories([actioncategory]) //setting actions amp; categories
}
 

Теперь, как мне указать моему приложению запускаться в определенном представлении при нажатии на опцию 1 или опцию 2?

Ответ №1:

Я нашел решение:

  • Вместо того, чтобы использовать func userNotificationCenter в ExtensionsDelegate, используйте func handleAction(с идентификатором идентификатора: String?, для уведомления: UNNotification) в вашем главном интерфейсном контроллере
  • с помощью presentController(с именем: , context: ) вы можете открыть определенное представление

Код (в InterfaceController):

 override func handleAction(withIdentifier identifier: String?, for notification: UNNotification) {
    print("Tapped in notification")
    print(identifier)

    switch(identifier){
    case "option1"?:
        print("tapped option1")
        presentController(withName: "Option1_Screen", context: "segue")
    case "option2"?:
        print("tapped option2")
        presentController(withName: "Option2_Screen", context: "segue")
    default: break
    }
}