Notification Category: คืออะไร มีหมวดหมู่อะไรบ้าง และทำงานอย่างไรใน iOS

ผู้แต่ง: IT Sectr เผยแพร่เมื่อ: 2026-03-20 เวลาอ่าน: 8 นาที

Notification Category (หมวดหมู่การแจ้งเตือน) เป็นกลไกของ iOS สำหรับจัดกลุ่มการแจ้งเตือนแบบพุชตามประเภทและแนบการดำเนินการที่กำหนดเองไปด้วย หมวดหมู่จะกำหนดว่าปุ่มใดจะแสดงเมื่อใช้ 3D Touch หรือการกดค้างบนการแจ้งเตือน รวมถึงวิธีที่ระบบประมวลผลการแจ้งเตือนขาเข้าประเภทนี้ ตาม เอกสารนักพัฒนา Apple UNNotificationCategory จะถูกลงทะเบียนใน UNUserNotificationCenter และเชื่อมโยงกับการแจ้งเตือนผ่านฟิลด์ category ในเพย์โหลด APNS

ประเด็นสำคัญ

  • Notification Category — กลไก iOS สำหรับจำแนกการแจ้งเตือนแบบพุชและเพิ่มการดำเนินการเข้าไป
  • UNNotificationCategory — คลาสที่ลงทะเบียนหมวดหมู่ด้วยชุดของ UNNotificationAction
  • การดำเนินการ — ปุ่มใต้การแจ้งเตือน: UNTextInputAction สำหรับป้อนข้อความ, UNNotificationAction สำหรับการแตะ
  • การเชื่อมต่อ — หมวดหมู่ถูกระบุในเพย์โหลด APNS ผ่านคีย์ category ในพจนานุกรม aps
  • ความแตกต่างจาก Android — iOS Category จัดการการดำเนินการ ในขณะที่ Android Channel จัดการความสำคัญและเสียง

Notification Category ใน iOS คืออะไร?

Notification Category เป็นฟีเจอร์ iOS (ตั้งแต่เวอร์ชัน 8.0) ที่ช่วยให้นักพัฒนาสามารถจำแนกการแจ้งเตือนแบบพุชและเพิ่มการดำเนินการแบบโต้ตอบเข้าไป เมื่อผู้ใช้ได้รับการแจ้งเตือนและกดแรงๆ (3D Touch) หรือกดค้าง ปุ่มที่กำหนดโดยหมวดหมู่จะปรากฏขึ้น ซึ่งทำให้การแจ้งเตือนโต้ตอบได้และช่วยให้ผู้ใช้ดำเนินการได้โดยไม่ต้องเปิดแอป

หมวดหมู่ถูกลงทะเบียนผ่านออบเจกต์ UNNotificationCategory ซึ่งประกอบด้วยตัวระบุ อาร์เรย์ของการดำเนินการ และพารามิเตอร์การแสดงผลที่เป็นตัวเลือกระบบใช้ตัวระบุหมวดหมู่จากเพย์โหลด APNS เพื่อค้นหาหมวดหมู่ที่ลงทะเบียนและแสดงปุ่มที่เกี่ยวข้อง

ไม่เหมือนกับ Android Notification Channel, iOS Category ไม่ได้จัดการความสำคัญ เสียง หรือการสั่น วัตถุประสงค์เดียวของมันคือการให้ ความสามารถแบบโต้ตอบ สำหรับการแจ้งเตือน: ปุ่มตอบกลับ ยืนยัน ยกเลิก หรือป้อนข้อความ

หมวดหมู่จำเป็นหรือไม่?

หมวดหมู่ ไม่จำเป็น สำหรับการแสดงการแจ้งเตือนแบบพุชบน iOS การแจ้งเตือนจะปรากฏอยู่ดี — มีปุ่มหากลงทะเบียนหมวดหมู่ หรือไม่มีปุ่ม หมวดหมู่จำเป็นสำหรับการเพิ่มความโต้ตอบให้กับการแจ้งเตือนเท่านั้น

