Notification Category: nó là gì, có những danh mục nào và cách hoạt động trong iOS

Tác giả: IT Sectr Đã đăng: 2026-03-20 Thời gian đọc: 8 phút

Notification Category (danh mục thông báo) là cơ chế iOS để nhóm các thông báo push theo loại và đính kèm các hành động tùy chỉnh vào chúng. Danh mục xác định những nút nào được hiển thị khi sử dụng 3D Touch hoặc nhấn giữ lâu trên thông báo, cũng như cách hệ thống xử lý các thông báo đến thuộc loại này. Theo Tài liệu dành cho nhà phát triển Apple, UNNotificationCategory được đăng ký trong UNUserNotificationCenter và liên kết với thông báo qua trường category trong tải trọng APNS.

Những điểm chính

  • Notification Category — cơ chế iOS để phân loại thông báo push và thêm hành động vào chúng
  • UNNotificationCategory — lớp đăng ký một danh mục với một tập hợp các UNNotificationAction
  • Hành động — các nút bên dưới thông báo: UNTextInputAction để nhập văn bản, UNNotificationAction để chạm
  • Liên kết — danh mục được chỉ định trong tải trọng APNS qua khóa category trong từ điển aps
  • Khác biệt với Android — iOS Category quản lý hành động, trong khi Android Channel quản lý mức độ quan trọng và âm thanh

Notification Category trong iOS là gì?

Notification Category là một tính năng iOS (từ phiên bản 8.0) cho phép nhà phát triển phân loại thông báo push và thêm các hành động tương tác vào chúng. Khi người dùng nhận được thông báo và nhấn mạnh (3D Touch) hoặc nhấn giữ lâu, các nút được xác định bởi danh mục sẽ xuất hiện. Điều này làm cho thông báo trở nên tương tác và cho phép người dùng thực hiện hành động mà không cần mở ứng dụng.

Một danh mục được đăng ký thông qua đối tượng UNNotificationCategory, chứa một định danh, một mảng các hành động và các tham số hiển thị tùy chọn. Hệ thống sử dụng định danh danh mục từ tải trọng APNS để tìm danh mục đã đăng ký và hiển thị các nút tương ứng.

Không giống như Android Notification Channel, iOS Category không quản lý mức độ quan trọng, âm thanh hay rung. Mục đích duy nhất của nó là cung cấp khả năng tương tác cho thông báo: các nút trả lời, xác nhận, hủy bỏ hoặc nhập văn bản.

Danh mục có bắt buộc không?

Các danh mục không bắt buộc để hiển thị thông báo push trên iOS. Thông báo sẽ xuất hiện dù thế nào đi nữa — có nút nếu danh mục được đăng ký, hoặc không có nút. Danh mục chỉ cần thiết để thêm tính tương tác cho thông báo.

Danh mục thông báo hoạt động như thế nào?

Cơ chế danh mục bao gồm bốn giai đoạn: đăng ký danh mục trên máy khách, gửi tải trọng APNS với danh mục, hệ thống nhận dạng danh mục và xử lý hành động của người dùng.

  • Đăng ký — ứng dụng tạo UNNotificationCategory với một mảng hành động và đăng ký nó trong UNUserNotificationCenter
  • Gửi — máy chủ bao gồm khóa category trong tải trọng APNS với giá trị khớp với định danh danh mục
  • Hiển thị — iOS hiển thị thông báo và khi nhấn mạnh sẽ hiển thị các nút liên kết với danh mục
  • Xử lý — người dùng chạm vào nút, kích hoạt UNUserNotificationCenterDelegate.didReceive response

Các hành động trong danh mục có thể thuộc hai loại: foreground (mở ứng dụng) và background (thực thi trong nền). Đối với hành động nền, ứng dụng có thời gian giới hạn (khoảng 30 giây) để xử lý trong UNNotificationActionHandler.

Các tùy chọn khi đăng ký danh mục

UNNotificationCategory hỗ trợ một số tùy chọn qua tham số options: customDismissAction — nhận sự kiện khi vuốt để loại bỏ thông báo, allowInCarPlay — hiển thị hành động trong CarPlay, hiddenPreviewsBodyPlaceholder — văn bản giữ chỗ tùy chỉnh cho bản xem trước ẩn.

UNNotificationAction: các loại hành động

iOS cung cấp hai loại hành động cho danh mục thông báo. Mỗi loại có mục đích riêng và cách tương tác với người dùng riêng.

LoạiLớpMô tảVí dụ
Hành động đơn giảnUNNotificationActionMột nút có tiêu đề và các tùy chọn (destructive, foreground, authenticationRequired)“Xóa”, “Xem”
Nhập văn bảnUNTextInputActionMột nút mở trường nhập văn bản với văn bản giữ chỗ“Trả lời”, “Bình luận”

