Notification Content Extension — สาระสำคัญ, UI แบบกำหนดเองและการตั้งค่าใน iOS

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

Notification Content Extension — เป็นส่วนขยาย iOS ชนิดหนึ่งที่แทนที่เทมเพลตการแจ้งเตือนแบบพุชมาตรฐานด้วยอินเทอร์เฟซผู้ใช้ที่กำหนดเองทั้งหมด นักพัฒนาจะได้รับความสามารถในการแสดงภาพ โปรแกรมเล่นเสียง ปุ่มดำเนินการ แถบความคืบหน้า และแอนิเมชันแบบกำหนดเองภายในข้อความแจ้งเตือน ซึ่งขยายแบนเนอร์มาตรฐานให้กลายเป็นมินิแอปพลิเคชันที่สมบูรณ์ ตามข้อมูลของ WWDC 2025 ส่วนขยายนี้ใช้ UNNotificationContentExtension และรองรับไฟล์แนบสื่อสูงสุด 4 รายการในข้อความแจ้งเตือนเดียว รวมถึงการประมวลผลการดำเนินการเชิงโต้ตอบผ่าน UNNotificationAction

หัวใจสำคัญ

  • Notification Content Extension สร้างอินเทอร์เฟซแบบกำหนดเองสำหรับการแจ้งเตือนแบบพุชแทนเทมเพลตระบบมาตรฐาน
  • สถาปัตยกรรมขึ้นอยู่กับโปรโตคอล UNNotificationContentExtension พร้อมเมธอด didReceive(_:with:) และ didReceive(_:withCompletionHandler:)
  • ส่วนขยายสามารถแสดง ไฟล์แนบสื่อ — ภาพ เสียง และวิดีโอ — ภายในข้อความแจ้งเตือนโดยไม่ต้องเปิดแอปพลิเคชัน
  • การแจ้งเตือนเชิงโต้ตอบ รองรับการดำเนินการแบบกำหนดเองพร้อมการตอบกลับและการป้อนข้อความ
  • ขนาดอินเทอร์เฟซมีจำกัด — ความสูงสูงสุดของการแจ้งเตือนแบบกำหนดเองคือ 320 จุด บน iPhone และ 352 จุดบน iPad

Notification Content Extension คืออะไร

Notification Content Extension — เป็นส่วนขยายแอปที่แทนที่การแสดงผลการแจ้งเตือนแบบพุชบน iOS แทนแบนเนอร์มาตรฐานที่มีชื่อเรื่อง เนื้อหาข้อความ และปุ่มต่างๆ สามารถแสดงอินเทอร์เฟซที่พัฒนาขึ้นอย่างสมบูรณ์ใน Interface Builder หรือโดยทางโปรแกรมผ่าน UIKit หรือ SwiftUI

แตกต่างจาก Notification Service Extension ซึ่งเปลี่ยนแปลงเนื้อหาก่อนแสดงผล Content Extension รับผิดชอบเฉพาะ การนำเสนอด้วยภาพ เท่านั้น ส่วนขยายจะรับการแจ้งเตือนที่พร้อมหลังจากการแก้ไขทั้งหมดและตัดสินใจว่าจะแสดงอย่างไร นี่คือความแตกต่างหลักระหว่างส่วนขยายการแจ้งเตือนสองประเภท

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

การสร้างอินเทอร์เฟซการแจ้งเตือนแบบกำหนดเอง

การพัฒนาเริ่มต้นด้วยการเพิ่ม target ใหม่ใน Xcode ด้วยเทมเพลต Notification Content Extension Xcode จะสร้างไฟล์ MainInterface.storyboard และคลาสที่สืบทอดจาก UIViewController ที่ใช้โปรโตคอล UNNotificationContentExtension

ขนาดและข้อจำกัดของอินเทอร์เฟซ

