PushKit — คืออะไร, เฟรมเวิร์กการแจ้งเตือน VoIP ของ iOS

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

PushKit เป็นเฟรมเวิร์ก iOS สำหรับส่งการแจ้งเตือน VoIP ที่มีความหน่วงต่ำ โดยข้าม APNs มาตรฐาน ตาม Apple Developer Documentation (2025) PushKit รับประกันการส่งสายภายใน 5 วินาทีแม้อยู่ในพื้นหลัง การแจ้งเตือน VoIP จะถูกประมวลผลโดยตรง โดยไม่ต้องแสดงแบนเนอร์ให้ผู้ใช้เห็น ทำให้เฟรมเวิร์กนี้เป็นเครื่องมือหลักสำหรับแอปส่งข้อความและแอปวิดีโอคอลบน iOS

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

  • PushKit เป็นเฟรมเวิร์ก iOS สำหรับส่งการแจ้งเตือน VoIP ที่มีลำดับความสำคัญและความหน่วงต่ำ
  • การแจ้งเตือน จะถูกประมวลผลโดยไม่แสดงแบนเนอร์ — แอปจะตื่นขึ้นในพื้นหลังเพื่อจัดการสาย
  • การลงทะเบียน ดำเนินการผ่าน PKPushRegistry ด้วยชนิด pushType .voIP
  • ความแตกต่างจาก APNs — PushKit ไม่ใช้ช่องทางการแจ้งเตือนมาตรฐานและมีลำดับความสำคัญสูงกว่า
  • ข้อจำกัด — PushKit ออกแบบมาสำหรับ VoIP เท่านั้นและไม่สามารถใช้สำหรับการแจ้งเตือน push ทั่วไป

PushKit คืออะไร

PushKit เป็นเฟรมเวิร์กของ Apple ที่เปิดตัวใน iOS 8 ซึ่งให้บริการการแจ้งเตือน push ที่มีความหน่วงต่ำสำหรับแอปพลิเคชัน VoIP แตกต่างจาก APNs มาตรฐาน (Apple Push Notification service) PushKit อนุญาตให้แอปตื่นขึ้นในพื้นหลังเมื่อมีการรับสายเข้า โดยไม่ต้องแสดงการแจ้งเตือนให้ผู้ใช้เห็น สิ่งนี้มีความสำคัญอย่างยิ่งสำหรับแอปเสียงและวิดีโอคอล — ผู้ใช้รับสายได้ทันที แม้ว่าแอปจะปิดอยู่ก็ตาม ตามข้อมูลจาก Apple WWDC 2024 PushKit ประมวลผลการแจ้งเตือน VoIP มากกว่า 2 พันล้านครั้งต่อวันทั่วโลก

PushKit ทำงานอย่างไร

กลไกการทำงานสร้างขึ้นบน การเชื่อมต่อโดยตรง ระหว่างอุปกรณ์และเซิร์ฟเวอร์ push ของ Apple โดยข้ามช่องทางการแจ้งเตือนมาตรฐาน เมื่อเซิร์ฟเวอร์แอปส่งการแจ้งเตือน VoIP มันจะผ่านเซิร์ฟเวอร์ PushKit โดยเฉพาะและถูกส่งไปยังอุปกรณ์ด้วยลำดับความสำคัญสูงสุด ระบบจะปลุกแอปในพื้นหลังและเรียกเมธอดตัวแทน pushRegistry:didReceiveIncomingPushWithPayload:forType: แอปจะรับ payload ประมวลผลสาย และเรียกตัวจัดการเสร็จสิ้นเพื่อยืนยัน ทั้งวงจรตั้งแต่การส่งไปจนถึงการประมวลผลใช้เวลาไม่เกิน 5 วินาที ตามข้อกำหนดของ Apple

PushKit เทียบกับ APNs

ความแตกต่างหลักระหว่าง PushKit และ APNs อยู่ที่ กลไกการส่ง และการประมวลผล APNs ใช้ช่องทางการแจ้งเตือนมาตรฐานโดยแสดงแบนเนอร์ เสียง หรือป้าย ในขณะที่ PushKit ส่งข้อมูลไปยังแอปโดยตรงโดยไม่มีการแจ้งเตือนด้วยภาพ ด้านล่างคือตารางเปรียบเทียบคุณลักษณะสำคัญ

คุณลักษณะPushKitAPNs
ลำดับความสำคัญในการส่งสูง (ส่งทันที)ปานกลาง (อาจล่าช้า)
การปลุกแอปใช่ ในพื้นหลังเฉพาะเมื่อแตะการแจ้งเตือน
การแสดงแบนเนอร์ไม่ใช่ (ไม่บังคับ)
การใช้งานVoIP, สาย, วิดีโอคอลการแจ้งเตือนทุกประเภท
PayloadJSON เท่านั้น ไม่มีสื่อJSON + สิ่งแนบ

