iOS 12: notification grouping

This article, like the previous one , is devoted to the changes in Notifications that appeared in iOS 12.



In the past, the material I talked about the general innovations, this time I’ll dwell more on the grouping of notifications.


Grouping in iOS 12


In order for notifications coming from your application to be grouped in iOS 12, you do not need to do anything, the grouping will be performed automatically. Notifications on the screen will start to stack when their number reaches 5.



The user has the opportunity to influence the grouping through the system settings.




Grouping setup


We can influence the grouping of messages only if the Automatic flag is used in the settings. To do this, you need to specify the thread-id parameter in the notification. Also pass the thread-id to the subtitle notification for clarity:


let content = UNMutableNotificationContent() content.threadIdentifier = threadId content.subtitle = "Thread ID: \(threadId)" 

We send several messages and see the result of grouping:



You can also pass thread-id to push notifications:


 { "aps" : { "alert" : { "title" : "Cat Title" "body" : "Cat Body" } "thread-id" : "all-cats" } } 

When you specify an identifier for a notification, do not forget to specify it in UNNotificationCategory , otherwise in the Extension for notifications they will not be processed:


 UNNotificationCategory(identifier: "Cat-Category", actions: actions, intentIdentifiers: ["all-cats", "3-star-cats"], options: []) 

For a category, you can specify the message format that will be displayed to the user on the device; this is another of the innovations of iOS 12. This can be done only when the category is initialized:


 UNNotificationCategory(identifier: "category-simple", actions: actions, intentIdentifiers: ["all-cats", "3-star-cats"], hiddenPreviewsBodyPlaceholder: nil, categorySummaryFormat: "%u     %@", options: []) 

The % u parameter is responsible for the number of messages in the group, it can be modified with the help of the summaryArgumentCount argument. For example, you published a new collection of cats, in which 10 new pictures. It makes no sense to send 10 guns to the user; you can send one message with a counterter equal to 10. The % @ parameter displays the value of the variable summaryArgument variable:


 let content = UNMutableNotificationContent() content.summaryArgumentCount = 10 content.summaryArgument = " " 


In each group we have 3 messages, but due to the fact that the parameter summaryArgumentCount is specified , the number of messages is displayed as 20. And summaryArgument allows us to add the name of the category to which the push notifications refer. Not bad, but now we have a problem with localization.


Localization


To implement the task of localization, add to the project Stringdict File .



We change the Localized String Key key to NOTIFICATION_SUMMARY , otherwise the values ​​from the dictionary will not be processed, despite the fact that when a localized string is received, the key with the name of the dictionary is passed as a parameter. The remaining values ​​are shown in the figure:



In the File Inspector for the dictionary, select Localize .



Specify files for localization.



Go to the project settings and add a language to localize Russian (ru) .



Extra files can be removed from the project.



In the code, we get the localized string and pass it as the categorySummaryFormat parameter:


 let summary = NSString.localizedUserNotificationString(forKey: "NOTIFICATION_SUMMARY", arguments: nil) let category = UNNotificationCategory(identifier: "Cat-Category", actions: actions, intentIdentifiers: ["all-cats", "3-star-cats"], hiddenPreviewsBodyPlaceholder: nil, categorySummaryFormat: summary, options: []) 

As a result, we get excellent localization of the application.



The project created for the previous article has been updated, the code can be found on github . Two reports at WWDC were devoted to the implementation of notifications: What's New in User Notifications and Using Grouped Notifications . We can discuss innovations at MBLT DEV 2018 in Moscow on September 28.


Have a good week everyone! ^ _ ^

Source: https://habr.com/ru/post/416439/


All Articles