Action Extension: คืออะไร ทำงานอย่างไร และการพัฒนาส่วนขยาย

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

Action Extension คือส่วนขยาย iOS ที่ดำเนินการแบบกำหนดเองกับเนื้อหาจากแอปอื่น ๆ โดยไม่ต้องเปลี่ยนบริบท แตกต่างจาก Share Extension ที่ส่งข้อมูลไปยังแอปอื่น Action Extension จะแปลงเนื้อหาตรงจุด: แปลข้อความ เปลี่ยนฟิลเตอร์รูปภาพ ตรวจสอบการสะกด หรือสร้าง PDF ตามข้อมูลของ Apple (2024) Action Extension เป็นประเภทส่วนขยายที่ได้รับความนิยมเป็นอันดับสองรองจาก Share Extension ซึ่งใช้ใน 42% ของแอป ในหมวด “ประสิทธิภาพการทำงาน” การดำเนินการทันทีโดยไม่ต้องเปิดแอปหลักเป็นข้อได้เปรียบหลักสำหรับผู้ใช้

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

  • Action Extension — ส่วนขยาย iOS สำหรับแปลงเนื้อหาในแอปโฮสต์
  • NSExtensionContext — บริบทการดำเนินการพร้อมข้อมูลเข้าและออก
  • UTI — Uniform Type Identifiers สำหรับกำหนดประเภทเนื้อหาที่กำลังประมวลผล
  • UIActivity — กลไกเก่าสำหรับการดำเนินการใน iOS 6–7
  • App Groups — การส่งข้อมูลที่ประมวลผลแล้วกลับไปยังแอป

Action Extension คืออะไร

Action Extension คือประเภทของส่วนขยายแอป iOS ที่อนุญาตให้ดำเนินการกับเนื้อหาโดยตรงภายในบริบทของแอปโฮสต์ ผู้ใช้เลือกข้อความใน Safari แตะ “การดำเนินการ” และเลือกตัวอย่างเช่น “ตรวจสอบการสะกด” — ส่วนขยายจะประมวลผลข้อความและส่งคืนผลลัพธ์โดยไม่ออกจากเบราว์เซอร์ ส่วนขยายรับข้อมูลเข้าผ่าน NSExtensionContext และสามารถส่งคืนเนื้อหาที่แก้ไขแล้วกลับไปได้

Action Extension ปรากฏใน iOS 8 ซึ่งเป็นส่วนหนึ่งของสถาปัตยกรรมส่วนขยายแอป คุณลักษณะสำคัญคือส่วนขยายไม่มีอินเทอร์เฟซของตัวเอง (ไม่บังคับ) และทำงานในบริบทของแอปโฮสต์ ผู้ใช้ไม่ต้องออกจากหน้าจอปัจจุบัน ซึ่งช่วยให้เกิดการเสียดสีทางการรับรู้ที่น้อยที่สุด ตามข้อมูลของ Apple Action Extension เป็นส่วนขยายประเภทเดียวที่สามารถอ่านและแก้ไขเนื้อหาของแอปโฮสต์พร้อมกันได้ (ผ่าน NSExtensionContext พร้อมการส่งคืนผลลัพธ์)

Action Extension ใช้ที่ไหน

Action Extension ใช้ในสถานการณ์ต่าง ๆ: การแปลข้อความในเบราว์เซอร์ การสร้าง PDF จากหน้าเว็บ การใช้ฟิลเตอร์กับรูปภาพในแกลเลอรี การตรวจสอบการสะกดในฟิลด์ข้อความใด ๆ การย่อ URL การเข้ารหัสข้อความ และการเพิ่มบุ๊กมาร์ก ความอเนกประสงค์ ทำให้ Action Extension เป็นเครื่องมือยอดนิยมสำหรับแอปในหมวด “เครื่องมืออรรถประโยชน์” และ “ประสิทธิภาพการทำงาน”

Action Extension เปรียบเทียบกับ Share Extension