หมวดหมู่การแจ้งเตือนทำงานอย่างไร?

กลไกหมวดหมู่ประกอบด้วยสี่ขั้นตอน: การลงทะเบียนหมวดหมู่บนไคลเอนต์ การส่งเพย์โหลด APNS พร้อมหมวดหมู่ ระบบจดจำหมวดหมู่ และการจัดการการดำเนินการของผู้ใช้

  • การลงทะเบียน — แอปสร้าง UNNotificationCategory พร้อมอาร์เรย์ของการดำเนินการและลงทะเบียนใน UNUserNotificationCenter
  • การส่ง — เซิร์ฟเวอร์รวมคีย์ category ในเพย์โหลด APNS โดยมีค่าที่ตรงกับตัวระบุหมวดหมู่
  • การแสดง — iOS แสดงการแจ้งเตือนและเมื่อกดแรงจะแสดงปุ่มที่เชื่อมโยงกับหมวดหมู่
  • การจัดการ — ผู้ใช้แตะปุ่ม ซึ่งจะเรียก UNUserNotificationCenterDelegate.didReceive response

การดำเนินการในหมวดหมู่สามารถมีสองประเภท: foreground (เปิดแอป) และ background (ทำงานในพื้นหลัง) สำหรับการดำเนินการในพื้นหลัง แอปจะมีเวลาจำกัด (ประมาณ 30 วินาที) ในการประมวลผลใน UNNotificationActionHandler

ตัวเลือกเมื่อลงทะเบียนหมวดหมู่

UNNotificationCategory รองรับหลายตัวเลือกผ่านพารามิเตอร์ options: customDismissAction — รับเหตุการณ์เมื่อปัดการแจ้งเตือนออก, allowInCarPlay — แสดงการดำเนินการใน CarPlay, hiddenPreviewsBodyPlaceholder — ข้อความตัวยึดตำแหน่งที่กำหนดเองสำหรับการแสดงตัวอย่างที่ซ่อนอยู่

UNNotificationAction: ประเภทของการดำเนินการ

iOS มีการดำเนินการสองประเภทสำหรับหมวดหมู่การแจ้งเตือน แต่ละประเภทมีวัตถุประสงค์และวิธีการโต้ตอบกับผู้ใช้ของตนเอง

ประเภทคลาสคำอธิบายตัวอย่าง
การดำเนินการแบบง่ายUNNotificationActionปุ่มที่มีชื่อและตัวเลือก (destructive, foreground, authenticationRequired)“ลบ”, “ดู”
การป้อนข้อความUNTextInputActionปุ่มที่เปิดฟิลด์ป้อนข้อความพร้อมตัวยึดตำแหน่ง“ตอบกลับ”, “แสดงความคิดเห็น”

UNTextInputAction เป็นฟีเจอร์เฉพาะของ iOS เมื่อผู้ใช้แตะปุ่ม “ตอบกลับ” ระบบจะแสดงฟิลด์ข้อความที่ผู้ใช้พิมพ์คำตอบ ข้อความที่ป้อนจะถูกส่งไปยังตัวแทนพร้อมกับตัวระบุการดำเนินการ ซึ่งช่วยให้สามารถตอบกลับอย่างรวดเร็วโดยไม่ต้องเปิดแอป

ตัวเลือกการดำเนินการ: options.authenticationRequired — ต้องการปลดล็อกอุปกรณ์, options.destructive — เน้นปุ่มเป็นสีแดง (สำหรับการดำเนินการที่อันตราย), options.foreground — เปิดแอปหลังจากแตะ

การตั้งค่าหมวดหมู่ในโค้ด iOS

