Можем ли мы избежать отображения push-уведомлений

Существует сценарий, в котором мне нужно проверить, должен ли пользователь получать push-уведомление в зависимости от его местоположения. Я знаю, что UNNotificationServiceExtension помогает нам перехватывать уведомления и способствует созданию push-контента. Но возможно ли для этого класса или из любого другого места, чтобы мы не отображали push-уведомление, проверяя местоположение пользователя?

Это не значит, что я хочу делать это каждый раз. Но только когда мое условие не выполняется. В содержании уведомления я получаю последнее отслеживаемое местоположение пользователя, которое я буду использовать для сравнения с текущим местоположением пользователя.
Я прошел через это, но не получил убедительного ответа.
Примечание : я не ищу решения для бесшумных push-уведомлений.


person Nitish    schedule 13.09.2018    source источник


Ответы (1)


Используя UNUserNotificationCenter, вы можете отменить одно уведомление по идентификатору.

UNUserNotificationCenter.current().removePendingNotificationRequests(withIdentifiers: [SomeID])

Вам нужно будет реализовать UNUserNotificationCenterDelegate и реализовать userNotificationCenter(_:willPresent).

Что-то типа:

func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
        let identifier = notification.request.identifier
        let content = notification.request.content
        //your logic here
    }
person ahbou    schedule 13.09.2018
comment
Какой может быть идентификатор для push-уведомления? - person Nitish; 13.09.2018
comment
Верно. Но какой идентификатор (параметр) мне нужно передать? Откуда бы мне это взять? - person Nitish; 13.09.2018
comment
можете ли вы добавить код, который вы используете для создания и представления ваших уведомлений? - person ahbou; 13.09.2018
comment
Это полезная нагрузка: { aps = { alert = Вот как будет выглядеть ваше сообщение! Введите свое сообщение в текстовую область и получите предварительный просмотр прямо здесь; значок = 1; изменяемое содержимое = 1; звук = по умолчанию; }; URL-адрес вложения = ; глубокая ссылка = ; message_id = 1793; } - person Nitish; 13.09.2018
comment
Хорошо, но где вы это делаете? В содержимом уведомления я получаю последнее отслеживаемое местоположение пользователя, которое я буду использовать для сравнения с текущим местоположением пользователя. - person ahbou; 13.09.2018
comment
Это предлагаемое изменение. В настоящее время выполняется веб-разработчиком. - person Nitish; 13.09.2018
comment
Я разместил образец реализации (в AppDelegate). По сути, у вас есть 2 варианта: получить местоположение пользователя из содержимого уведомления или позвонить в свой менеджер местоположения и выполнить свои проверки. - person ahbou; 13.09.2018