ความสูงสูงสุดของพื้นที่กำหนดเองคือ 320 จุด บน iPhone (สำหรับรุ่นหน้าจอใหญ่) และ 352 จุดบน iPad เนื้อหาที่เกินขอบเขตเหล่านี้จะถูกตัดออก สำหรับการปรับให้เข้ากับขนาดต่างๆ แนะนำให้ใช้ Auto Layout และ UIScrollView สำหรับเนื้อหาที่สามารถเลื่อนได้ ความกว้างจะเท่ากับความกว้างของการแจ้งเตือนเสมอและเปลี่ยนแปลงโดยอัตโนมัติเมื่อหมุนอุปกรณ์

Apple Human Interface Guidelines เตือนว่า: อินเทอร์เฟซการแจ้งเตือนควรกระชับและมีองค์ประกอบหลักเพียงรายการเดียว — ภาพ โปรแกรมเล่น แผนที่ หรือแบบฟอร์มป้อนข้อมูลด่วน องค์ประกอบเชิงโต้ตอบหลายรายการจะทำให้ผู้ใช้หนักเกินไปและทำให้การโต้ตอบซับซ้อน

การเชื่อมต่อกับแอปพลิเคชันหลัก

App Group — กลไกเดียวในการแลกเปลี่ยนข้อมูลระหว่างส่วนขยายและแอปพลิเคชันหลัก ผ่านไดเรกทอรีที่ใช้ร่วมกันของ App Group สามารถถ่ายโอนภาพที่แคช โทเค็น และการตั้งค่าได้ การเรียก API โดยตรงของแอปพลิเคชันหลักหรือการเข้าถึง UserDefaults ของแอปนั้นไม่สามารถใช้งานได้เนื่องจากการแยกกระบวนการ

swift
class NotificationViewController: UIViewController {

    func didReceive(
        _ notification: UNNotification
    ) {
        guard let attachment = notification
            .request.content.attachments.first()
        else { return }
        if attachment.url.startAccessingSecurityScopedResource() {
            imageView.image = UIImage(contentsOfFile:
                attachment.url.path)
            attachment.url.stopAccessingSecurityScopedResource()
        }
    }
}

โปรโตคอล UNNotificationContentExtension

UNNotificationContentExtension — โปรโตคอลหลักที่กำหนดวงจรชีวิตของการแจ้งเตือนแบบกำหนดเอง โปรโตคอลมีเมธอดสำหรับรับเนื้อหา ประมวลผลการดำเนินการ และจัดการอินเทอร์เฟซ

เมธอด didReceive:with:

didReceive(_:with:) จะถูกเรียกเมื่อได้รับการแจ้งเตือน ส่วนขยายจะได้รับวัตถุ UNNotification และ UNNotificationContentExtensionMediaPlayPauseButtonType สำหรับจัดการโปรแกรมเล่นสื่อ ในเมธอดนี้ ต้องตั้งค่าอินเทอร์เฟซ — โหลดภาพ เริ่มต้นโปรแกรมเล่น หรือแสดงข้อมูล ระบบจะเรียกเมธอดนี้ทุกครั้งที่มีการอัปเดตการแจ้งเตือนแบบเรียลไทม์

สิ่งสำคัญที่ต้องทราบคือส่วนขยายมี เวลาจำกัด ในการดำเนินการ — ประมาณ 30 วินาทีสำหรับรอบการแสดงผลทั้งหมด หากอินเทอร์เฟซไม่พร้อมภายในเวลานี้ iOS จะแสดงการแจ้งเตือนของระบบ สำหรับทรัพยากรที่หนัก — การโหลดภาพจากเครือข่าย การถอดรหัสวิดีโอ — แนะนำให้ใช้การดำเนินการแบบอะซิงโครนัสกับการแคชล่วงหน้าผ่าน App Group

การจัดการโปรแกรมเล่นสื่อ