หมวดหมู่จะถูกลงทะเบียนเมื่อเปิดแอป โดยปกติในเมธอด didFinishLaunchingWithOptions การลงทะเบียนทำผ่าน UNUserNotificationCenter หลังจากขออนุญาตการแจ้งเตือน หมวดหมู่สามารถอัปเดตได้ทุกครั้งที่เปิดแอป — เวอร์ชันเก่าจะถูกแทนที่ด้วยเวอร์ชันใหม่

swift
import UserNotifications

class AppDelegate: UIResponder, UIApplicationDelegate {

    func registerNotificationCategories() {
        let replyAction = UNTextInputNotificationAction(
            identifier: "reply",
            title: "ตอบกลับ",
            options: [.foreground],
            textInputButtonTitle: "ส่ง",
            textInputPlaceholder: "ป้อนข้อความ..."
        )

        let deleteAction = UNNotificationAction(
            identifier: "delete",
            title: "ลบ",
            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
    }
}

หลังจากลงทะเบียนหมวดหมู่แล้ว การแจ้งเตือนใดๆ ที่มี category = “message” ในเพย์โหลด APNS จะแสดงปุ่ม “ตอบกลับ” และ “ลบ” การจัดการการแตะเกิดขึ้นใน userNotificationCenter:didReceive response โดยที่ actionIdentifier กำหนดว่าปุ่มใดถูกกด

การจัดการการแตะในตัวแทน

เมื่อผู้ใช้แตะปุ่มหมวดหมู่ iOS จะเรียก UNUserNotificationCenterDelegate พร้อมด้วยออบเจกต์ UNNotificationResponse response.actionIdentifier ประกอบด้วยตัวระบุของปุ่มที่ถูกแตะ และ response.notification.request.content.userInfo ประกอบด้วยข้อมูลที่กำหนดเองจากเพย์โหลด

ความแตกต่างจากช่องทาง Android

นักพัฒนาที่คุ้นเคยกับช่องทางการแจ้งเตือนของ Android มักสับสนกับหมวดหมู่การแจ้งเตือนของ iOS แม้จะมีชื่อคล้ายกัน แต่กลไกเหล่านี้แก้ปัญหาที่แตกต่างกันและทำงานต่างกัน