PushKit ไม่รองรับสิ่งที่แนบสื่อที่หลากหลายและไม่สามารถใช้สำหรับการแจ้งเตือนทางการตลาดทั่วไป Apple ควบคุมการใช้ PushKit อย่างเข้มงวด — แอปต้องมีฟังก์ชัน VoIP ที่ชัดเจน มิฉะนั้นจะถูกปฏิเสธระหว่างการตรวจสอบ APNs ยังคงเป็นโซลูชันสากลสำหรับสถานการณ์อื่น ๆ ทั้งหมด

การลงทะเบียนและรับการแจ้งเตือน VoIP

ในการใช้ PushKit แอปต้องลงทะเบียนผ่าน PKPushRegistry ด้วยชนิด pushType .voIP การลงทะเบียนจะดำเนินการครั้งเดียวเมื่อเปิดใช้งานครั้งแรก หลังจากนั้นระบบจะสร้างโทเค็น push ที่ไม่ซ้ำกันและส่งผ่านตัวแทน โทเค็นนี้จะถูกส่งไปยังเซิร์ฟเวอร์แอปสำหรับการส่งการแจ้งเตือน VoIP ในภายหลัง ด้านล่างคือตัวอย่างการลงทะเบียน PushKit และการรับโทเค็นใน Swift

การตั้งค่าการลงทะเบียน PushKit

swift
import PushKit

let registry = PKPushRegistry(queue: DispatchQueue.main)
registry.delegate = self
registry.desiredPushTypes = [.voIP]

// MARK: - PKPushRegistryDelegate
func pushRegistry(
    _ registry: PKPushRegistry,
    didUpdate pushCredentials: PKPushCredentials,
    for type: PKPushType
) {
    let deviceToken = pushCredentials.token
        .map { String.format("%02x", $0) }
        .joined()
    sendVoIPTokenToServer(deviceToken)
}

หลังจากเรียก desiredPushTypes ด้วย PKPushType.voIP ระบบจะขออนุญาตรับการแจ้งเตือน VoIP โดยอัตโนมัติ ในเมธอด pushRegistry:didUpdatePushCredentials:forType: แอปจะรับโทเค็นอุปกรณ์เป็น Data ซึ่งจะถูกแปลงเป็นสตริงฐานสิบหกและส่งไปยังเซิร์ฟเวอร์ โทเค็นไม่ซ้ำกันสำหรับแต่ละอุปกรณ์และเปลี่ยนแปลงเมื่อติดตั้งแอปใหม่ — เซิร์ฟเวอร์ต้องจัดการการอัปเดตโทเค็น

การรับการแจ้งเตือนขาเข้า

swift
func pushRegistry(
    _ registry: PKPushRegistry,
    didReceiveIncomingPushWith payload: PKPushPayload,
    for type: PKPushType,
    completion: @escaping VoidBlock
) {
    guard let caller = payload.dictionaryPayload["caller"] as? String else {
        completion()
        return
    }

    let update = CXCallUpdate()
    update.remoteHandle = CXHandle(type: .generic, value: caller)

    provider.reportNewIncomingCall(
        with: UUID(),
        update: update,
        completion: { error in
            if let error = error {
                print("Call error: \(error)")
            }
            completion()
        }
    )
}

ในเมธอด didReceiveIncomingPushWith แอปจะรับ payload พร้อมข้อมูลสาย หลังจากดึงข้อมูลผู้เรียกแล้ว จะสร้าง CXCallUpdate จากเฟรมเวิร์ก CallKit เพื่อแสดงหน้าจอสายเข้า สิ่งสำคัญคือต้องเรียกตัวจัดการเสร็จสิ้นหลังจากการประมวลผล — มิฉะนั้นระบบอาจบังคับยุติกระบวนการแอปเนื่องจากหมดเวลา เวลาประมวลผลสูงสุดคือ 30 วินาที หลังจากนั้น iOS จะถือว่าการแจ้งเตือนยังไม่ถูกประมวลผล

การจัดการสายเรียกเข้าด้วย CallKit

PushKit ถูกรวมเข้ากับ CallKit อย่างใกล้ชิด — เฟรมเวิร์กสำหรับแสดงอินเทอร์เฟซสายของระบบบน iOS เมื่อแอปได้รับการแจ้งเตือน VoIP ผ่าน PushKit แอปต้องสร้าง CXProvider และ CXCallController เพื่อจัดการสาย CallKit จะแสดงหน้าจอสายเข้าบนหน้าจอล็อกโดยอัตโนมัติ แม้ว่าแอปจะถูกย่อไว้ก็ตาม ด้านล่างคือตัวอย่างการตั้งค่าผู้ให้บริการ CallKit

