Многократное расширение службы уведомлений в одном приложении
Можно ли добавить несколько расширений службы уведомлений в одном приложении? Если да, то как узнать, какое из них будет использоваться и как?
По сути, для моего приложения есть два поставщика услуг, и у каждого из них есть своя полезная нагрузка для расширения службы уведомлений, поэтому есть ли способ, которым я могу добавить два разных расширения службы уведомлений и в соответствии со значением в полезной нагрузке serviceProvider == "1" I может сказать приложение, чтобы запустить Расширение serviceProvider 1
0 ответов
NotificationServiceExtension
В документации об этом ничего не говорится. В моих тестах это не сработало. Все уведомления обрабатывались через единыйNotificationServiceExtension
.
NotificationContentExtension
За NotificationContentExtension
в документах говорится:
Вы можете добавить в свой проект несколько расширений приложения содержимого уведомлений, но каждое из них должно поддерживать уникальный набор категорий уведомлений. Вы указываете категории для расширения вашего приложения в его файле Info.plist, как описано в разделе Объявление поддерживаемых типов уведомлений.
Я проверил и все заработало!
Также стоит упомянуть, что настройки plist по умолчанию для NotificationServiceExtension
выглядит так:
Он не ассоциирует себя ни с какой категорией. Я попытался добавитьNSExtensionAttributes
вместе с UNNotificationCategoryExtension
ключ, значение. Но даже если он скомпилирован, это не сработало!. Я думаю, что способ, которым Apple решает, как использовать расширение службы уведомлений, основан на этих двух полях:
- Целевой объект, перед которым его bundleID имеет префикс как
apns-topic
- An
NSExtensionPointIdentifer
поле, которое всегда должно быть установлено наcom.apple.usernotifications.service
. Значение этого параметра другое для сегодняшнего расширения, расширения уведомлений о содержимом и т. Д.
Таким образом, если у вас есть два служебных расширения, система не может решить, какое из них следует отображать.
Однако настройки plist по умолчанию для NotificationContentExtension
имеет UNNotificationCategoryExtension
ключ, значение включено:
Также подумайте об этом, если приложение имеет 5 разных категорий и имеет расширение службы для каждой из них и получает их все одновременно, тогда оно запускает 5 разных процессов (подумайте о 5 параллельных didFinishLaunchingWithOptions
обратные вызовы. По одному на каждую категорию и процесс), и это плохо для ОС.
Хотя это и не совсем понятно, документация по классу Signal NotificationService поддерживает эту теорию.
// Note that the NSE does *not* always spawn a new process to // handle a new notification and will also try and process notifications // in parallel. `didReceive` could be called twice for the same process, // but will always be called on different threads. To deal with this we // ensure that we only do setup *once* per process and we dispatch to // the main queue to make sure the calls to the message fetcher job // run serially.
То же самое не верно для NotificationContentExtension
. Он не может обрабатывать 5 contentExtensions одновременно. Потому что это пользовательский интерфейс, управляемый основным потоком.