Всем привет! Сегодня разберем одну из мощных, но часто упускаемых из виду возможностей iOS - текстовый ввод прямо из уведомления. Представьте: пользователь получает сообщение и может сразу ответить, не открывая приложение. Это не магия, а встроенный механизм платформы, который открывает новые сценарии взаимодействия.
Большинство приложений используют уведомления как односторонний канал: показали сообщение -> нажали -> перешли в приложение. Но iOS уже несколько лет позволяет превращать пуши в интерактивные интерфейсы. Помимо стандартных кнопок, система поддерживает поле для ввода текста - идеально для быстрых ответов, подтверждений или простых команд.
Философия категорий:
Ключевое понятие здесь: категория уведомлений (UNNotificationCategory). Это не просто техническая группировка, а смысловая. Категория определяет, какие действия доступны для конкретного типа уведомлений. Чат, напоминание, системное событие - у каждого свой набор возможных реакций.
// Определяем действие с текстовым полем
let quickReplyAction = UNTextInputNotificationAction(
identifier: "QUICK_REPLY",
title: "Ответить",
options: [],
textInputButtonTitle: "Отправить",
textInputPlaceholder: "Ваш ответ"
)
// Создаем категорию для сообщений чата
let chatCategory = UNNotificationCategory(
identifier: "CHAT_MESSAGE",
actions: [quickReplyAction],
intentIdentifiers: [],
options: []
)
// Регистрируем категорию в системе
UNUserNotificationCenter.current().setNotificationCategories([chatCategory])
Как сообщить системе, какое уведомление показать:
Категория - это шаблон. Чтобы она сработала, нужно указать ее идентификатор при создании самого уведомления:
let content = UNMutableNotificationContent()
content.title = "Новое сообщение"
content.body = "Привет! Как дела?"
content.categoryIdentifier = "CHAT_MESSAGE" // Ключевая связка
Теперь, когда это уведомление появится, система автоматически добавит к нему кнопку «Ответить» с текстовым полем.
Обработка введенного текста:
func userNotificationCenter(
_ center: UNUserNotificationCenter,
didReceive response: UNNotificationResponse,
withCompletionHandler completionHandler: @escaping () -> Void
) {
if response.actionIdentifier == "QUICK_REPLY", let textResponse = response as? UNTextInputNotificationResponse {
let userText = textResponse.userText
// Отправляем текст на сервер, сохраняем локально и т.д.
processQuickReply(userText)
}
completionHandler()
}
Ограничения и особенности:
🔵Нельзя кастомизировать UI: поле ввода и кнопка - системные, их внешний вид определяется iOS.
🔵Требуется разрешение на уведомления: без requestAuthorization функция не работает.
🔵Работает только с категориями: простые уведомления без categoryIdentifier не поддерживают текстовый ввод.
🔵Лимит на количество действий: вместе с текстовым можно добавить еще до 3 обычных действий.
🔵Фокус на кратковременные сценарии: система не предназначена для длинных текстов - это инструмент для быстрых реакций.
🔗 Ссылка на подробную статью
💡 Вывод:
Добавление текстового ввода в уведомления - это шаг к тому, чтобы сделать пуши не просто напоминаниями, а полноценными точками взаимодействия. Это меняет парадигму: вместо «уведомить и ждать открытия приложения» мы получаем «уведомить и сразу получить ответ».
UNTextInputNotificationAction - это не просто техническая деталь, а инструмент для сокращения пути пользователя к цели. В мире, где внимание - самый ценный ресурс, возможность быстро выполнить действие в один тап может стать реальным конкурентным преимуществом.
➡️ Подписаться на канал
Мобильный трудоголик