Главная » Хабрахабр » iOS 12: группировка уведомлений

iOS 12: группировка уведомлений

Эта статья, как и предыдущая, посвящена изменениям в Notifications, которые появились в iOS 12.

В прошлом материале я рассказал об общих нововведениях, в этот раз остановлюсь подробнее на группировке уведомлений.

Группировка в iOS 12

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

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

  • Automatic (по умолчанию) — приложение управляет настройками группировки.
  • By App — настройки приложения игнорируются, все уведомления от приложения складываются в единый стек.
  • Off — настройки приложения игнорируются, группировка уведомлений отключается.

Настройка группировки

Для этого в нотификации необходимо указать параметр thread-id. На группировку сообщений мы можем влиять только в случае использования флага Automatic в настройках. Также передадим thread-id в subtitle уведомления для наглядности:

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

Отправляем несколько сообщений и видим результат группировки:

Также можно передать thread-id в пуш нотификации:

"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: [])

Например, вы опубликовали новую подборку котиков, в которой 10 новых картинок. Параметр %u отвечает за количество сообщений в группе, его можно модифицировать с помощью аргумента summaryArgumentCount. Параметр %@ отобразит на экране значение переменной summaryArgument: Нет смысла присылать пользователю 10 пушей, можно отправить одно сообщение с каунтером, равным 10.

let content = UNMutableNotificationContent()
content.summaryArgumentCount = 10
content.summaryArgument = "Все Коты"

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

Локализация

Для реализации задачи по локализации добавим в проект 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: [])

В результате получаем отличную локализацию приложения.

Два доклада на WWDC были посвящены реализации нотификаций: What’s New in User Notifications и Using Grouped Notifications. Проект, созданный для прошлой статьи был обновлён, с кодом можно ознакомиться на github. Обсудить нововведения сможем на MBLT DEV 2018 в Москве 28 сентября.

^_^ Всем хорошей недели!


Оставить комментарий

Ваш email нигде не будет показан
Обязательные для заполнения поля помечены *

*

x

Ещё Hi-Tech Интересное!

Автомобиль на водороде. Пора ли прощаться с бензином?

К нашей прошлой статье о водородной энергетике вы написали очень интересные и справедливые комментарии, ответы на которые вы сможете найти в этом материале, посвященном использованию водорода в автомобилях. Привет, Хабр! Но при этом водород считается наиболее перспективным видом альтернативного топлива ...

Неконференция Web Summit

Потому что это мероприятие значительнее, масштабнее и проходит не только на заявленной площадке, а охватывает, или, скорее, захватывает весь город. Размышляя, на какую конференцию поехать в этом году, я остановил свой выбор на Web Summit, который, по сути, конференцией не ...