โปรโตคอลรวมถึงเมธอดเสริมสำหรับปุ่มเล่น/หยุดชั่วคราว: mediaPlay, mediaPause และ mediaPlayPauseButtonType หากการแจ้งเตือนมีเนื้อหาเสียงหรือวิดีโอ ส่วนขยายสามารถแสดงโปรแกรมเล่นในตัวพร้อมองค์ประกอบควบคุมของระบบ iOS จะเพิ่มปุ่มเล่นโดยอัตโนมัติที่มุมขวาบนของส่วนขยายเมื่อส่งคืนประเภทปุ่มที่เหมาะสม

ไฟล์แนบสื่อและการประมวลผล

UNNotificationAttachment — วัตถุที่มีข้อมูลสื่อที่แนบมากับการแจ้งเตือน ภาพ ไฟล์เสียง และวิดีโอจะถูกเพิ่มในขั้นตอนการสร้างการแจ้งเตือนบนเซิร์ฟเวอร์หรือใน Notification Service Extension ผ่าน UNNotificationAttachment

รูปแบบที่รองรับ

สำหรับภาพ: JPEG, PNG, GIF, HEIF สำหรับเสียง: MP3, AAC, ALAC, WAV สำหรับวิดีโอ: MPEG-4, H.264, HEVC ขนาดสูงสุดของไฟล์แนบแต่ละรายการคือ 50 MB สูงสุด 4 ไฟล์แนบต่อการแจ้งเตือน ระบบจะดาวน์โหลดไฟล์แนบโดยอัตโนมัติในพื้นหลังก่อนแสดงการแจ้งเตือน และให้สิทธิ์การเข้าถึง URL ในเครื่องแก่ส่วนขยายผ่านทรัพยากร security-scoped

ตามคำแนะนำของ Apple ส่วนขยายไม่ควรดาวน์โหลดสื่อด้วยตนเอง — หลังจากการดาวน์โหลดโดยระบบเสร็จสมบูรณ์ UNNotificationAttachment จะมี URL ในเครื่องอยู่แล้ว อย่างไรก็ตาม หากไฟล์แนบไม่ถูกโหลดทันเวลา (เช่น เนื่องจากการเชื่อมต่อไม่ดี) ส่วนขยายสามารถแสดงตัวยึดตำแหน่งหรือข้อความสำรองได้

การทำงานกับทรัพยากร security-scoped

UNNotificationAttachment แต่ละรายการจะให้ security-scoped URL ซึ่งส่วนขยายต้องเข้าถึงผ่าน startAccessingSecurityScopedResource() และปล่อยผ่าน stopAccessingSecurityScopedResource() เมธอดเหล่านี้ต้องเรียกเป็นคู่ — มิฉะนั้นทรัพยากรจะไม่ถูกปล่อยและทำให้สิทธิ์การเข้าถึงรั่วไหล

swift
let attachment = notification.request.content.attachments.first()
guard attachment.url.startAccessingSecurityScopedResource()
else { return }
defer { attachment.url.stopAccessingSecurityScopedResource() }
let data = try Data(contentsOf: attachment.url)
imageView.image = UIImage(data: data)

การแจ้งเตือนเชิงโต้ตอบและการดำเนินการ

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

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

UNNotificationAction — การดำเนินการอย่างง่ายพร้อมชื่อเรื่องและแฟล็กการทำลายล้างที่เป็นตัวเลือก UNTextInputNotificationAction — การดำเนินการพร้อมฟิลด์ป้อนข้อความ เช่น สำหรับการตอบกลับข้อความอย่างรวดเร็ว ทั้งสองประเภทรองรับตัวเลือก UNNotificationActionOptions.authenticationRequired — ข้อกำหนดในการปลดล็อกอุปกรณ์ก่อนดำเนินการ

ส่วนขยายจะได้รับการดำเนินการที่เลือกผ่านเมธอด didReceive(_:withCompletionHandler:) โดยที่วัตถุ UNNotificationResponse พร้อมด้วยตัวระบุการดำเนินการและข้อความที่เป็นตัวเลือกจะถูกส่งผ่าน ส่วนขยายสามารถประมวลผลการตอบสนองได้ด้วยตนเองหรือส่งต่อไปยังแอปพลิเคชันหลักผ่านคอนเทนเนอร์ App Group ที่ใช้ร่วมกัน

