Действия и категории уведомлений
Добавляйте интерактивные действия к уведомлениям.
«Действия и категории уведомлений» — бесплатный урок Swift Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Swift Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Swift Academy содержит 4 уроков всего.
Интерактивные уведомления
Уведомления могут не только отображать текст — в них можно предложить кнопки. Пользователь может ответить на сообщение, accept приглашение или отложить напоминание, не открывая приложение. Это создаётся из действий, объединённых в категории.
import UserNotifications
// Category = a set of actions
// Each delivered notification names its category
// so the system shows the right buttonsОпределение действия
У UNNotificationAction есть идентификатор, по которому вы сопоставите действие позже, локализованный заголовок на кнопке и такие параметры, как .destructive или .foreground (этот параметр запускает приложение).
import UserNotifications
let accept = UNNotificationAction(
identifier: "ACCEPT",
title: String(localized: "Accept"),
options: [.foreground])
let decline = UNNotificationAction(
identifier: "DECLINE",
title: String(localized: "Decline"),
options: [.destructive])Объединение действий в категорию
UNNotificationCategory объединяет действия под одним идентификатором категории. Порядок действий в массиве определяет порядок кнопок. Зарегистрируйте категории один раз при запуске через центр уведомлений.
import UserNotifications
let inviteCategory = UNNotificationCategory(
identifier: "INVITE",
actions: [accept, decline],
intentIdentifiers: [],
options: [])
UNUserNotificationCenter.current()
.setNotificationCategories([inviteCategory])Назначение уведомлению категории
Чтобы кнопки появились, содержимое уведомления должно задать categoryIdentifier зарегистрированной категории. Для удалённых уведомлений сервер отправляет "category": "INVITE" внутри словаря aps.
import UserNotifications
let content = UNMutableNotificationContent()
content.title = String(localized: "New invite")
content.body = String(localized: "Ada invited you")
content.categoryIdentifier = "INVITE"Обработка выбранного действия
Когда пользователь нажимает кнопку, срабатывает didReceive response делегата, а в response.actionIdentifier устанавливается идентификатор действия. Используйте переключатель, чтобы выполнить нужную работу.
import UserNotifications
func userNotificationCenter(
_ center: UNUserNotificationCenter,
didReceive response: UNNotificationResponse
) async {
switch response.actionIdentifier {
case "ACCEPT": print("accepted")
case "DECLINE": print("declined")
default: break
}
}Идентификаторы действия по умолчанию и закрытия
Всегда существуют два системных идентификатора: UNNotificationDefaultActionIdentifier означает, что пользователь нажал текст уведомления, чтобы открыть приложение, а UNNotificationDismissActionIdentifier — что он закрыл уведомление. Обрабатывайте их вместе с собственными действиями.
import UserNotifications
func route(_ id: String) {
switch id {
case UNNotificationDefaultActionIdentifier:
print("opened the app")
case UNNotificationDismissActionIdentifier:
print("dismissed")
default:
print("custom action", id)
}
}Действия с вводом текста
UNTextInputNotificationAction показывает встроенное текстовое поле — это удобно для быстрых ответов. Оно добавляет заголовок кнопки и замещающий текст для поля ввода.
import UserNotifications
let reply = UNTextInputNotificationAction(
identifier: "REPLY",
title: String(localized: "Reply"),
options: [],
textInputButtonTitle: String(localized: "Send"),
textInputPlaceholder: String(localized: "Message"))Чтение введённого текста
Для действия с текстом ответ имеет тип UNTextInputNotificationResponse. Приведите его к этому типу, чтобы прочитать userText — строку, введённую пользователем.
import UserNotifications
func handle(_ response: UNNotificationResponse) {
if let textResponse = response
as? UNTextInputNotificationResponse {
let message = textResponse.userText
print("reply:", message)
}
}Параметры категории
Параметры категории уточняют поведение: .customDismissAction передаёт событие закрытия вашему делегату, .hiddenPreviewsShowTitle показывает заголовок, даже если предварительный просмотр скрыт на экране блокировки, а .allowInCarPlay разрешает отображение в CarPlay.
import UserNotifications
let category = UNNotificationCategory(
identifier: "MESSAGE",
actions: [reply],
intentIdentifiers: [],
options: [.customDismissAction,
.hiddenPreviewsShowTitle])
_ = categoryДействия в фоне и на переднем плане
Без параметра .foreground действие запускает ваш обработчик в фоне, не выводя приложение на передний план, — это удобно для откладывания или отметки «нравится». С параметром .foreground приложение запускается, и вы можете показать интерфейс. Выбирайте вариант в зависимости от того, нужно ли пользователю что-либо видеть.
import UserNotifications
let snooze = UNNotificationAction(
identifier: "SNOOZE",
title: String(localized: "Snooze"),
options: []) // background, no app launch
let open = UNNotificationAction(
identifier: "OPEN",
title: String(localized: "Open"),
options: [.foreground]) // launches app
_ = (snooze, open)Полный сценарий reply
Объедините действие с текстом, категорию и обработчик, который отличает введённый ответ от обычного открытия. Этот шаблон используется для ответов на сообщения прямо в уведомлении.
import UserNotifications
func handle(_ response: UNNotificationResponse) async {
switch response.actionIdentifier {
case "REPLY":
let text = (response as?
UNTextInputNotificationResponse)?.userText ?? ""
print("send reply:", text)
case UNNotificationDefaultActionIdentifier:
print("open conversation")
default:
break
}
}Быстрая проверка
Вспомните, как система определяет, какие кнопки показывать.
Повторение
Вы изучили интерактивные уведомления:
- Создавайте
UNNotificationAction(включаяUNTextInputNotificationAction) и объединяйте их вUNNotificationCategory. - Регистрируйте категории при запуске; задавайте
categoryIdentifierдля содержимого (илиcategoryв уведомлении), чтобы показать кнопки. - Обрабатывайте
response.actionIdentifier, включая идентификаторы действия по умолчанию и закрытия, а для ответов читайтеuserText. - Не указывайте
.foregroundдля фоновых действий, например snooze.
Изучай Swift с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 122
- Уроки
- 409
Часто задаваемые вопросы
Урок «Действия и категории уведомлений» бесплатный?
Да — полный текст урока «Действия и категории уведомлений» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Swift Academy, подпишись на CoddyKit PRO. Курс Swift Academy содержит 4 уроков всего.
Чему я научусь в уроке «Действия и категории уведомлений»?
Добавляйте интерактивные действия к уведомлениям. Ты практикуешь Swift Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Swift Academy?
Предыдущий опыт не требуется. Swift Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Действия и категории уведомлений»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Swift Academy?
Да. Каждый урок Swift Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Регистрация для push-уведомлений
- Обработка полезных данных уведомлений
- Фоновые задачи и обновление
- Действия и категории уведомлений