  • วัตถุประสงค์ — ช่องทาง Android จัดการความสำคัญและการมองเห็นของการแจ้งเตือน; หมวดหมู่ iOS จัดการการดำเนินการแบบโต้ตอบ
  • ความจำเป็น — ช่องทาง Android จำเป็นสำหรับการแสดงการแจ้งเตือน; หมวดหมู่ iOS เป็นตัวเลือก
  • การควบคุมของผู้ใช้ — ผู้ใช้ Android กำหนดค่าช่องทางในการตั้งค่าระบบ; หมวดหมู่ iOS ไม่ปรากฏแก่ผู้ใช้โดยตรง
  • การจัดกลุ่ม — ช่องทาง Android สามารถจัดกลุ่มเป็น ChannelGroups; หมวดหมู่ iOS ไม่ถูกจัดกลุ่ม

ทั้งสองแพลตฟอร์มสามารถรวมกลไกทั้งสองได้: บน Android การแจ้งเตือนสามารถเป็นของช่องทางที่มีการดำเนินการจาก NotificationCompat ในขณะที่บน iOS หมวดหมู่จะเสริมช่องทาง ซึ่งใน iOS เรียกว่า thread-id และใช้สำหรับจัดกลุ่มการแจ้งเตือนในศูนย์การแจ้งเตือน

เพย์โหลด APNS พร้อมหมวดหมู่

เพื่อให้การแจ้งเตือนแสดงพร้อมปุ่มหมวดหมู่ เซิร์ฟเวอร์ต้องรวมคีย์ category ในเพย์โหลด APNS หากไม่มีคีย์นี้ ระบบจะไม่รู้ว่าจะใช้หมวดหมู่ใดกับการแจ้งเตือน

json
{
    "aps": {
        "alert": {
            "title": "ข้อความใหม่",
            "body": "อันนา: สวัสดี! สบายดีไหม?"
        },
        "category": "message",
        "thread-id": "chat_123",
        "badge": 5,
        "sound": "default"
    }
}

คีย์ category ต้องตรงกับตัวระบุที่ลงทะเบียนผ่าน setNotificationCategories บนไคลเอนต์อย่างแม่นยำ ตัวพิมพ์ใหญ่เล็กมีความสำคัญ — “message” และ “Message” ถือเป็นหมวดหมู่ที่แตกต่างกัน หากไม่พบหมวดหมู่ การแจ้งเตือนจะปรากฏโดยไม่มีปุ่ม โดยไม่มีข้อผิดพลาดในบันทึก

การจัดการหมวดหมู่ที่ไม่รู้จัก

หากเซิร์ฟเวอร์ส่งการแจ้งเตือนที่มีหมวดหมู่ที่ไม่ได้ลงทะเบียนบนไคลเอนต์ iOS จะละเว้นหมวดหมู่และแสดงการแจ้งเตือน โดยไม่มีปุ่ม ข้อผิดพลาดจะไม่ถูกบันทึกและแอปไม่ทราบถึงความไม่ตรงกัน ขอแนะนำให้ซิงโครไนซ์รายการหมวดหมู่ระหว่างเซิร์ฟเวอร์และไคลเอนต์

รูปแบบการออกแบบหมวดหมู่

เมื่อออกแบบหมวดหมู่การแจ้งเตือนใน iOS ให้ปฏิบัติตามหลักการ หนึ่งหมวดหมู่ — หนึ่งสถานการณ์ แต่ละหมวดหมู่ควรสอดคล้องกับประเภทการโต้ตอบที่เฉพาะเจาะจง: การตอบกลับข้อความ การยืนยันการดำเนินการ การปฏิเสธคำขอ อย่าผสมสถานการณ์ต่างๆ ในหมวดหมู่เดียว

ใช้ UNTextInputAction สำหรับสถานการณ์ที่ผู้ใช้ต้องป้อนข้อความโดยไม่ต้องเปิดแอป: การตอบกลับข้อความ ความคิดเห็น โน้ตด่วน การดำเนินการแบบข้อความเพิ่มการมีส่วนร่วม — ผู้ใช้ดำเนินการที่มีความหมายในการแตะ 2 ครั้งแทนที่จะเป็น 5+ ครั้งในแอป

สำหรับการดำเนินการที่อันตราย (ลบ บล็อก) ให้ใช้ตัวเลือก destructive iOS จะเน้นปุ่มเหล่านี้เป็นสีแดง เตือนผู้ใช้เกี่ยวกับการไม่สามารถย้อนกลับได้ของการดำเนินการ สำหรับการดำเนินการที่ต้องปลดล็อกอุปกรณ์ (ดูข้อมูลส่วนตัว) ให้ระบุ authenticationRequired

ทดสอบหมวดหมู่บนอุปกรณ์ต่างๆ: บน iPhone ที่มี 3D Touch, บน iPhone ที่ไม่มี 3D Touch (กดค้าง), บน iPad และบน Mac พฤติกรรมของหมวดหมู่อาจแตกต่างกันเล็กน้อยบนแพลตฟอร์ม Apple ที่แตกต่างกัน ให้ความสนใจเป็นพิเศษกับ CarPlay: ปุ่มหมวดหมู่ปรากฏบนหน้าจอรถยนต์และควรออกแบบด้วยข้อความน้อยที่สุดเพื่อความปลอดภัยของผู้ขับขี่

คำถามที่พบบ่อย

สามารถลงทะเบียนกี่หมวดหมู่ใน iOS?

ไม่มี ขีดจำกัด — iOS ไม่กำหนดขีดจำกัดจำนวน UNNotificationCategory อย่างไรก็ตาม ในทางปฏิบัติ แนะนำให้ใช้ไม่เกิน 10–15 หมวดหมู่เพื่อไม่ให้ซับซ้อนในการจัดการในตัวแทน แต่ละหมวดหมู่สามารถมีได้สูงสุด 4 การดำเนินการ (ปุ่ม) มากกว่า 4 การดำเนินการจะถูกละเว้นโดยระบบ

จะจัดการการแตะปุ่มหมวดหมู่อย่างไร?

ใช้โปรโตคอล UNUserNotificationCenterDelegate และเมธอด didReceive ตรวจสอบ response.actionIdentifier: UNNotificationDismissActionIdentifier — ปัดเพื่อยกเลิก, UNNotificationDefaultActionIdentifier — แตะบนเนื้อหา หรือตัวระบุปุ่มที่กำหนดเองของคุณ สำหรับปุ่มป้อนข้อความ ข้อความสามารถเข้าถึงได้ผ่าน response.userText

category แตกต่างจาก thread-id อย่างไร?

Category — กำหนดการดำเนินการแบบโต้ตอบ (ปุ่ม) สำหรับการแจ้งเตือน Thread-id — จัดกลุ่มการแจ้งเตือนในศูนย์การแจ้งเตือนตามหัวข้อ ทั้งสองคีย์ถูกระบุในเพย์โหลด APNS Category และ thread-id ไม่เกี่ยวข้องกัน: การแจ้งเตือนสามารถมีหมวดหมู่แต่ไม่มี thread-id และในทางกลับกัน

หมวดหมู่ทำงานบน macOS หรือไม่?

ใช่ UNNotificationCategory รองรับบน macOS 10.14+ (Mojave) ในแอปที่ใช้เฟรมเวิร์ก UserNotifications พฤติกรรมของหมวดหมู่บน macOS คล้ายกับ iOS: เมื่อคลิกที่การแจ้งเตือน ปุ่มจะปรากฏขึ้น และการจัดการจะเกิดขึ้นผ่าน UNUserNotificationCenterDelegate

จำเป็นต้องอัปเดตหมวดหมู่ทุกครั้งที่เปิดแอปหรือไม่?

ขอแนะนำ ให้ลงทะเบียนหมวดหมู่ทุกครั้งที่เปิดแอปผ่าน setNotificationCategories ระบบจะแทนที่ชุดหมวดหมู่เก่าด้วยชุดใหม่ในทุกการเรียก หากคุณไม่อัปเดต หมวดหมู่จะคงอยู่ระหว่างการเปิดแอป แต่เมื่อโค้ดเปลี่ยนแปลง หมวดหมู่เก่าอาจทำให้เกิดพฤติกรรมที่ไม่คาดคิด

สรุป

  • Notification Category — กลไก iOS สำหรับเพิ่มการดำเนินการแบบโต้ตอบให้กับการแจ้งเตือนแบบพุช
  • UNNotificationCategory — คลาสที่รวมตัวระบุ อาร์เรย์ของ UNNotificationAction และตัวเลือก
  • UNTextInputAction — การดำเนินการพร้อมฟิลด์ป้อนข้อความสำหรับการตอบกลับอย่างรวดเร็วโดยไม่ต้องเปิดแอป
  • เพย์โหลด APNS — คีย์ category ในพจนานุกรม aps เชื่อมโยงการแจ้งเตือนกับหมวดหมู่ที่ลงทะเบียน
  • สูงสุด 4 การดำเนินการ — จำนวนปุ่มสูงสุดต่อหมวดหมู่ ส่วนที่เหลือระบบจะละเว้น
  • ตัวเลือกการดำเนินการ — foreground (เปิดแอป), destructive (ปุ่มสีแดง), authenticationRequired
  • ความแตกต่างจาก Android — iOS Category จัดการการดำเนินการ, Android Channel จัดการความสำคัญและเสียง

เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร

IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ

ปรึกษาโครงการ

อ่านเพิ่มเติม