Можно ли отключить механизм открытия приложений, когда пользователь нажимает на баннер уведомлений? - PullRequest
1 голос
/ 21 апреля 2020

Использование 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()
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...