Использование iOS13.4, XCode11.4, Swift5.2,
В моем текущем приложении мне удалось создать локальное уведомление. Баннер показывается, когда происходит уведомление. Баннер отображается независимо от состояния приложения (т. Е. Открытое приложение работает на переднем плане или в фоновом режиме или даже если приложение полностью закрыто). Пока все хорошо:)
Теперь мой вопрос: Можете ли вы отключить механизм открытия приложений, когда пользователь нажимает на баннер уведомлений?
В настоящее время я использую UNUserNotificationCenterDelegate's Делегируйте методы для завершения уведомления (т.е. запускайте некоторый пользовательский код, когда пользователь нажимает на баннер). (см. фрагмент кода ниже)
Однако я не хочу, чтобы приложение обязательно открывалось для выполнения работы по завершению! Это может быть идеально сделано в фоновом режиме для улучшения качества обслуживания клиентов.
Можно ли запустить какой-нибудь код, когда баннер нажимается, но сделать это без открытия приложения? И если да, то как?
Вот фрагмент кода:
import UIKit
class MyViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let content = UNMutableNotificationContent()
content.title = "My Notification Title"
content.categoryIdentifier = UUID().uuidString
var notificationIdentifier = "23224-23134-234234"
var notificationDate = Date(timeInterval: 30, since: Date())
let notificationTriggerKind = Calendar.current.dateComponents([.day, .month, .year, .hour, .minute, .second], from: notificationDate)
let notificationTrigger = UNCalendarNotificationTrigger(dateMatching: notificationTriggerKind, repeats: false)
let notificationRequest = UNNotificationRequest(identifier: notificationIdentifier, content: content, trigger: notificationTrigger)
let notificationCenter = UNUserNotificationCenter.current()
notificationCenter.delegate = self
notificationCenter.add(notificationRequest) {(error) in if let error = error { print("error: \(error)") } }
}
}
extension MyViewController: UNUserNotificationCenterDelegate {
// kicks in when App is running in Foreground (without user interaction)
func userNotificationCenter(_ center: UNUserNotificationCenter,
willPresent notification: UNNotification,
withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
// ...do your custom code...
completionHandler([.alert, .sound])
}
// kicks in when App is running in Foreground or Background
// (AND App is open) AND user interacts with notification
func userNotificationCenter(_ center: UNUserNotificationCenter,
didReceive response: UNNotificationResponse, withCompletionHandler
completionHandler: @escaping () -> Void) {
// ... do your custom code ....
return completionHandler()
}
}