UNTextInputAction là một tính năng độc đáo của iOS. Khi người dùng chạm vào nút “Trả lời”, hệ thống hiển thị một trường văn bản nơi người dùng nhập câu trả lời của họ. Văn bản đã nhập được chuyển đến đại biểu cùng với định danh hành động. Điều này cho phép triển khai trả lời nhanh mà không cần mở ứng dụng.

Tùy chọn hành động: options.authenticationRequired — yêu cầu mở khóa thiết bị, options.destructive — làm nổi bật nút màu đỏ (cho hành động nguy hiểm), options.foreground — mở ứng dụng sau khi chạm.

Thiết lập danh mục trong mã iOS

Các danh mục được đăng ký khi khởi động ứng dụng, thường trong phương thức didFinishLaunchingWithOptions. Việc đăng ký được thực hiện thông qua UNUserNotificationCenter, sau khi yêu cầu quyền thông báo. Các danh mục có thể được cập nhật mỗi lần khởi động — các phiên bản cũ được thay thế bằng phiên bản mới.

swift
import UserNotifications

class AppDelegate: UIResponder, UIApplicationDelegate {

    func registerNotificationCategories() {
        let replyAction = UNTextInputNotificationAction(
            identifier: "reply",
            title: "Trả lời",
            options: [.foreground],
            textInputButtonTitle: "Gửi",
            textInputPlaceholder: "Nhập tin nhắn..."
        )

        let deleteAction = UNNotificationAction(
            identifier: "delete",
            title: "Xóa",
            options: [.destructive]
        )

        let messageCategory = UNNotificationCategory(
            identifier: "message",
            actions: [replyAction, deleteAction],
            intentIdentifiers: [],
            options: [.customDismissAction]
        )

        UNUserNotificationCenter.current()
            .setNotificationCategories([messageCategory])
    }

    func application(
        _ application: UIApplication,
        didFinishLaunchingWithOptions options: [UIApplication.LaunchOptionsKey: Any]?
    ) -> Bool {
        UNUserNotificationCenter.current().delegate = self
        registerNotificationCategories()
        return true
    }
}

Sau khi đăng ký danh mục, bất kỳ thông báo nào có category = “message” trong tải trọng APNS sẽ hiển thị các nút “Trả lời” và “Xóa”. Việc xử lý chạm diễn ra trong userNotificationCenter:didReceive response, nơi actionIdentifier xác định nút nào đã được nhấn.

Xử lý chạm trong đại biểu

Khi người dùng chạm vào nút danh mục, iOS gọi UNUserNotificationCenterDelegate với một đối tượng UNNotificationResponse. response.actionIdentifier chứa định danh của nút đã chạm, và response.notification.request.content.userInfo chứa dữ liệu tùy chỉnh từ tải trọng.

Khác biệt so với kênh Android

Các nhà phát triển quen thuộc với Kênh thông báo Android thường nhầm lẫn chúng với Danh mục thông báo iOS. Mặc dù tên gọi tương tự, các cơ chế này giải quyết các nhiệm vụ khác nhau và hoạt động khác nhau.

  • Mục đích — Kênh Android quản lý mức độ quan trọng và khả năng hiển thị của thông báo; Danh mục iOS quản lý các hành động tương tác
  • Tính bắt buộc — Kênh Android bắt buộc để hiển thị thông báo; Danh mục iOS là tùy chọn
  • Kiểm soát người dùng — Người dùng Android cấu hình kênh trong cài đặt hệ thống; danh mục iOS không hiển thị trực tiếp cho người dùng
  • Nhóm — Kênh Android có thể được nhóm thành ChannelGroups; Danh mục iOS không được nhóm

Cả hai nền tảng đều có thể kết hợp cả hai cơ chế: trên Android, thông báo có thể thuộc về một kênh với các hành động từ NotificationCompat, trong khi trên iOS, danh mục bổ sung cho các kênh, mà trong iOS được gọi là thread-id và dùng để nhóm thông báo trong trung tâm thông báo.

Tải trọng APNS với danh mục

Để thông báo hiển thị với các nút danh mục, máy chủ phải bao gồm khóa category trong tải trọng APNS. Nếu không có khóa này, hệ thống sẽ không biết danh mục nào để áp dụng cho thông báo.

json
{
    "aps": {
        "alert": {
            "title": "Tin nhắn mới",
            "body": "Anna: Xin chào! Bạn khỏe không?"
        },
        "category": "message",
        "thread-id": "chat_123",
        "badge": 5,
        "sound": "default"
    }
}

Khóa category phải khớp chính xác với định danh đã đăng ký thông qua setNotificationCategories trên máy khách. Phân biệt chữ hoa chữ thường — “message” và “Message” được coi là các danh mục khác nhau. Nếu không tìm thấy danh mục, thông báo xuất hiện mà không có nút, không có lỗi trong nhật ký.

Xử lý danh mục không xác định