Action Extension และ Share Extension มักถูกสับสน แต่จุดประสงค์ของทั้งสองแตกต่างกันโดยพื้นฐาน Share Extension ส่งเนื้อหาจากแอปโฮสต์ไปยังแอปของคุณ Action Extension ประมวลผลเนื้อหาและส่งคืนกลับ ความแตกต่าง ส่งผลต่อสถาปัตยกรรม ประสบการณ์ผู้ใช้ และข้อกำหนดการกำหนดค่า Info.plist

คุณลักษณะAction ExtensionShare Extension
วัตถุประสงค์การแปลงเนื้อหาการส่งเนื้อหาไปยังแอป
อินเทอร์เฟซไม่บังคับ (กำหนดเอง)SLComposeServiceViewController
การส่งคืนข้อมูลใช่ ผ่าน completeRequestไม่
บริบทอยู่ในแอปโฮสต์สลับไปยังส่วนขยาย
ตำแหน่งในเมนูAction Sheet (ส่วนบน)Share Sheet (ส่วนล่าง)
การดำเนินการทั่วไปการแปล การแก้ไข ฟิลเตอร์การบันทึก การเผยแพร่

ผู้ใช้เลือกการดำเนินการอย่างไร

Action Extension ปรากฏในเมนูการดำเนินการ (Action Sheet) เมื่อแตะปุ่ม “แชร์” หรือ “...” iOS จะวาง Action Extensions โดยอัตโนมัติในส่วนบนของแผ่น (การดำเนินการ) และ Share Extensions ในส่วนล่าง (แอป) สถานการณ์ผู้ใช้: เลือกข้อความ → แตะ “การดำเนินการ” → เลือก Action Extension ของคุณ → รับผลลัพธ์ที่ประมวลผลแล้วโดยไม่ต้องเปลี่ยนแอป

สถาปัตยกรรมของ Action Extension

Action Extension ประกอบด้วย target ใน Xcode, UIViewController สำหรับแสดงอินเทอร์เฟซ (ไม่บังคับ), NSExtensionContext สำหรับการเข้า/ออกข้อมูล และการกำหนดค่า Info.plist สถาปัตยกรรม ง่ายกว่า Share Extension: ไม่มีอินเทอร์เฟซการเขียนที่จำเป็น และส่วนขยายสามารถทำงานได้อย่างสมบูรณ์โดยไม่มี UI

ส่วนประกอบของ Action Extension

Target — bundle แยกต่างหากพร้อมตัวระบุที่สืบทอดมาจากแอปหลัก UIViewController — อินเทอร์เฟซที่ไม่บังคับสำหรับแสดงความคืบหน้า การตั้งค่า หรือผลลัพธ์ NSExtensionContext — คอนเทนเนอร์ที่มีข้อมูลเข้า (inputItems) และเมธอด completeRequest สำหรับส่งคืนผลลัพธ์ Info.plist — การกำหนดค่าการเปิดใช้งานผ่าน NSExtensionActivationRule และแอตทริบิวต์ (NSExtensionAttributes) สำหรับระบุประเภทเนื้อหาที่รองรับ

NSExtensionContext และการไหลของข้อมูล

Action Extension รับข้อมูลเข้าผ่าน extensionContext?.inputItems — อาร์เรย์ของ NSExtensionItem แต่ละรายการมีไฟล์แนบพร้อมข้อมูลและ UTI หลังจากการประมวลผล ส่วนขยายเรียก completeRequest(returningItems:) พร้อมอาร์เรย์ของ NSExtensionItem เอาต์พุต แอปโฮสต์รับข้อมูลที่ประมวลผลแล้วและแสดงผล โมเดลอะซิงโครนัส: ส่วนขยายสามารถดำเนินการที่ใช้เวลานาน โดยคงบริบทไว้สูงสุด 30 วินาที

การสร้าง Action Extension

มาดูการสร้าง Action Extension ใน Swift สำหรับการแปลข้อความที่เลือกกัน ส่วนขยายรับข้อความจากแอปโฮสต์ ส่งไปยังเซิร์ฟเวอร์แปลภาษา และส่งคืนผลลัพธ์ ActionViewController คือคอนโทรลเลอร์พื้นฐานที่ Xcode สร้างขึ้นเมื่อเพิ่ม target

swift
import UIKit
import MobileCoreServices

class ActionViewController: UIViewController {

