Приложение Apple Watch: интерактивное уведомление -> Вызов определенного представления - PullRequest
0 голосов
/ 06 августа 2020

В настоящее время я разрабатываю приложение для watchOS 6 (независимое приложение) с использованием Swift / SwiftUI в XCode 11.5 на macOS Catalina. На данный момент мне не удается отобразить определенный вид, когда пользователь нажимает на уведомление, требующее действия.

Предположим, что следующая структура приложения:

  • AppStartView .swift -> Файл содержит представления SwiftUI, которые связаны вместе и отображаются, когда пользователь открывает приложение вручную
  • NotificationButtonTappedView.swift -> Файл содержит представление SwiftUI (имя: NotificationButtonTappedView () ), которое должно отображаться, когда пользователь нажимает кнопку в уведомлении (это не файл, содержащий дизайн для уведомления!)
  • HostingController.swift -> Возвращает представления AppStartView

Теперь мне удалось запланировать уведомление и получить нажатие кнопки. Поэтому я использую метод:

func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) в моем ExtensionDelegate .

Я определенно могу доказать, что это работает, однако я сделал не удается показать пользователю правильный вид. Я нашел несколько руководств / сообщений, показывающих процедуру для приложений iOS, однако эти инструкции не работают для watchOS (например, https://fluffy.es/open-specific-view-push-notification-tapped/) из-за различий между watchOS и iOS. Точнее, у меня два вопроса :

  1. Каковы лучшие практики разработки SwiftUI в отношении WKHostingControllers? Должен ли быть один WKHostingController для всего приложения или должен быть один WKHostingController для каждого набора представлений, которые независимы друг от друга и могут действовать как «точка входа» для приложения?
  2. В моем делегате расширения я хотел бы вызвать NotificationButtonTappedView () , когда пользователь нажал кнопку в уведомлении. Однако в момент нажатия кнопки приложение вызывается на передний план (настроено для кнопки уведомления) и запускает HostingController, который вызывает AppStartViews вместо NotificationButtonTappedView () . Моя первая идея заключалась в том, чтобы перезапустить HostingController внутри fun c userNotificationCenter (см. Выше) с параметром, указывающим, что должен отображаться NotificationButtonTappedView () . Моя вторая идея состояла в том, чтобы создать второй HostingController, вызывающий NotificationButtonTappedView () , и вызывать этот контроллер (pu sh it на «стандартном контроллере»). Однако до сих пор мне не удавалось перезапустить WKHostingController соответственно для вызова / pu sh нового. Есть идеи или другие предложения по решению этой проблемы?

Заранее спасибо.

...