Скрыть уведомления, полученные через расширение NotificationService

Я использую цель расширения NotificationService, чтобы иметь возможность изменять push-уведомления до их представления. Он работает хорошо, но есть некоторые уведомления, которые я бы не хотел предоставлять пользователю после их обработки.

Я попытался установить для заголовка и тела bestAttemptContent значение «», но он вернул полное уведомление.

Я также пробовал установить aps ["content-available"] на 1 и body на "", но получаю тот же эффект.


person Leguman    schedule 16.03.2018    source источник


Ответы (1)


Ситуация

На самом деле я пытался добиться того же, что и вы, управляя тем, какие уведомления будут доставляться на конкретное устройство, используя расширение службы уведомлений локально. Однако мне пришлось выяснить, что это по замыслу ...

  • ... вы не можете отменить уведомление через дискретный API.
  • ... если вы очистите содержимое уведомления, оно будет доставлено так, как если бы расширение службы уведомлений никогда не вызывалось.

Это связано с тем, что Apple не хочет, чтобы вы спамили телефон пользователя уведомлениями (даже или особенно когда они обрабатываются в фоновом режиме и даже не доставляются), поскольку это может истощить срок службы батареи. E. грамм.

Решение

У вас есть четыре возможных варианта действий:

  • Используйте беззвучное нажатие. Затем запускайте локальные уведомления. Примечание. Тихое нажатие не всегда надежно.
  • Используйте VoIP push. Это то, что использует WhatsApp e. грамм. и это позволило бы такую ​​вещь, как отмена уведомлений, насколько я знаю. Однако Apple строга, когда дело доходит до обзора приложений: только приложениям VoIP разрешено использовать VoIP push (я предполагаю, что именно поэтому WhatsApp ввел голосовые вызовы, потому что им нужен VoIP push для дешифрования своих сообщений в фоновом режиме, когда расширение службы уведомлений еще не вариант под iOS 9).
  • Обработайте любую настраиваемую логику отмены на стороне сервера, отправляя уведомления только тем пользователям, которые должны получать эти уведомления прямо сейчас.
  • Преобразуйте текст уведомления во что-то непустое, что, тем не менее, скрывает исходный текст уведомления. Это может быть полезно, если вы e. грамм. разошлите сообщение о том, что профессиональная версия вашего приложения в настоящее время доступна со скидкой: для существующих профессиональных пользователей вы можете просто отредактировать текст, чтобы он читал «Спасибо за то, что вы являетесь профессионалом».
person fredpi    schedule 16.03.2018
comment
Начиная с iOS 13 push-уведомления VoIP больше не являются решением, так как вы должны сообщать о новом входящем вызове через CallKit при получении push-уведомлений VoIP. - person pepsy; 19.12.2019
comment
Добавим немного к этому замечательному ответу: 1. Начиная с iOS 13.3 есть новое право com.apple.developer.usernotifications.filtering, которое позволяет NotificationExtension фильтровать уведомления. Вы можете запросить один для себя. 2. Есть еще одно специальное право com.apple.developer.pushkit.unrestricted-voip, которое позволяет приложению сохранять поведение push-уведомлений VoIP до iOS13. На сегодняшний день его используют многие крупные приложения для магазинов приложений: Signal, Telegram, FB Messenger, Skype, Whatsapp. Официального способа получить его нет. - person maqszur; 02.03.2021