swift
let config = CXProviderConfiguration(localizedName: "MyApp")
config.supportsVideo = true
config.maximumCallGroups = 1
config.maximumCallsPerCallGroup = 1
config.supportedHandleTypes = [.phoneNumber, .generic]

let provider = CXProvider(configuration: config)
provider.setDelegate(self, queue: nil)

CXProviderConfiguration กำหนดลักษณะและการทำงานของหน้าจอสาย — ชื่อแอป การรองรับวิดีโอ จำนวนสายพร้อมกัน การรวม PushKit กับ CallKit เป็นสิ่งจำเป็นสำหรับแอป VoIP: หากไม่มี ระบบจะไม่แสดงหน้าจอสายเข้า และผู้ใช้จะพลาดสาย Apple กำหนดให้ใช้ CallKit สำหรับแอปทั้งหมดที่ใช้ PushKit

คุณสมบัติและข้อจำกัด

การใช้ PushKit มาพร้อมกับ ข้อจำกัดที่เข้มงวด หลายประการที่กำหนดโดย Apple เฟรมเวิร์กสามารถใช้ได้เฉพาะฟังก์ชัน VoIP เท่านั้น — ความพยายามใด ๆ ในการส่งการแจ้งเตือนทางการตลาดผ่าน PushKit จะส่งผลให้แอปถูกบล็อก ขนาด payload ต้องไม่เกิน 4 KB และสามารถมีได้เฉพาะข้อมูล JSON โดยไม่มีสิ่งที่แนบ เริ่มตั้งแต่ iOS 13 Apple ได้แนะนำข้อจำกัดเกี่ยวกับความถี่ในการส่งการแจ้งเตือน VoIP — ไม่เกินหนึ่งการแจ้งเตือนต่อนาทีต่ออุปกรณ์ เซิร์ฟเวอร์ต้องปฏิบัติตามข้อจำกัดนี้ มิฉะนั้นการแจ้งเตือนจะถูกปฏิเสธโดยระบบ PushKit ไม่ทำงานบนโปรแกรมจำลอง iOS — การทดสอบสามารถทำได้บนอุปกรณ์จริงเท่านั้น

โครงสร้าง Payload ของ PushKit

Payload ของ การแจ้งเตือน VoIP คือพจนานุกรม JSON ที่มีข้อมูลสายที่กำหนดเอง แตกต่างจาก APNs PushKit ไม่รองรับฟิลด์มาตรฐาน alert, badge และ sound — ข้อมูลทั้งหมดถูกกำหนดโดยนักพัฒนา โครงสร้างทั่วไปประกอบด้วยตัวระบุผู้เรียก (caller) ชนิดสาย (voice หรือ video) ตัวระบุห้องหรือเซสชัน และการประทับเวลา ขนาดของแต่ละฟิลด์ควรน้อยที่สุดเพื่อประหยัดพื้นที่ภายในขีดจำกัด 4 KB Apple แนะนำให้รวมเฉพาะข้อมูลที่จำเป็นสำหรับการแสดงหน้าจอสายเข้าบนหน้าจอล็อกใน payload และโหลดข้อมูลที่เหลือ (รูปประจำตัว, ประวัติข้อความ) หลังจากผู้ใช้รับสายผ่านคำขอเครือข่ายแยกต่างหาก ตัวอย่าง payload ขั้นต่ำ: { "caller": "แอนนา", "caller_id": "+79161234567", "type": "audio", "room": "uuid-room-1234", "ts": 1718534400 } คีย์ทั้งหมดใน payload ต้องสั้น ชัดเจน และได้รับการบันทึกไว้บนฝั่งเซิร์ฟเวอร์เพื่อความเข้ากันได้ระหว่างเวอร์ชันแอป

การจัดการข้อผิดพลาดและการลองใหม่

