Is it possible to add Multiple Notification Service Extension in one app?If Yes, then how to recognize which one will be used and how?
Basically there are two service providers for my app and both of them have their own payload for notification service extension so is there any way by which I can add two different notification service extension and according to value in payload of serviceProvider == "1" I can tell app to run the Extension of serviceProvider 1
NotificationServiceExtension
The docs doesn't say anything about that. In my tests it didn't work. All notifications were getting processed through a single
NotificationServiceExtension
.NotificationContentExtension
For
NotificationContentExtension
the docs say:I verified ☝️ and it worked! FWIW you can use a single a Notification Content Extension for multiple categories.
What's also worth mentioning is that the default plist settings of a
NotificationServiceExtension
looks like this:It's not associating itself with any given category. I tried adding the
NSExtensionAttributes
, along with aUNNotificationCategoryExtension
key, value. But even though it compiled, it didn't work!. I think the way Apple decides how to use a Notification Service Extension is based off these two fields:apns-topic
NSExtensionPointIdentifer
field which must always be set tocom.apple.usernotifications.service
. The value of this is different for Today's extension or content notification extension, etc.So if you have two service extensions then the system has no way of deciding which one it should show
However the default plist settings of a
NotificationContentExtension
does haveUNNotificationCategoryExtension
key, value included:Also thinking about this more, if an app has 5 different categories and has a service extension for each each of them and receives them all at once, then it would fire up 5 different processes (think of 5 parallel
didFinishLaunchingWithOptions
callbacks. One for each category and process) and that's bad for the OS.While not certain, the documentation on Signal's NotificationService class supports this theory.
The same isn't true for
NotificationContentExtension
. It can't process 5 contentExtensions at once. Because it's a UI featured which is gated by the main thread.