Notification Content Extension — คืออะไร วิธีสร้างอินเทอร์เฟซที่กำหนดเองสำหรับ iOS

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

Notification Content Extension คือส่วนขยาย iOS ที่อนุญาตให้แทนที่อินเทอร์เฟซการแจ้งเตือน push มาตรฐานด้วย UIView ที่กำหนดเอง นักพัฒนาได้รับการควบคุมอย่างเต็มที่ในการแสดงเนื้อหา: รูปภาพ วิดีโอ แอนิเมชัน แบบอักษรที่กำหนดเอง และองค์ประกอบแบบโต้ตอบ ตามข้อมูลจาก Apple Developer, 2025 Notification Content Extension รองรับอินเทอร์เฟซ UIKit ใดๆ ในพื้นที่จำกัดของการแจ้งเตือน

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

  • Notification Content Extension — ส่วนขยาย iOS สำหรับ UI การแจ้งเตือน push ที่กำหนดเอง
  • ส่วนขยายใช้โปรโตคอล UNNotificationContentExtension พร้อมเมธอด didReceive ที่จำเป็น
  • อินเทอร์เฟซที่กำหนดเองถูกสร้างใน Storyboard และสามารถมี ส่วนประกอบ UIKit ใดๆ ได้
  • ขนาดสูงสุดของส่วนขยายคือ 50 MB และไม่ควรเกิน 12 MB เมื่อบีบอัด
  • ส่วนขยายจะทำงานสำหรับการแจ้งเตือนที่มี categoryIdentifier ที่ระบุ

Notification Content Extension คืออะไร

Notification Content Extension คือส่วนขยายแอปใน iOS ที่แทนที่เทมเพลตการแสดงผลการแจ้งเตือน push มาตรฐานด้วย UIView ที่กำหนดเอง ต่างจากการแจ้งเตือนปกติที่เนื้อหาถูกจำกัดอยู่ที่หัวเรื่อง หัวเรื่องย่อย และเนื้อหา ส่วนขยายอนุญาตให้แสดงอินเทอร์เฟซ UIKit ใดๆ: แผนที่พร้อมพิกัด กราฟ แกลเลอรีรูปภาพ หรือฟอร์มป้อนข้อมูล

วิธีการทำงาน

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

ความแตกต่างจาก Notification Service Extension

สิ่งสำคัญคือไม่ควรสับสนระหว่าง Notification Content Extension กับ Notification Service Extension Service Extension จะประมวลผลเนื้อหาก่อนแสดงการแจ้งเตือน (ดาวน์โหลดไฟล์แนบ ถอดรหัส) Content Extension จะแทนที่อินเทอร์เฟซหลังจากได้รับเนื้อหาที่พร้อมแล้ว ทั้งสองส่วนขยาย สามารถทำงานร่วมกันได้: Service Extension เตรียมข้อมูล Content Extension แสดงข้อมูลเหล่านั้น

คุณลักษณะContent ExtensionService Extension
วัตถุประสงค์UI การแจ้งเตือนที่กำหนดเองการปรับเปลี่ยนเนื้อหาก่อนแสดง
เวลาทำงานขณะที่ผู้ใช้เห็นการแจ้งเตือนสูงสุด 30 วินาทีในพื้นหลัง
อินเทอร์เฟซUIView UIKit เต็มรูปแบบไม่มีอินเทอร์เฟซ
APIUNNotificationContentExtensionUNNotificationServiceExtension

ข้อจำกัดของส่วนขยาย

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

การสร้าง Notification Content Extension ใน Xcode

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

การเพิ่ม target ส่วนขยาย

ใน Xcode ให้เลือก File → New → Target → Notification Content Extension ระบุชื่อส่วนขยาย ภาษา (Swift หรือ Objective-C) และตรวจสอบว่าโปรเจกต์เชื่อมต่อกับทีมพัฒนากลุ่มเดียวกัน หลังจากสร้าง target จะปรากฏโฟลเดอร์ที่มีสามไฟล์: MainInterface.storyboard, Info.plist และไฟล์คอนโทรลเลอร์

การกำหนดค่า Info.plist

ใน Info.plist ของส่วนขยาย จำเป็นต้องระบุอาร์เรย์ NSExtensionAttributes พร้อมคีย์ UNNotificationExtensionCategory อาร์เรย์นี้ประกอบด้วยตัวระบุของหมวดหมู่การแจ้งเตือนที่ส่วนขยายจะทำงาน คีย์เสริม UNNotificationExtensionInitialContentSizeRatio กำหนดอัตราส่วนภาพเริ่มต้นของอินเทอร์เฟซที่กำหนดเองสำหรับการวางตำแหน่งที่ถูกต้อง