เมื่อทำงานกับ PushKit จำเป็นต้องจัดการ ความล้มเหลวในการส่ง และการสูญเสียการเชื่อมต่อ หากอุปกรณ์ออฟไลน์หรือตัดการเชื่อมต่อจากเครือข่าย การแจ้งเตือน VoIP จะไม่ถูกส่ง — PushKit ไม่รองรับการจัดเก็บและการส่งซ้ำ ซึ่งแตกต่างจาก APNs ที่จัดเก็บการแจ้งเตือนนานถึง 24 ชั่วโมงเพื่อลองใหม่ เซิร์ฟเวอร์ต้องติดตามการแจ้งเตือนที่ไม่ได้ส่งด้วยตนเองและลองใหม่เมื่อการเชื่อมต่อได้รับการกู้คืน กลไก push kit feedback service ถูกใช้สำหรับสิ่งนี้ — มันส่งคืนรายการการแจ้งเตือนที่ไม่ได้ส่งพร้อมสาเหตุของความล้มเหลว ขอแนะนำให้ตั้งค่าการตรวจสอบความสำเร็จในการส่งการแจ้งเตือน VoIP ผ่านการวิเคราะห์เซิร์ฟเวอร์และแจ้งนักพัฒนาเมื่ออัตราการส่งสำเร็จลดลงต่ำกว่า 95% ระบบ PushKit รับประกันการส่งเฉพาะเมื่ออุปกรณ์มีการเชื่อมต่ออินเทอร์เน็ตที่ใช้งานอยู่ — หากไม่มีการเชื่อมต่อ การแจ้งเตือนจะสูญหายอย่างถาวร ซึ่งเป็นสิ่งสำคัญที่ต้องพิจารณาเมื่อออกแบบระบบสาย VoIP ที่เชื่อถือได้พร้อมการส่งที่รับประกัน

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

PushKit คืออะไร?

PushKit เป็นเฟรมเวิร์กของ Apple สำหรับส่งการแจ้งเตือน VoIP ที่มีความหน่วงต่ำ ซึ่งช่วยให้แอปตื่นขึ้นในพื้นหลังเมื่อมีสายเข้าโดยไม่ต้องแสดงแบนเนอร์ ใช้ในแอปส่งข้อความและแอปวิดีโอคอล

PushKit แตกต่างจาก APNs อย่างไร?

PushKit มี ลำดับความสำคัญในการส่ง สูงกว่าและปลุกแอปในพื้นหลังโดยไม่แสดงการแจ้งเตือนให้ผู้ใช้เห็น APNs ส่งการแจ้งเตือนพร้อมแบนเนอร์และไม่สามารถปลุกแอปเพื่อประมวลผลสายโดยไม่มีการโต้ตอบจากผู้ใช้

จำเป็นต้องใช้ CallKit กับ PushKit หรือไม่?

ใช่ Apple กำหนดให้รวม PushKit กับ CallKit เพื่อแสดงหน้าจอสายเข้าของระบบ หากไม่มี CallKit แอปจะไม่สามารถแสดงสายเข้าบนหน้าจอล็อก ทำให้ฟังก์ชัน VoIP ไร้ประโยชน์

วิธีรับโทเค็น PushKit?

โทเค็นจะได้รับหลังจากสร้าง PKPushRegistry ด้วยชนิด .voIP และใช้เมธอดตัวแทน pushRegistry:didUpdatePushCredentials:forType: โทเค็นถูกส่งเป็น Data และต้องแปลงเป็นสตริงฐานสิบหกเพื่อส่งไปยังเซิร์ฟเวอร์

ข้อจำกัดขนาด payload ใน PushKit คืออะไร?

ขนาด payload สูงสุดสำหรับ PushKit คือ 4 KB ข้อมูลต้องอยู่ในรูปแบบ JSON สิ่งแนบสื่อไม่ได้รับการรองรับ ตั้งแต่ iOS 13 มีข้อจำกัดไม่เกินหนึ่งการแจ้งเตือน VoIP ต่อนาทีต่ออุปกรณ์

สรุป

  • PushKit เป็นเฟรมเวิร์ก iOS สำหรับส่งการแจ้งเตือน VoIP ที่มีความหน่วงต่ำ โดยข้าม APNs
  • ลำดับความสำคัญ ในการส่งของ PushKit สูงกว่า APNs — การแจ้งเตือนมาถึงภายใน 5 วินาที
  • แอป ตื่นขึ้นในพื้นหลังเมื่อได้รับการแจ้งเตือน โดยไม่แสดงแบนเนอร์ให้ผู้ใช้เห็น
  • การลงทะเบียน ดำเนินการผ่าน PKPushRegistry ด้วย PKPushType.voIP และโปรโตคอล PKPushRegistryDelegate
  • CallKit จำเป็นสำหรับการแสดงหน้าจอสายเข้าของระบบบน iOS
  • Payload จำกัดที่ 4 KB, JSON เท่านั้น, ไม่เกินหนึ่งการแจ้งเตือนต่อนาทีตั้งแต่ iOS 13
  • คำแนะนำ — ใช้ PushKit สำหรับฟังก์ชัน VoIP เท่านั้น สำหรับการแจ้งเตือนอื่น ๆ ให้ใช้ APNs

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

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

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

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