diff --git a/NucleicRemote/NucleicRemote/Notifications.swift b/NucleicRemote/NucleicRemote/Notifications.swift index fb2d0dc..b2c601f 100644 --- a/NucleicRemote/NucleicRemote/Notifications.swift +++ b/NucleicRemote/NucleicRemote/Notifications.swift @@ -108,21 +108,15 @@ final class NotificationRouter: NSObject { center.removePendingNotificationRequests(withIdentifiers: [identifier]) } - /// Recall the shared "waiting for your approval" attention notification once nothing is pending - /// anywhere. This is the remote wake tickle (delivered under `approvalTickleIdentifier`) that a - /// prior push left on the lock screen — the counterpart to the per-approval `withdrawApproval`. - /// Arrives two ways: the relay's silent `clear` push (phone was away), or the store's own - /// reconcile when a live socket sees the last approval resolve. Also sweeps any per-approval - /// locals a live socket posted but hasn't individually withdrawn, so the lock screen ends clean. + /// Recall the generic remote wake tickle ("A session is waiting for your approval") once no + /// approval is pending anywhere. This targets *only* the shared tickle (delivered under + /// `approvalTickleIdentifier`, its APNs collapse-id) — the content-free push a phone gets while + /// away. Per-approval notifications are each recalled by `withdrawApproval(_:)` as they resolve, + /// so a still-pending approval's own banner is never swept away by this. func withdrawApprovalAttention() { let center = UNUserNotificationCenter.current() center.removeDeliveredNotifications(withIdentifiers: [Self.approvalTickleIdentifier]) center.removePendingNotificationRequests(withIdentifiers: [Self.approvalTickleIdentifier]) - center.getDeliveredNotifications { delivered in - let stale = delivered.map(\.request.identifier).filter { $0.hasPrefix("approval-") } - guard !stale.isEmpty else { return } - UNUserNotificationCenter.current().removeDeliveredNotifications(withIdentifiers: stale) - } } /// Keep the app-icon badge equal to the NEEDS YOU count (UX_IOS §8).