Rich Notification е разширен формат на iOS push известия, който включва медийни приложения, интерактивни бутони и персонализирани интерфейси за подобряване на потребителското изживяване. За разлика от стандартните текстови известия, Rich Notification може да показва изображения, видео и аудио директно в банера или на заключения екран. Според Apple Developer Documentation, 2026, UNNotificationAttachment поддържа до 10 файла в едно известие и автоматично ги мащабира за оптимално показване на всички устройства.
Основни точки
Rich Notification е iOS push известие, което съдържа не само текст, но и медийни приложения, интерактивни елементи и персонализиран интерфейс. Терминът „rich“ (богат) отразява възможността за включване на изображения, видео, аудио, бутони за действия и текстов вход в известието, превръщайки простото предупреждение в пълноценен интерактивен елемент.
Apple въведе поддръжка за Rich Notification в iOS 10 заедно с рамката UserNotifications. Преди това push известията можеха да съдържат само текст, звук и badge. iOS 10 представи UNNotificationServiceExtension и UNNotificationContentExtension, които отвориха възможността за модификация на съдържанието и създаване на персонализирани интерфейси. В по-късните версии беше добавена поддръжка за SwiftUI в Content Extension, анимирани GIF и подобрено мащабиране на медия.
Rich Notification значително повишава ангажираността на потребителите. Изследвания на Apple показват, че известията с изображения получават 30–40% повече взаимодействия в сравнение с текстовите. Изображение на продукт, преглед на видео или бутон за бърз отговор позволяват на потребителя да вземе решение директно от известието, без да отваря приложението. Това съкращава пътя до целевото действие и подобрява потребителското изживяване.
UNNotificationAttachment поддържа три категории медия: изображения, видео и аудио. Всеки тип има свои ограничения по отношение на формат, размер и продължителност. Системата автоматично мащабира изображенията до размера на известието и ограничава продължителността на видео до 30 секунди за оптимизация на производителността.
| Тип медия | Поддържани формати | Максимален размер |
|---|---|---|
| Изображения | JPEG, PNG, GIF, TIFF | 10 MB на файл |
| Видео | MPEG, MP4, MOV | 10 MB, до 30 секунди |
| Аудио | MP3, AAC, WAV, CAF | 10 MB |
Изображенията се изрязват и мащабират автоматично от системата за показване в компактния и разширения изглед на известието. Анимираните GIF се поддържат от iOS 12 и се възпроизвеждат автоматично при преглед на известието. Препоръчителният размер на изображението е 1024x1024 пиксела, което осигурява ясно показване на всички устройства, включително iPad с голям екран.
Видеото в Rich Notification се възпроизвежда без звук по подразбиране — потребителят може да включи звука чрез бутон в плейъра. Максималната продължителност на видео е 30 секунди, след което възпроизвеждането спира. Аудио приложенията могат да се използват за гласови съобщения или звукови прегледи и се възпроизвеждат при докосване на известието в разширен изглед.
Интерактивни действия позволяват на потребителя да извършва операции директно от известието без да отваря приложението. Действията се регистрират чрез UNNotificationCategory и UNNotificationAction при стартиране на приложението. Всяко действие може да бъде на заден план (без отваряне на приложението) или на преден план (отваря приложението за завършване на операцията).
UNNotificationAction представлява бутон със заглавие и опционални модификатори, като requiresAuthentication (изисква Face ID/Touch ID) или destructive (маркиран в червено). UNTextInputNotificationAction разширява тази възможност, добавяйки поле за текстов вход — идеално за бърз отговор на съобщение или коментар. Действията се показват при продължително натискане на известието или плъзгане надолу.
Категориите известия свързват типа съдържание с набор от налични действия. Процесът на регистрация се изпълнява в AppDelegate при стартиране на приложението чрез UNUserNotificationCenter.current().setNotificationCategories. Категорията се посочва на сървъра в полето category на JSON payload, и системата автоматично прилага съответния набор от действия към известието.
Когато потребителят кликне бутон или изпрати текст, системата извиква делегата UNUserNotificationCenterDelegate с метода didReceive response. UNNotificationResponse съдържа идентификатора на действието и въведения текст (за UNTextInputNotificationAction). Въз основа на тази информация, приложението изпълнява съответната бизнес логика: изпраща съобщение, потвърждава действието или отваря определен екран.
Нека разгледаме пълния цикъл на създаване на Rich Notification: от регистрация на категории в AppDelegate до обработка в Service Extension и показване. AppDelegate регистрира категорията с бутони, сървърът изпраща известието с URL на изображението, Service Extension изтегля медията и Content Extension показва персонализирания интерфейс с бутони.
// AppDelegate — регистрация на категории и действия
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions:
[UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
let replyAction = UNTextInputNotificationAction(
identifier: "reply",
title: "Отговор",
options: [.authenticationRequired])
let likeAction = UNNotificationAction(
identifier: "like",
title: "Харесва ми",
options: [])
let category = UNNotificationCategory(
identifier: "social_post",
actions: [replyAction, likeAction],
intentIdentifiers: [],
options: [])
UNUserNotificationCenter.current()
.setNotificationCategories([category])
return true
}
След получаване на push известие с категория „social_post“ и URL на изображение в персонализирано поле, Service Extension се активира. Разширението изтегля изображението по мрежата, създава UNNotificationAttachment с уникален идентификатор и го добавя към съдържанието. Важно е да проверите размера на изтегления файл — ако надвишава 10 MB, прикаченият файл няма да бъде създаден и системата ще покаже известието без медия.
class NotificationService: UNNotificationServiceExtension {
override func didReceive(
_ request: UNNotificationRequest,
withContentHandler contentHandler:
@escaping (UNNotificationContent) -> Void
) {
let content = (request.content.mutableCopy()
as! UNMutableNotificationContent)
guard let urlString = content.userInfo["media-url"]
as? String,
let url = URL(string: urlString)
else { contentHandler(request.content); return }
URLSession.shared.downloadTask(with: url) {
location, _, _ in
guard let location = location else {
contentHandler(content); return }
let attachment = try! UNNotificationAttachment(
identifier: "media", url: location,
options: [UNNotificationAttachmentOptionsTypeHintKey:
"jpg"])
content.attachments = [attachment]
contentHandler(content)
}.resume()
}
}
За тестване на Rich Notification без сървър, използвайте iOS симулатора и изпращайте push през терминала с xcrun simctl push. В payload задължително посочете mutable-content: 1 за активиране на Service Extension и category за показване на действия. Командата изпраща push от JSON файл директно към избрания симулатор, позволявайки бърза итерация без настройка на сървърна инфраструктура.
UNNotificationContentExtension позволява пълна замяна на стандартния интерфейс на известието с произволен UIKit или SwiftUI изглед. Разширението се активира, когато потребителят разшири известието (force touch или плъзгане надолу) и може да съдържа бутони, плъзгачи, анимации и други UI компоненти. Размерът на интерфейса се адаптира към съдържанието чрез Auto Layout.
Content Extension се базира на storyboard с изглед, наследяващ UIViewController. SwiftUI View се интегрира чрез UIHostingController от iOS 16, позволявайки използването на съвременни подходи за изграждане на интерфейс. За обратна съвместимост с iOS 14–15 се препоръчва използването на UIKit с xib файлове. Интерфейсът получава модифицирано съдържание от Service Extension чрез UNNotificationContent.
Content Extension имплементира протокола UNNotificationContentExtension с метода didReceive response. UNNotificationResponse съдържа информация за натиснатия бутон или въведения текст. Разширението може да актуализира интерфейса без затваряне на известието или да извика completion handler за затварянето му. Това позволява създаването на сценарии за бързо взаимодействие, като например „харесвам“ с визуална обратна връзка директно в известието.
Apple препоръчва Content Extension да бъде кратък и функционален, избягвайки излишни елементи. Максималната височина на разширеното известие е около 400 точки, след което съдържанието се скролва. Използвайте системни шрифтове и разстояния за еднородност с другите известия. Тествайте на различни размери екран, за да се уверите, че интерфейсът се показва правилно както на iPhone, така и на iPad.
Често задавани въпроси
Максималният размер на едно медийно приложение е 10 MB. При превишаване на лимита, UNNotificationAttachment не се създава и известието се показва без медия. Препоръчва се оптимизиране на изображенията до 1–3 MB за бързо изтегляне в Service Extension.
Rich Notification се поддържа на всички устройства с iOS 10 и по-нов, включително iPhone 5s и по-нови. Content Extension с персонализиран UI е достъпен от iOS 12. SwiftUI в Content Extension — от iOS 16. На по-стари версии известието се показва в стандартна форма.
Да, анимираните GIF се поддържат от iOS 12. GIF се изтегля чрез UNNotificationAttachment като обикновено изображение и се възпроизвежда автоматично при преглед на известието. Размерът на GIF е ограничен до същите 10 MB като другите формати.
Максимум 4 действия на известие при регистрация на категория. При повече, системата показва първите 4 и игнорира останалите. Препоръчва се използването на 2–3 бутона за оптимално UX — твърде много опции претоварват интерфейса.
Да, сървърът трябва да изпраща push чрез APNS (Apple Push Notification service) с JSON payload, съдържащ URL на медийния файл в персонализирано поле и флага mutable-content: 1. Сървърът също така посочва category за активиране на Content Extension и действия.
Резюме
Ще разработим мобилно приложение под ключ
IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.
Прочетете също