- PVSM.RU - https://www.pvsm.ru -
Эта статья, как и предыдущая [1], посвящена изменениям в Notifications, которые появились в iOS 12.

В прошлом материале я рассказал об общих нововведениях, в этот раз остановлюсь подробнее на группировке уведомлений.
Для того, чтобы приходящие от вашего приложения нотификации группировались в iOS 12, не нужно ничего предпринимать, группировка будет выполняться автоматически. Нотификации на экране начнут собираться в стек, когда их количество достигнет 5.

У пользователя есть возможность повлиять на группировку через системные настройки.

На группировку сообщений мы можем влиять только в случае использования флага Automatic в настройках. Для этого в нотификации необходимо указать параметр thread-id. Также передадим thread-id в subtitle уведомления для наглядности:
let content = UNMutableNotificationContent()
content.threadIdentifier = threadId
content.subtitle = "Thread ID: (threadId)"
Отправляем несколько сообщений и видим результат группировки:

Также можно передать thread-id в пуш нотификации:
{
"aps" : {
"alert" : {
"title" : "Cat Title"
"body" : "Cat Body"
}
"thread-id" : "all-cats"
}
}
Когда вы указываете идентификатор у нотификации, не забывайте указывать его в UNNotificationCategory, иначе в Extension'е для уведомлений они обрабатываться не будут:
UNNotificationCategory(identifier: "Cat-Category",
actions: actions,
intentIdentifiers: ["all-cats", "3-star-cats"],
options: [])
Для категории можно указать формат сообщения, которое будет отображаться у пользователя на устройстве, это ещё одно из нововведений iOS 12. Сделать это можно только при инициализации категории:
UNNotificationCategory(identifier: "category-simple",
actions: actions,
intentIdentifiers: ["all-cats", "3-star-cats"],
hiddenPreviewsBodyPlaceholder: nil,
categorySummaryFormat: "%u новых котиков в разделе %@",
options: [])
Параметр %u отвечает за количество сообщений в группе, его можно модифицировать с помощью аргумента summaryArgumentCount. Например, вы опубликовали новую подборку котиков, в которой 10 новых картинок. Нет смысла присылать пользователю 10 пушей, можно отправить одно сообщение с каунтером, равным 10. Параметр %@ отобразит на экране значение переменной summaryArgument:
let content = UNMutableNotificationContent()
content.summaryArgumentCount = 10
content.summaryArgument = "Все Коты"

В каждой группе у нас по 3 сообщения, но благодаря тому, что указан параметр summaryArgumentCount, количество сообщений отображается, равным 20. А summaryArgument позволяет нам добавить название категории, к которой относятся пуш-уведомления. Неплохо, но теперь у нас проблема с локлизацией.
Для реализации задачи по локализации добавим в проект Stringdict File.

Меняем ключ Localized String Key на NOTIFICATION_SUMMARY, иначе значения из словаря не будут обрабатываться, несмотря на то, что при получении локализованной строки в качестве параметра передаётся ключ с названием словаря. Остальные значения показаны на рисунке:

В File Inspector для словаря выбираем Localize.

Указываем файлы для локализации.

Заходим в настройки проекта и добавляем язык для локализации Russian (ru).

Лишние файлы можно удалить из проекта.

В коде получаем локализованную строку и передаем её в качестве параметра categorySummaryFormat:
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: [])
В результате получаем отличную локализацию приложения.

Проект, созданный для прошлой статьи [1] был обновлён, с кодом можно ознакомиться на github [2]. Два доклада на WWDC были посвящены реализации нотификаций: What’s New in User Notifications [3] и Using Grouped Notifications [4]. Обсудить нововведения сможем на MBLT DEV 2018 [5] в Москве 28 сентября.
Всем хорошей недели! ^_^
Автор: Yuri
Источник [6]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/programmirovanie/285711
Ссылки в тексте:
[1] предыдущая: https://habr.com/company/e-Legion/blog/416307/
[2] github: https://github.com/GxocT/Catifications
[3] What’s New in User Notifications: https://developer.apple.com/videos/play/wwdc2018/710/
[4] Using Grouped Notifications: https://developer.apple.com/videos/play/wwdc2018/711/
[5] MBLT DEV 2018: https://mbltdev.ru/ru?utm_source=notifications_part2&utm_medium=habr
[6] Источник: https://habr.com/post/416439/?utm_source=habrahabr&utm_medium=rss&utm_campaign=416439
Нажмите здесь для печати.