Rich Notification là một định dạng nâng cao của thông báo push iOS bao gồm các tệp đính kèm đa phương tiện, nút tương tác và giao diện tùy chỉnh để cải thiện trải nghiệm người dùng. Không giống như thông báo văn bản tiêu chuẩn, Rich Notification có thể hiển thị hình ảnh, video và âm thanh trực tiếp trên banner hoặc màn hình khóa. Theo Apple Developer Documentation, 2026, UNNotificationAttachment hỗ trợ tối đa 10 tệp trong một thông báo và tự động điều chỉnh kích thước để hiển thị tối ưu trên tất cả các thiết bị.
Những điểm chính
Rich Notification là một thông báo push iOS không chỉ chứa văn bản mà còn có tệp đính kèm đa phương tiện, các yếu tố tương tác và giao diện tùy chỉnh. Thuật ngữ “rich” phản ánh khả năng bao gồm hình ảnh, video, âm thanh, nút hành động và nhập văn bản trong thông báo, biến một cảnh báo đơn giản thành một yếu tố tương tác hoàn chỉnh.
Apple đã giới thiệu hỗ trợ Rich Notification trong iOS 10 cùng với framework UserNotifications. Trước đó, thông báo push chỉ có thể chứa văn bản, âm thanh và huy hiệu. iOS 10 đã giới thiệu UNNotificationServiceExtension và UNNotificationContentExtension, mở ra khả năng sửa đổi nội dung và tạo giao diện tùy chỉnh. Các phiên bản sau đã thêm hỗ trợ SwiftUI trong Content Extension, GIF động và cải thiện khả năng điều chỉnh kích thước phương tiện.
Rich Notification làm tăng đáng kể mức độ tương tác của người dùng. Các nghiên cứu của Apple chỉ ra rằng thông báo có hình ảnh nhận được nhiều hơn 30–40% tương tác so với thông báo chỉ có văn bản. Hình ảnh sản phẩm, xem trước video hoặc nút trả lời nhanh cho phép người dùng đưa ra quyết định trực tiếp từ thông báo mà không cần mở ứng dụng. Điều này rút ngắn đường dẫn đến hành động mục tiêu và cải thiện trải nghiệm người dùng.
UNNotificationAttachment hỗ trợ ba loại phương tiện: hình ảnh, video và âm thanh. Mỗi loại có giới hạn riêng về định dạng, kích thước và thời lượng. Hệ thống tự động điều chỉnh kích thước hình ảnh cho phù hợp với kích thước thông báo và giới hạn thời lượng video ở mức 30 giây để tối ưu hiệu suất.
| Loại phương tiện | Định dạng được hỗ trợ | Kích thước tối đa |
|---|---|---|
| Hình ảnh | JPEG, PNG, GIF, TIFF | 10 MB mỗi tệp |
| Video | MPEG, MP4, MOV | 10 MB, tối đa 30 giây |
| Âm thanh | MP3, AAC, WAV, CAF | 10 MB |
Hình ảnh được hệ thống tự động cắt và điều chỉnh kích thước để hiển thị ở dạng xem thông báo thu gọn và mở rộng. GIF động được hỗ trợ từ iOS 12 và tự động phát khi xem thông báo. Kích thước hình ảnh được khuyến nghị là 1024x1024 pixel, đảm bảo hiển thị sắc nét trên tất cả các thiết bị, bao gồm iPad với màn hình lớn.
Video trong Rich Notification phát không âm thanh theo mặc định — người dùng có thể bật âm thanh qua nút phát. Thời lượng video tối đa là 30 giây, sau đó quá trình phát sẽ dừng lại. Tệp đính kèm âm thanh có thể được sử dụng cho tin nhắn thoại hoặc xem trước âm thanh và phát khi chạm vào thông báo ở chế độ mở rộng.
Hành động tương tác cho phép người dùng thực hiện các thao tác trực tiếp từ thông báo mà không cần mở ứng dụng. Các hành động được đăng ký qua UNNotificationCategory và UNNotificationAction khi khởi động ứng dụng. Mỗi hành động có thể là nền (không mở ứng dụng) hoặc nền trước (mở ứng dụng để hoàn thành thao tác).
UNNotificationAction đại diện cho một nút có tiêu đề và các bổ sung tùy chọn như requiresAuthentication (yêu cầu Face ID/Touch ID) hoặc destructive (được tô màu đỏ). UNTextInputNotificationAction mở rộng khả năng này bằng cách thêm trường nhập văn bản — lý tưởng cho trả lời nhanh tin nhắn hoặc bình luận. Các hành động được hiển thị khi nhấn giữ thông báo hoặc vuốt xuống.
Danh mục thông báo liên kết loại nội dung với một tập hợp các hành động có sẵn. Quy trình đăng ký được thực hiện trong AppDelegate khi khởi động ứng dụng qua UNUserNotificationCenter.current().setNotificationCategories. Danh mục được chỉ định trên máy chủ trong trường category của payload JSON và hệ thống tự động áp dụng tập hợp hành động tương ứng cho thông báo.
Khi người dùng chạm vào nút hoặc gửi văn bản, hệ thống gọi delegate UNUserNotificationCenterDelegate với phương thức didReceive response. UNNotificationResponse chứa định danh hành động và văn bản đã nhập (cho UNTextInputNotificationAction). Dựa trên thông tin này, ứng dụng thực thi logic nghiệp vụ tương ứng: gửi tin nhắn, xác nhận hành động hoặc mở một màn hình cụ thể.
Hãy xem xét toàn bộ chu trình tạo Rich Notification: từ đăng ký danh mục trong AppDelegate đến xử lý trong Service Extension và hiển thị. AppDelegate đăng ký danh mục với các nút, máy chủ gửi thông báo có URL hình ảnh, Service Extension tải phương tiện và Content Extension hiển thị giao diện tùy chỉnh với các nút.
// AppDelegate — đăng ký danh mục và hành động
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions:
[UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
let replyAction = UNTextInputNotificationAction(
identifier: "reply",
title: "Trả lời",
options: [.authenticationRequired])
let likeAction = UNNotificationAction(
identifier: "like",
title: "Thích",
options: [])
let category = UNNotificationCategory(
identifier: "social_post",
actions: [replyAction, likeAction],
intentIdentifiers: [],
options: [])
UNUserNotificationCenter.current()
.setNotificationCategories([category])
return true
}
Sau khi nhận thông báo push với danh mục “social_post” và URL hình ảnh trong trường tùy chỉnh, Service Extension được kích hoạt. Tiện ích mở rộng tải hình ảnh từ mạng, tạo UNNotificationAttachment với định danh duy nhất và thêm vào nội dung. Điều quan trọng là kiểm tra kích thước tệp đã tải — nếu vượt quá 10 MB, tệp đính kèm sẽ không được tạo và hệ thống sẽ hiển thị thông báo mà không có phương tiện.
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()
}
}
Để kiểm tra Rich Notification mà không cần máy chủ, hãy sử dụng trình mô phỏng iOS và gửi push qua terminal bằng xcrun simctl push. Trong payload, hãy đảm bảo chỉ định mutable-content: 1 để kích hoạt Service Extension và danh mục để hiển thị hành động. Lệnh này gửi push từ tệp JSON trực tiếp đến trình mô phỏng đã chọn, cho phép lặp nhanh mà không cần thiết lập cơ sở hạ tầng máy chủ.
UNNotificationContentExtension cho phép bạn thay thế hoàn toàn giao diện thông báo tiêu chuẩn bằng một giao diện UIKit hoặc SwiftUI tùy chỉnh. Tiện ích mở rộng được kích hoạt khi người dùng mở rộng thông báo (force touch hoặc vuốt xuống) và có thể chứa các nút, thanh trượt, hoạt ảnh và bất kỳ thành phần UI nào khác. Kích thước giao diện thích ứng với nội dung bằng Auto Layout.
Content Extension dựa trên storyboard với bộ điều khiển giao diện kế thừa UIViewController. SwiftUI View được tích hợp qua UIHostingController từ iOS 16, cho phép các phương pháp xây dựng giao diện hiện đại. Để tương thích ngược với iOS 14–15, nên sử dụng UIKit với tệp xib. Giao diện nhận nội dung đã sửa đổi từ Service Extension qua UNNotificationContent.
Content Extension triển khai giao thức UNNotificationContentExtension với phương thức didReceive response. UNNotificationResponse chứa thông tin về nút đã nhấn hoặc văn bản đã nhập. Tiện ích mở rộng có thể cập nhật giao diện mà không đóng thông báo hoặc gọi trình xử lý hoàn thành để đóng nó. Điều này cho phép tạo các kịch bản tương tác nhanh, chẳng hạn như “thích” với phản hồi trực quan ngay trong thông báo.
Apple khuyến nghị giữ Content Extension ngắn gọn và chức năng, tránh các yếu tố dư thừa. Chiều cao tối đa của thông báo mở rộng là khoảng 400 điểm, sau đó nội dung sẽ cuộn. Sử dụng phông chữ và khoảng cách hệ thống để nhất quán với các thông báo khác. Kiểm tra trên các kích thước màn hình khác nhau để đảm bảo giao diện hiển thị chính xác trên cả iPhone và iPad.
Câu hỏi thường gặp
Kích thước tối đa của một tệp đính kèm phương tiện là 10 MB. Nếu vượt quá giới hạn, UNNotificationAttachment sẽ không được tạo và thông báo hiển thị mà không có phương tiện. Nên tối ưu hình ảnh xuống 1–3 MB để tải nhanh trong Service Extension.
Rich Notification được hỗ trợ trên tất cả các thiết bị có iOS 10 trở lên, bao gồm iPhone 5s và mới hơn. Content Extension với giao diện tùy chỉnh có sẵn từ iOS 12. SwiftUI trong Content Extension — từ iOS 16. Trên các phiên bản cũ hơn, thông báo hiển thị ở dạng tiêu chuẩn.
Có, GIF động được hỗ trợ từ iOS 12. GIF được tải qua UNNotificationAttachment như một hình ảnh thông thường và tự động phát khi xem thông báo. Kích thước GIF bị giới hạn ở mức 10 MB như các định dạng khác.
Tối đa 4 hành động cho mỗi thông báo khi đăng ký danh mục. Nếu chỉ định nhiều hơn, hệ thống hiển thị 4 hành động đầu tiên và bỏ qua phần còn lại. Nên sử dụng 2–3 nút để có UX tối ưu — quá nhiều tùy chọn sẽ làm quá tải giao diện.
Có, máy chủ phải gửi push qua APNS (dịch vụ thông báo push Apple) với payload JSON chứa URL tệp phương tiện trong trường tùy chỉnh và cờ mutable-content: 1. Máy chủ cũng chỉ định danh mục để kích hoạt Content Extension và các hành động.
Tóm tắt
Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay
IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.
Đọc thêm