สถาปัตยกรรมโฟลเดอร์ส่วนขยาย

แนะนำให้รักษาสถาปัตยกรรมที่สะอาดใน target ส่วนขยาย: โฟลเดอร์แยกสำหรับคอนโทรลเลอร์ โฟลเดอร์แยกสำหรับ View ที่กำหนดเอง เนื่องจากส่วนขยายเป็นไบนารีแยกต่างหาก โค้ดของแอปพลิเคชันหลักจึงไม่สามารถเข้าถึงได้โดยตรง สำหรับการแชร์โค้ด ให้สร้าง framework แยกต่างหากหรือใช้ App Group สำหรับข้อมูล

การใช้งานโปรโตคอล UNNotificationContentExtension

UNNotificationContentExtension คือโปรโตคอลที่คอนโทรลเลอร์ใน Notification Content Extension ต้องใช้งาน เมธอดที่จำเป็นเพียงอย่างเดียวคือ didReceive(_:with:) ซึ่งถูกเรียกเมื่อได้รับการแจ้งเตือน คอนโทรลเลอร์ได้รับการแจ้งเตือนและคอนโทรลเลอร์มุมมองที่พร้อมซึ่งต้องอัปเดตด้วยข้อมูล

การใช้งานพื้นฐานของคอนโทรลเลอร์

คอนโทรลเลอร์ส่วนขยายต้องสืบทอดจาก UIViewController และใช้งาน UNNotificationContentExtension Storyboard หรือ xib จะเชื่อมโยงกับคอนโทรลเลอร์นี้ เมื่อได้รับการแจ้งเตือน เมธอด didReceive จะส่งเนื้อหาและคอนโทรลเลอร์จะอัปเดตมุมมองของมัน

swift
import UIKit
import UserNotifications
import UserNotificationsUI

class CustomNotificationViewController: UIViewController {

    @IBOutlet var titleLabel: UILabel!
    @IBOutlet var customImageView: UIImageView!

    func didReceive(
        notification: UNNotification
    ) {
        let content = notification.request.content
        titleLabel.text = content.title
        loadAttachment(content.attachments.first)
    }

    private func loadAttachment(attachment: UNNotificationAttachment?) {
        guard let url = attachment?.URL else { return }
        if let image = UIImage(contentsOfFile: url.path) {
            customImageView.image = image
        }
    }
}

extension CustomNotificationViewController: UNNotificationContentExtension {
    func didReceive(
        notification: UNNotification
    ) {
        didReceive(notification: notification)
    }
}

การควบคุมขนาดอินเทอร์เฟซ

ระบบกำหนดขนาดของอินเทอร์เฟซที่กำหนดเองตามคีย์ UNNotificationExtensionInitialContentSizeRatio ใน Info.plist และเนื้อหาปัจจุบัน แนะนำให้ตั้งค่าคีย์นี้เป็น 0.1 สำหรับขนาดเริ่มต้นขั้นต่ำ จากนั้นเปลี่ยนขนาดผ่าน preferredContentSize หลังจากโหลดเนื้อหา

การปรับแต่งอินเทอร์เฟซและการโต้ตอบ

Notification Content Extension ให้อิสระอย่างเต็มที่ในการสร้างอินเทอร์เฟซ สามารถใช้ส่วนประกอบ UIKit ใดๆ ได้: UITableView, MKMapView, WKWebView, UIStackView อย่างไรก็ตาม สิ่งสำคัญคือต้องพิจารณาพื้นที่จำกัดของการแจ้งเตือนและปรับประสิทธิภาพให้เหมาะสม

การเพิ่มแผนที่ในการแจ้งเตือน

หนึ่งในสถานการณ์ยอดนิยมคือการแสดงแผนที่พร้อมตำแหน่งที่ตั้ง สำหรับสิ่งนี้ ให้เพิ่ม MKMapView ใน Storyboard ของส่วนขยาย และคอนโทรลเลอร์ส่งพิกัดจากเนื้อหาการแจ้งเตือน อย่าลืมเพิ่ม MapKit ใน target ของส่วนขยาย เมื่อใช้แผนที่ ให้พิจารณาข้อจำกัดหน่วยความจำของส่วนขยาย — การโหลดไทล์ที่ซับซ้อนอาจเกินทรัพยากรที่มีอยู่

แอนิเมชันและการเปลี่ยนภาพ

Notification Content Extension รองรับแอนิเมชัน UIView รวมถึงการปรับขนาด การเคลื่อนย้าย และความโปร่งใสขององค์ประกอบ เมื่อเข้าสู่โหมดขยายของการแจ้งเตือน สามารถเริ่มแอนิเมชันการปรากฏของเนื้อหาได้ แอนิเมชัน ควรสั้น (สูงสุด 0.5 วินาที) และไม่รบกวนการโต้ตอบของผู้ใช้กับการแจ้งเตือน หลีกเลี่ยงแอนิเมชันที่ไม่สิ้นสุด — ใช้พลังงานแบตเตอรี่และลดประสิทธิภาพ