swift
let category = UNNotificationCategory(
    identifier: "message",
    actions: [
        UNTextInputNotificationAction(
            identifier: "reply",
            title: "Reply",
            options: .authenticationRequired
        ),
        UNNotificationAction(
            identifier: "mark_read",
            title: "Mark Read",
            options: .foreground
        )
    ],
    intentIdentifiers: []
)

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

ความแตกต่างระหว่าง Notification Content Extension และ Service Extension คืออะไร?

Content Extension รับผิดชอบการแสดงผลด้วยภาพของการแจ้งเตือน ในขณะที่ Service Extension รับผิดชอบการเปลี่ยนแปลงเนื้อหาก่อนแสดงผล Content Extension ทำงานหลังจาก Service Extension และไม่สามารถเปลี่ยน Payload ของการแจ้งเตือนได้

ภาษาโปรแกรมใดบ้างที่รองรับ?

Swift และ Objective-C สำหรับ UIKit ตั้งแต่ iOS 16 เป็นต้นไป SwiftUI ก็รองรับการสร้างอินเทอร์เฟซการแจ้งเตือนผ่าน NotificationContentView พร้อมตัวปรับขนาดและการกำหนดค่า

สามารถใช้ SwiftUI ใน Notification Content Extension ได้หรือไม่?

ได้ ตั้งแต่ iOS 16 ส่วนขยายสามารถใช้ SwiftUI ผ่าน UIHostingController อย่างไรก็ตาม ความสามารถทั้งหมดของ UIKit — ขนาด ข้อจำกัด ทรัพยากร security-scoped — ยังคงอยู่และนำไปใช้กับเนื้อหา SwiftUI

สามารถแนบไฟล์สื่อได้กี่รายการในการแจ้งเตือนเดียว?

สูงสุด 4 ไฟล์แนบ ต่อการแจ้งเตือนหนึ่งครั้ง แต่ละไฟล์แนบมีขนาดสูงสุด 50 MB รูปแบบที่รองรับ: ภาพ (JPEG, PNG, HEIF), เสียง (MP3, AAC) และวิดีโอ (MPEG-4, H.264)

จะถ่ายโอนข้อมูลจากส่วนขยายไปยังแอปพลิเคชันหลักได้อย่างไร?

ผ่าน App Group — ไดเรกทอรีที่ใช้ร่วมกันบนดิสก์ UserDefaults ที่มีคำต่อท้าย app group ก็ทำงานได้เช่นกัน การเรียก API โดยตรงของแอปพลิเคชันหลักไม่สามารถใช้งานได้เนื่องจากการแยกกระบวนการของส่วนขยาย

สรุป

  • Notification Content Extension แทนที่อินเทอร์เฟซการแจ้งเตือนมาตรฐานด้วยอินเทอร์เฟซแบบกำหนดเองพร้อมองค์ประกอบภาพใดๆ
  • สถาปัตยกรรมใช้โปรโตคอล UNNotificationContentExtension พร้อมเมธอด didReceive สำหรับการอัปเดตอินเทอร์เฟซ
  • UNNotificationAttachment ให้ไฟล์แนบสื่อพร้อมการดาวน์โหลดพื้นหลังอัตโนมัติและการเข้าถึง security-scoped
  • การดำเนินการเชิงโต้ตอบรองรับการป้อนข้อความและการดำเนินการทำลายล้างผ่าน UNNotificationAction
  • ความสูงสูงสุดของอินเทอร์เฟซคือ 320 จุด บน iPhone สำหรับการปรับเนื้อหาแนะนำให้ใช้ UIScrollView
  • การแลกเปลี่ยนข้อมูลกับแอปพลิเคชันหลัก — ผ่าน App Group และไดเรกทอรีที่ใช้ร่วมกันบนดิสก์เท่านั้น

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

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

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

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