    @IBOutlet var resultLabel: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
        extractTextAndTranslate()
    }

    func extractTextAndTranslate() {
        guard let item = extensionContext?.inputItems.first
                as? NSExtensionItem
        else { return }

        for attachment in item.attachments ?? [] {
            attachment.loadItem(
                forTypeIdentifier: kUTTypePlainText as String
            ) { [weak self] (text, error) in
                guard let inputText = text as? String else { return }
                TranslationService().translate(inputText, from: "en", to: "ru") {
                    translated in
                    DispatchQueue.main.async {
                        self?.resultLabel?.text = translated
                    }
                }
            }
        }
    }
}

หลังจากการประมวลผล ส่วนขยายส่งคืนผลลัพธ์ไปยังแอปโฮสต์ completeRequest พร้อมข้อมูลเอาต์พุตเป็นสถานการณ์ทางเลือกที่ส่วนขยายไม่แสดง UI แต่ส่งคืนเนื้อหาที่ประมวลผลแล้วทันที

swift
// Returning processed text to host app
let resultItem = NSExtensionItem()
let resultData = translated.data(using: .utf8)!
let attachment = NSItemProvider(
    item: resultData,
    typeIdentifier: kUTTypePlainText as String
)
resultItem.attachments = [attachment]
extensionContext?.completeRequest(
    returningItems: [resultItem], completionHandler: nil
)

การประมวลผลข้อมูลและการส่งคืนผลลัพธ์

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

การโหลดข้อมูลจากไฟล์แนบ

เมธอด loadItem(forTypeIdentifier:) ทำงานแบบอะซิงโครนัส — ข้อมูลอาจมีขนาดใหญ่ (รูปภาพ วิดีโอ) NSItemProvider จัดการการสตรีมและการแคช สำหรับรูปภาพใช้ kUTTypeImage สำหรับไฟล์ใช้ kUTTypeFileURL สำคัญ: loadItem อาจถูกเรียกบนเธรดพื้นหลัง — อัปเดต UI ผ่าน DispatchQueue.main เท่านั้น

การส่งคืนข้อมูลที่แก้ไขแล้ว

Action Extension ส่งคืนข้อมูลที่ประมวลผลแล้วผ่าน completeRequest พร้อมอาร์เรย์ของ NSExtensionItem แต่ละรายการสอดคล้องกับประเภทข้อมูลเอาต์พุต แอปโฮสต์สามารถแทนที่เนื้อหาต้นฉบับด้วยเนื้อหาที่ประมวลผลแล้ว — ตัวอย่างเช่น แทนที่รูปภาพต้นฉบับด้วยรูปภาพที่ผ่านการกรอง NSExtensionItem รองรับ UTI เดียวกับอินพุต รวมถึง UTI เพิ่มเติม (เช่น public.html สำหรับเนื้อหาเว็บ)

กรณีการใช้งาน Action Extension

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

สถานการณ์ข้อความ

Action Extension สำหรับข้อความ: การแปล การตรวจสอบการสะกด การนับอักขระ การเปลี่ยนตัวพิมพ์ การเข้ารหัส การสร้างรหัส QR จากข้อความ ผู้ใช้เลือกข้อความในแอปใด ๆ ที่มีฟิลด์ข้อความ (Safari, Notes, Mail) และดำเนินการด้วยการแตะเพียงครั้งเดียว การเน้นไวยากรณ์ ของโค้ด การจัดรูปแบบ Markdown และการย่อ URL เป็นตัวอย่าง Action Extension ยอดนิยมสำหรับผู้ใช้ขั้นสูง

สถานการณ์กราฟิก

สำหรับรูปภาพ Action Extension มีให้: การใช้ฟิลเตอร์ การครอบตัด การปรับขนาด การแปลงรูปแบบ (HEIC เป็น JPEG) การเพิ่มลายน้ำ การรู้จำข้อความ (OCR) และการบีบอัด การประมวลผลรูปภาพ ควรรวดเร็ว — ผู้ใช้คาดหวังผลลัพธ์ภายใน 2–3 วินาที สำหรับการดำเนินการหนัก ให้ใช้ Core Image บน GPU หรือคิวพื้นหลัง