การจัดการการแตะบนอินเทอร์เฟซที่กำหนดเอง

เนื่องจากส่วนขยายเป็น UIViewController เต็มรูปแบบ คุณสามารถเพิ่มท่าทางและตัวจัดการการแตะได้ ท่าทาง UIKit (UITapGestureRecognizer, UIButton) ทำงานได้ตามปกติ สำหรับการดำเนินการที่ต้องการเปิดแอปพลิเคชัน ให้ใช้ตัวแทนของส่วนขยายหรือ userNotificationCenter องค์ประกอบแบบโต้ตอบ ควรมีขนาดใหญ่พอสำหรับการแตะที่สะดวกสบายในพื้นที่จำกัด — ขนาดเป้าหมายสัมผัสขั้นต่ำคือ 44x44 จุดตามคำแนะนำของ Apple

การทำงานกับสื่อและไฟล์แนบ

เนื้อหาสื่อ คือความสามารถหลักของ Notification Content Extension การแจ้งเตือนสามารถมีรูปภาพ GIF เสียง และวิดีโอที่แสดงในอินเทอร์เฟซที่กำหนดเอง ไฟล์แนบถูกส่งผ่าน UNNotificationAttachment ซึ่งสามารถเพิ่มโดยเซิร์ฟเวอร์ผ่าน payload หรือโดย Notification Service Extension หลังจากดาวน์โหลด รูปแบบที่รองรับคือ JPEG, PNG, MPEG-4 และ MP3

การแสดงสื่อในส่วนขยาย

ในการแสดงรูปภาพ เพียงรับ UNNotificationAttachment จากเนื้อหาการแจ้งเตือนและโหลดจาก URL ในเครื่อง โปรดจำไว้ว่าส่วนขยายสามารถเข้าถึงได้เฉพาะไฟล์ในเครื่องเท่านั้น — ทรัพยากรระยะไกลต้องถูกดาวน์โหลดล่วงหน้าโดย Service Extension ขนาดสูงสุดของไฟล์แนบ — 50 MB บน iOS 15+ ขีดจำกัดเปลี่ยนแปลงในแต่ละการอัปเดตถัดไป เพื่อรองรับรูปภาพหลายรายการ ให้ใช้ UNNotificationAttachment พร้อมตัวระบุที่แตกต่างกันและแสดงผ่าน UIPageViewController

การโหลดและแสดงรูปภาพ

ในการแสดงรูปภาพในอินเทอร์เฟซที่กำหนดเอง ส่วนขยายจะรับ UNNotificationAttachment จากเนื้อหาการแจ้งเตือนและโหลดจาก URL ในเครื่อง ไฟล์แนบต้องถูกดาวน์โหลดล่วงหน้าโดย Notification Service Extension — Content Extension ไม่สามารถเข้าถึงเครือข่ายได้ ขนาดสูงสุดของไฟล์แนบสื่อ — 50 MB บน iOS 15+ ในเวอร์ชันก่อนหน้าขีดจำกัดคือ 10 MB ส่วนขยายต้องจัดการการไม่มีไฟล์แนบอย่างถูกต้องและแสดงอินเทอร์เฟซสำรอง สำหรับการโหลดรูปภาพความละเอียดต่ำล่วงหน้า ให้ใช้เวอร์ชันรูปขนาดย่อที่สร้างโดย Service Extension ก่อนการแนบ

การเล่นวิดีโอในการแจ้งเตือน

iOS รองรับการเล่นวิดีโอใน Notification Content Extension ผ่าน AVPlayerLayer ส่วนขยายสามารถแสดงเครื่องเล่นวิดีโอพร้อมปุ่มควบคุมภายในข้อแจ้งเตือนได้ ซึ่งมีประโยชน์โดยเฉพาะสำหรับแอปพลิเคชันเฝ้าระวัง การสตรีม หรือการแสดงตัวอย่างเนื้อหา การเล่นอัตโนมัติแบบไม่มีเสียงจะได้รับอนุญาตหากผู้ใช้คาดหวังเนื้อหาสื่อในการแจ้งเตือนนี้ เมื่อใช้งานเครื่องเล่นวิดีโอ ให้เพิ่มองค์ประกอบควบคุม: เล่น/หยุดชั่วคราว แถบความคืบหน้า และปุ่มปิด ตรวจสอบให้แน่ใจว่าวิดีโอไม่เริ่มโดยอัตโนมัติพร้อมเสียง — ซึ่งละเมิดคำแนะนำของ Apple เกี่ยวกับประสบการณ์ผู้ใช้ สำหรับสไลด์โชว์ของรูปภาพหลายรายการ ให้ใช้การเปลี่ยนภาพแบบแอนิเมชันระหว่างรูปภาพผ่าน UIView.transition พร้อมตัวเลือกการเปลี่ยนภาพแบบพลิกหน้า