Nếu máy chủ gửi thông báo với danh mục chưa được đăng ký trên máy khách, iOS bỏ qua danh mục và hiển thị thông báo không có nút. Lỗi không được ghi lại và ứng dụng không biết về sự không khớp. Khuyến nghị đồng bộ hóa danh sách danh mục giữa máy chủ và máy khách.

Mẫu thiết kế danh mục

Khi thiết kế danh mục thông báo trong iOS, hãy tuân theo nguyên tắc một danh mục — một kịch bản. Mỗi danh mục nên tương ứng với một loại tương tác cụ thể: trả lời tin nhắn, xác nhận hành động, từ chối yêu cầu. Đừng trộn lẫn các kịch bản khác nhau trong cùng một danh mục.

Sử dụng UNTextInputAction cho các kịch bản mà người dùng cần nhập văn bản mà không cần mở ứng dụng: trả lời tin nhắn, bình luận, ghi chú nhanh. Các hành động văn bản tăng mức độ tương tác — người dùng thực hiện một hành động có ý nghĩa trong 2 lần chạm thay vì 5+ lần trong ứng dụng.

Đối với các hành động nguy hiểm (xóa, chặn), hãy sử dụng tùy chọn destructive. iOS sẽ làm nổi bật các nút này bằng màu đỏ, cảnh báo người dùng về tính không thể đảo ngược của hành động. Đối với các hành động yêu cầu mở khóa thiết bị (xem dữ liệu cá nhân), hãy chỉ định authenticationRequired.

Kiểm tra danh mục trên các thiết bị khác nhau: trên iPhone có 3D Touch, trên iPhone không có 3D Touch (nhấn giữ), trên iPad và trên Mac. Hành vi của danh mục có thể khác nhau đôi chút giữa các nền tảng Apple. Đặc biệt chú ý đến CarPlay: các nút danh mục xuất hiện trên màn hình xe hơi và nên được thiết kế với văn bản tối thiểu để đảm bảo an toàn cho người lái.

Câu hỏi thường gặp

Có thể đăng ký bao nhiêu danh mục trong iOS?

Không có giới hạn — iOS không đặt giới hạn về số lượng UNNotificationCategory. Tuy nhiên, trong thực tế, khuyến nghị không sử dụng quá 10–15 danh mục để tránh làm phức tạp việc xử lý trong đại biểu. Mỗi danh mục có thể chứa tối đa 4 hành động (nút). Hơn 4 hành động sẽ bị hệ thống bỏ qua.

Làm thế nào để xử lý chạm vào nút danh mục?

Triển khai giao thức UNUserNotificationCenterDelegate và phương thức didReceive. Kiểm tra response.actionIdentifier: UNNotificationDismissActionIdentifier — vuốt để loại bỏ, UNNotificationDefaultActionIdentifier — chạm vào thân, hoặc định danh nút tùy chỉnh của bạn. Đối với nút nhập văn bản, văn bản có sẵn qua response.userText.

Category khác với thread-id như thế nào?

Category — xác định các hành động tương tác (nút) cho thông báo. Thread-id — nhóm các thông báo trong Trung tâm thông báo theo chủ đề. Cả hai khóa đều được chỉ định trong tải trọng APNS. Category và thread-id không liên quan: một thông báo có thể có danh mục nhưng không có thread-id, và ngược lại.

Danh mục có hoạt động trên macOS không?

Có, UNNotificationCategory được hỗ trợ trên macOS 10.14+ (Mojave) trong các ứng dụng sử dụng framework UserNotifications. Hành vi của danh mục trên macOS tương tự iOS: khi nhấp vào thông báo, các nút được hiển thị và việc xử lý diễn ra thông qua UNUserNotificationCenterDelegate.

Tôi có cần cập nhật danh mục mỗi lần khởi động không?

Khuyến nghị đăng ký danh mục mỗi lần khởi động ứng dụng qua setNotificationCategories. Hệ thống thay thế bộ danh mục cũ bằng bộ mới mỗi lần gọi. Nếu bạn không cập nhật, danh mục vẫn tồn tại giữa các lần khởi động, nhưng khi mã thay đổi, danh mục cũ có thể gây ra hành vi không mong muốn.

Tổng kết

  • Notification Category — cơ chế iOS để thêm các hành động tương tác vào thông báo push
  • UNNotificationCategory — lớp kết hợp định danh, mảng UNNotificationAction và các tùy chọn
  • UNTextInputAction — hành động có trường nhập văn bản để trả lời nhanh mà không cần mở ứng dụng
  • Tải trọng APNS — khóa category trong từ điển aps liên kết thông báo với danh mục đã đăng ký
  • Tối đa 4 hành động — số nút tối đa cho mỗi danh mục, phần còn lại bị hệ thống bỏ qua
  • Tùy chọn hành động — foreground (mở ứng dụng), destructive (nút đỏ), authenticationRequired
  • Khác biệt với Android — iOS Category xử lý hành động, Android Channel xử lý mức độ quan trọng và âm thanh

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.

Thảo luận dự án

Đọc thêm