#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() } }
Проблема: Однако вторая функция не вызывается при нажатии на уведомление с панели уведомлений (т. Е. При скольжении вниз с верхней части экрана и нажатии на уведомление).
ИЗМЕНИТЬ: Проблема возникает только тогда, когда приложение не работает в фоновом режиме (т. Е. Удалено из пользовательского интерфейса переключателя приложений). Он работает, когда приложение находится в фоновом режиме и при нажатии на уведомление.