การเพิ่มประสิทธิภาพส่วนขยาย

Notification Content Extension ทำงานในสภาพแวดล้อมที่จำกัดด้วยขีดจำกัดหน่วยความจำประมาณ 50 MB เพื่อเพิ่มประสิทธิภาพ ให้ใช้การโหลดรูปภาพแบบขี้เกียจ หลีกเลี่ยงการคำนวณหนักบนเธรดหลัก และใช้ Auto Layout พร้อมข้อจำกัดที่เรียบง่าย ดำเนินการหนัก เช่น การประมวลผลรูปภาพหรือการแยกวิเคราะห์ข้อมูลในคิวพื้นหลัง (DispatchQueue.global) หากเกินขีดจำกัดหน่วยความจำ ระบบจะยุติส่วนขยายและผู้ใช้จะเห็นการแจ้งเตือนมาตรฐาน แนะนำให้โปรไฟล์ส่วนขยายผ่าน Instruments (Allocations และ Time Profiler) ก่อนเผยแพร่ รวมถึงตรวจสอบการใช้หน่วยความจำบนอุปกรณ์จริงที่มี iOS เวอร์ชันต่างๆ

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

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

ได้ ตั้งแต่ iOS 16 Notification Content Extension รองรับ SwiftUI ผ่าน UIHostingController อย่างไรก็ตาม UIKit ยังคงเป็นตัวเลือกที่เสถียรกว่าสำหรับอินเทอร์เฟซที่ซับซ้อนเนื่องจากการรองรับ SwiftUI ในส่วนขยายมีจำกัด

ทำไมส่วนขยายไม่ทำงานสำหรับการแจ้งเตือนของฉัน?

ตรวจสอบว่า categoryIdentifier ใน payload ของการแจ้งเตือนตรงกับ UNNotificationExtensionCategory ใน Info.plist ของส่วนขยาย นอกจากนี้ตรวจสอบให้แน่ใจว่าส่วนขยายถูกเพิ่มใน target ของแอปหลักและได้รับการลงนามอย่างถูกต้อง

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

ใช้ App Group — พื้นที่จัดเก็บร่วมกัน (UserDefaults suite) หรือคอนเทนเนอร์ไฟล์ แอปพลิเคชันหลักและส่วนขยายต้องอยู่ในกลุ่มนักพัฒนากลุ่มเดียวกันและเปิดใช้งานความสามารถ App Groups

จะอัปเดตเนื้อหาส่วนขยายโดยไม่ต้องมีการแจ้งเตือนใหม่ได้อย่างไร?

ใช้เมธอด didReceive(_:with:) with UNNotificationContentExtensionMediaPlayPauseButtonType สำหรับควบคุมสื่อหรือขอการอัปเดตผ่านตัวแทน การอัปเดตเนื้อหาทั้งหมดโดยไม่มีการแจ้งเตือนใหม่ไม่สามารถทำได้

จะดีบัก Notification Content Extension ได้อย่างไร?

เลือก target ของส่วนขยายใน Xcode และเรียกใช้บนเครื่องจำลอง ใช้ lldb และจุดเบรกเหมือนในแอปพลิเคชันปกติ สำหรับการทดสอบ ให้ส่งการแจ้งเตือน push ผ่าน Firebase Console หรือในเครื่องผ่าน Pusher

สรุป

  • Notification Content Extension — ส่วนขยาย iOS สำหรับการแสดงการแจ้งเตือน push แบบกำหนดเอง
  • ส่วนขยายใช้งาน UNNotificationContentExtension และมีอินเทอร์เฟซ UIKit เต็มรูปแบบ
  • ทำงานสำหรับการแจ้งเตือนที่มี categoryIdentifier ที่ตรงกัน
  • รองรับส่วนประกอบ UI ใดๆ: แผนที่ รูปภาพ วิดีโอ แอนิเมชัน
  • ทำงานในกระบวนการที่แยกเดี่ยวพร้อมการเข้าถึงผ่าน App Group
  • ข้อจำกัดขนาด — 50 MB ของส่วนขยายที่คลายการบีบอัด
  • สำหรับเนื้อหาสื่อ ให้ใช้ UNNotificationAttachment ที่เตรียมโดย Service Extension

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

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

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

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