สถานการณ์เว็บ

Action Extension สำหรับ URL: การสร้าง PDF จากหน้าเว็บ การบันทึกใน Pocket/Pinterest การตรวจสอบความเร็วไซต์ การเก็บถาวรหน้า การรับข้อมูลเมตา Open Graph การสร้างภาพหน้าจอของหน้า การสร้าง PDF เป็นหนึ่งในสถานการณ์ที่เป็นที่ต้องการมากที่สุด: ผู้ใช้แปลงหน้าเว็บเป็น PDF โดยไม่ต้องเปิดบริการของบุคคลที่สาม

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

ความแตกต่างหลักระหว่าง Action Extension และ Share Extension คืออะไร

Share Extension ส่งเนื้อหาจากแอปโฮสต์ไปยังแอปของคุณ Action Extension ประมวลผลเนื้อหาตรงจุด และส่งคืนผลลัพธ์กลับ Share — การส่งต่อ Action — การแปลง ความแตกต่างพื้นฐานนี้กำหนดสถาปัตยกรรมและ UX

Action Extension สามารถไม่มีอินเทอร์เฟซได้หรือไม่

ได้ หากการดำเนินการไม่ต้องการอินพุตจากผู้ใช้ (เช่น การนับอักขระ) ส่วนขยายสามารถดำเนินการในพื้นหลังและส่งคืนผลลัพธ์ทันทีผ่าน completeRequest ใน Info.plist คุณต้องระบุ NSExtensionActivationSupportsWebURL หรือ UTI อื่นที่ตรงกับประเภทข้อมูล

Action Extension ปรากฏในแอปใดบ้าง

ในแอปใด ๆ ที่รองรับ UIActivityViewController หรือคอนโทรลเลอร์การดำเนินการมาตรฐาน ซึ่งรวมถึง Safari, รูปภาพ, ไฟล์, โน้ต, เมล และแอปของบริษัทอื่นอีกนับพัน Action Extension ไม่ทำงาน ในแอปที่ไม่ได้ใช้กลไกการดำเนินการมาตรฐานของ iOS

วิธีส่งคืนเนื้อหาที่ประมวลผลแล้วไปยังแอปโฮสต์

ผ่าน extensionContext.completeRequest(returningItems:) พร้อมอาร์เรย์ของ NSExtensionItem แต่ละรายการเอาต์พุตมี NSItemProvider พร้อมข้อมูลที่ประมวลผลแล้ว แอปโฮสต์รับผลลัพธ์ในตัวแทนของ UIActivityViewController หรือ callback ที่คล้ายกัน

ข้อจำกัดของ Action Extension คืออะไร

ส่วนขยายทำงานสูงสุด 30 วินาที หลังจากนั้น iOS จะบังคับยุติ ไม่มีการเข้าถึงแอปหลักโดยตรง — ผ่าน App Groups เท่านั้น Action Extension ไม่สามารถทำงานพื้นหลังหลังจากเสร็จสิ้น สำหรับการดำเนินการที่ใช้เวลานาน ให้ใช้ NSURLSession พื้นหลังพร้อมการแจ้งเตือนเมื่อเปิดใช้งานครั้งถัดไป

สรุป

  • Action Extension — ส่วนขยาย iOS สำหรับแปลงเนื้อหาโดยตรงในแอปโฮสต์
  • แตกต่างจาก Share Extension ตรงที่ส่งคืนข้อมูลที่ประมวลผลแล้วผ่าน NSExtensionContext
  • สามารถทำงานกับ UI หรือในพื้นหลังทั้งหมดโดยไม่มีอินเทอร์เฟซ
  • รองรับเนื้อหาทุกประเภท: ข้อความ รูปภาพ URL ไฟล์ผ่าน UTI
  • ใช้สำหรับการแปล ฟิลเตอร์ การสร้าง PDF OCR และการตรวจสอบการสะกด
  • ขีดจำกัดเวลาดำเนินการ — 30 วินาที การเข้าถึงแอป — ผ่าน App Groups
  • Action Extension ใช้ใน 42% ของแอปในหมวด “ประสิทธิภาพการทำงาน”

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

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

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

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