iOS — Откройте определенную вкладку при нажатии на локальное уведомление

#ios #swift #swiftui #notifications

Вопрос:

Я хочу реализовать функцию глубокой связи с локальными уведомлениями в iOS 14 .

Мне удалось открыть конкретную страницу при нажатии на уведомление о баннере (то, которое появляется, когда экран разблокирован). Для этого я переопределил UNNotificationCenterDelegate и его функции, и я могу переключать openSchedule логическое значение. Поскольку я также создал класс ObservableObject , я могу переключать вкладки в своем SwiftUI TabView всякий раз , когда изменяется логическое значение.

 import Foundation import UserNotifications  class NotificationDelegate: NSObject, ObservableObject, UNUserNotificationCenterDelegate {    @Published var openSchedule: Bool = false    func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -gt; Void) {  log.debug("Notification will present!")  completionHandler([.badge, .banner, .sound])  }    func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -gt; Void) {  log.debug("Notification clicked!")  openSchedule.toggle()  completionHandler()  }  }  

Проблема: Однако вторая функция не вызывается при нажатии на уведомление с панели уведомлений (т. Е. При скольжении вниз с верхней части экрана и нажатии на уведомление).

ИЗМЕНИТЬ: Проблема возникает только тогда, когда приложение не работает в фоновом режиме (т. Е. Удалено из пользовательского интерфейса переключателя приложений). Он работает, когда приложение находится в фоновом режиме и при нажатии на уведомление.