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