Silent Push คือประเภทของการแจ้งเตือนแบบ push ของ iOS ที่ถูกส่งไปยังอุปกรณ์โดยไม่แสดงอะไรให้ผู้ใช้เห็นและไม่มีเสียงประกอบ วัตถุประสงค์หลักของการแจ้งเตือนแบบเงียบคือการซิงโครไนซ์ข้อมูลเบื้องหลัง การอัปเดตเนื้อหา และการทำงานสั้นๆ ที่ไม่ต้องการความสนใจจากผู้ใช้ ตาม Apple Developer Documentation, 2026, Silent Push จะเปิดใช้งานแอปในเบื้องหลังเป็นเวลา 30 วินาทีเพื่อประมวลผลข้อมูลที่เข้ามา หลังจากนั้นระบบจะคืนอุปกรณ์กลับสู่โหมดสลีปเพื่อประหยัดแบตเตอรี่
ประเด็นสำคัญ
Silent Push เป็นกลไกของ iOS ที่ส่งข้อมูลไปยังอุปกรณ์โดยไม่มีการแจ้งเตือนทางภาพใดๆ ไปยังผู้ใช้ แตกต่างจากการ push แบบมาตรฐานที่แสดงแบนเนอร์ เล่นเสียง และปรากฏในศูนย์การแจ้งเตือน silent push จะ “ปลุก” แอปในเบื้องหลังและส่งข้อมูลให้ประมวลผล ผู้ใช้จะไม่มีทางรู้เกี่ยวกับการจัดส่งการแจ้งเตือนดังกล่าว — ผลลัพธ์คือเนื้อหาที่อัปเดตเมื่อเปิดแอปครั้งต่อไป
ความแตกต่างหลักอยู่ที่เพย์โหลด JSON: silent push มีแฟล็ก content-available: 1 และไม่มี alert, sound หรือ badge การแจ้งเตือนมาตรฐานที่มี alert จะแสดงให้ผู้ใช้เห็นเสมอ โดยไม่ขึ้นกับ content-available Silent push ทำงานเฉพาะกับ content-available: 1 และไม่มี alert — หากคุณเพิ่ม alert ระบบจะแสดงการแจ้งเตือนแม้จะมีแฟล็กการจัดส่งเบื้องหลัง
การแจ้งเตือนแบบเงียบเป็นสิ่งจำเป็นสำหรับสถานการณ์ที่ข้อมูลต้องสดใหม่เมื่อผู้ใช้เปิดแอป แต่ไม่ควรรบกวนผู้ใช้ ตัวอย่าง: การอัปเดตฟีดข่าวในเบื้องหลัง การซิงโครไนซ์การสมัครรับข้อมูล การดาวน์โหลดเนื้อหาใหม่สำหรับการเข้าถึงแบบออฟไลน์ การอัปเดตวิดเจ็ต การทำให้แคชเป็นโมฆะ Silent Push ยังใช้เพื่อ “อุ่นเครื่อง” แอปก่อนการกระทำที่คาดหวังของผู้ใช้
การจัดส่ง Silent Push แตกต่างอย่างมากจากการแจ้งเตือนปกติและเป็นไปตามกฎการเพิ่มประสิทธิภาพพลังงาน ระบบ iOS จะรับคำขอ push จาก APNS ระบุว่านี่คือ silent push (content-available: 1) และตัดสินใจว่าจะจัดส่งหรือไม่โดยพิจารณาจากหลายปัจจัย: ระดับแบตเตอรี่ โหมดประหยัดพลังงาน ความถี่ของ silent push ก่อนหน้า กิจกรรมของแอป และโหลด CPU ปัจจุบัน
บนอุปกรณ์ที่มีชิป Apple M และ iOS 15+ silent push จะรวมเข้ากับกลไก Power Nap ซึ่งจะปลุกอุปกรณ์เป็นระยะสำหรับงานเบื้องหลัง Power Nap จะรวม silent push หลายรายการเป็นช่วงกิจกรรมเดียว ซึ่งลดการใช้พลังงานโดยรวม นักพัฒนาไม่สามารถควบคุม Power Nap โดยตรง — ระบบจะตัดสินใจโดยอัตโนมัติตามพฤติกรรมผู้ใช้และประวัติการใช้แอป
เมื่อระบบจัดส่ง silent push แอปจะได้รับการเรียก application(_:didReceiveRemoteNotification:fetchCompletionHandler:) ใน AppDelegate นักพัฒนาต้อง เรียก completion handler ภายใน 30 วินาที โดยส่งผลลัพธ์ที่ถูกต้อง (UIBackgroundFetchResult) หากการประมวลผลไม่เสร็จทันเวลา ระบบอาจจำกัดความถี่ของ silent push สำหรับแอปนี้หรือหยุดจัดส่งทั้งหมด
// การประมวลผล Silent Push ใน AppDelegate
func application(
_ application: UIApplication,
didReceiveRemoteNotification userInfo: [AnyHashable: Any],
fetchCompletionHandler completionHandler:
@escaping (UIBackgroundFetchResult) -> Void
) {
guard let type = userInfo["sync-type"] as? String
else {
completionHandler(.failed)
return
}
if type == "news-feed" {
NewsFeedSyncService().sync { success in
completionHandler(success ? .newData : .failed)
}
} else if type == "cache-invalidate" {
CacheManager.shared.invalidateAll()
completionHandler(.newData)
} else {
completionHandler(.noData)
}
}
Apple ไม่เผยแพร่ช่วงเวลาที่แน่นอนระหว่าง silent push แต่จากการทดสอบและเอกสาร แนะนำให้ส่งไม่เกิน 2–3 การแจ้งเตือนแบบเงียบต่อชั่วโมง ต่ออุปกรณ์ หากส่งบ่อยกว่านั้น ระบบจะเริ่มไม่สนใจ silent push และข้อมูลจะหยุดถูกจัดส่ง หากต้องการการซิงโครไนซ์บ่อยขึ้น ให้พิจารณาใช้ URLSession พร้อมการกำหนดค่าเบื้องหลังหรือ VoIP push
Silent Push ถูกใช้ในงานที่หลากหลายซึ่งข้อมูลต้องเป็นปัจจุบันโดยไม่ต้องให้ผู้ใช้มีส่วนร่วม เรามาดูกรณีการใช้งานที่มีประสิทธิภาพสูงสุดของกลไกนี้ในแอปพลิเคชัน iOS จริงกัน
แอปข่าว โปรแกรมอ่าน และแอปพลิเคชันท่องเที่ยวใช้ Silent Push เพื่อดาวน์โหลดเนื้อหาใหม่ในเบื้องหลัง เมื่อผู้ใช้เปิดแอป ข้อมูลจะถูกโหลดแล้วและพร้อมใช้งานแม้ไม่มีการเชื่อมต่ออินเทอร์เน็ต แนวทางนี้ ช่วยปรับปรุงประสบการณ์ผู้ใช้ได้อย่างมาก — หน้าจอโหลดว่างเปล่าจะหายไปและเนื้อหาจะแสดงทันที เซิร์ฟเวอร์จะส่ง silent push เมื่อมีบทความใหม่ และแอปจะดาวน์โหลดในเบื้องหลังเพื่ออ่านแบบออฟไลน์
iOS WidgetKit อัปเดตวิดเจ็ตตามกำหนดเวลา แต่สำหรับการอัปเดตทันทีหลังจากการเปลี่ยนแปลงข้อมูลฝั่งเซิร์ฟเวอร์ จะใช้ Silent Push แอปในเบื้องหลัง จะประมวลผล silent push อัปเดตพื้นที่เก็บข้อมูลท้องถิ่นสำหรับวิดเจ็ต และบังคับรีเฟรชไทม์ไลน์ผ่าน WidgetCenter ผู้ใช้เห็นข้อมูลล่าสุดบนวิดเจ็ตโดยไม่ต้องเปิดแอป — อัตราแลกเปลี่ยน พยากรณ์อากาศ สถานะการจัดส่ง
เมื่อเซิร์ฟเวอร์อัปเดตข้อมูลสำคัญ (เช่น กฎการกำหนดราคา คุณสมบัติที่มีให้สำหรับผู้ใช้ระดับพรีเมียม) Silent Push ช่วยให้สามารถทำให้แคชภายในเครื่องเป็นโมฆะได้ทันที เมื่อเปิดครั้งถัดไป แอปจะโหลดข้อมูลใหม่จากเซิร์ฟเวอร์แทนที่จะใช้แคชที่ล้าสมัย ซึ่งมีความเกี่ยวข้องโดยเฉพาะสำหรับแอปที่มีเนื้อหาที่ต้องชำระเงินหรือการสมัครรับข้อมูล
ในบางสถานการณ์ จำเป็นต้องอัปเดตป้ายบนไอคอนแอปโดยไม่แสดงการแจ้งเตือน Silent Push ที่มีฟิลด์ badge ในเพย์โหลดช่วยให้ตั้งค่าตัวนับที่ต้องการได้โดยไม่รบกวนผู้ใช้ด้วยแบนเนอร์ ตัวอย่างเช่น แอปแชทสามารถอัปเดตป้ายด้วยจำนวนข้อความที่ยังไม่ได้อ่านโดยไม่ต้องแสดงข้อความใหม่แต่ละข้อความเป็นการแจ้งเตือนหากผู้ใช้อยู่ในแอปแล้ว
สำหรับการทำงานที่ถูกต้องของ Silent Push จำเป็นต้องมีการกำหนดค่าในสามระดับ: โปรเจกต์ Xcode เพย์โหลด JSON บนเซิร์ฟเวอร์ และโค้ดการประมวลผลในแอป แต่ละระดับ มีความสำคัญ: การข้ามขั้นตอนใดๆ จะส่งผลให้การแจ้งเตือนถูกจัดส่งเป็นแบบปกติหรือไม่ถูกจัดส่งเลย
ใน Xcode คุณต้องเปิดใช้งานความสามารถ Push Notifications และ Background Modes โดยทำเครื่องหมายที่ช่อง Remote notifications Push Notifications จะสร้างใบรับรองสำหรับ APNS ในขณะที่ Remote notifications ใน Background Modes อนุญาตให้ระบบปลุกแอปเมื่อได้รับ silent push หากไม่มี Remote notifications silent push จะถูกจัดส่ง แต่แอปจะไม่ถูกเปิดใช้งานในเบื้องหลังและข้อมูลจะไม่ถูกประมวลผล
เพย์โหลด Silent Push ต้องมีคีย์ aps พร้อม content-available: 1 และต้องไม่มี alert, sound หรือ badge ฟิลด์ที่กำหนดเอง จะถูกส่งในระดับเดียวกับ aps และมีข้อมูลสำหรับการประมวลผล: ประเภทการดำเนินการ ตัวระบุวัตถุ เมตาดาต้า เพย์โหลดที่ไม่มี content-available จะถูกจัดการเป็นการแจ้งเตือนปกติ หากมี alert จะเป็นปกติแม้จะมี content-available
{
"aps": {
"content-available": 1
},
"sync-type": "news-feed",
"last-article-id": "article_8521",
"priority": "high"
}
เมื่อได้รับ silent push iOS จะเรียก application(_:didReceiveRemoteNotification:fetchCompletionHandler:) ก่อนที่แอปจะมองเห็นได้ ในเมธอดนี้ คุณต้องวิเคราะห์ userInfo ดำเนินงานที่จำเป็น (คำขอเครือข่าย การเขียน Core Data การอัปเดตแคช) และเรียก completionHandler ด้วยผลลัพธ์ที่ถูกต้องภายใน 30 วินาทีเสมอ การไม่เรียก completionHandler ถือเป็นข้อผิดพลาดโดยระบบและส่งผลต่อความถี่ของ silent push ในอนาคต
Silent Push ไม่ใช่ช่องทางการจัดส่งข้อมูลที่เชื่อถือได้สำหรับการดำเนินการที่สำคัญ — มันเป็นกลไกการปรับให้เหมาะสม ไม่ใช่การซิงโครไนซ์ที่รับประกัน นักพัฒนาต้องเข้าใจข้อจำกัดและออกแบบระบบเพื่อให้แอปทำงานได้อย่างถูกต้องทั้งที่มีและไม่มี silent push
iOS ไม่รับประกันการจัดส่ง silent push ทุกรายการ ระบบอาจเลื่อนหรือยกเลิกการจัดส่งเมื่อแบตเตอรี่เหลือน้อย (ต่ำกว่า 20%) ในโหมดประหยัดพลังงาน หลังจาก silent push บ่อยครั้ง หรือหากไม่ได้ใช้แอปเป็นเวลานาน สถิติการจัดส่งโดยเฉลี่ย ตามข้อมูลของ Apple: ประมาณ 70–80% ของ silent push จะถูกจัดส่งภายใน 5 นาที ส่วนที่เหลืออาจล่าช้าหรือสูญหาย
Apple แนะนำให้ปฏิบัติตามกฎหลายข้อเพื่อการใช้ silent push อย่างมีประสิทธิภาพ อย่าส่ง silent push เกิน 2–3 ครั้งต่อชั่วโมง ต่ออุปกรณ์ — การเกินขีดจำกัดจะทำให้ถูกบล็อก ใช้เพย์โหลดแบบกะทัดรัด: ขนาดเพย์โหลดขั้นต่ำช่วยเร่งการประมวลผลและลดภาระเครือข่าย เรียก completionHandler เสมอและเร็วที่สุดเท่าที่เป็นไปได้: ยิ่งการประมวลผลใช้นานเท่าใด โอกาสที่ระบบจะจำกัด silent push ในอนาคตก็ยิ่งสูงขึ้น
สำหรับสถานการณ์ที่ต้องการการจัดส่งที่รับประกันหรือเวลาประมวลผลมากขึ้น ให้พิจารณาทางเลือก VoIP push (PushKit) รับประกันการจัดส่งและให้เวลามากขึ้น แต่มีไว้สำหรับแอปพลิเคชัน VoIP เท่านั้น Background fetch (UIApplication background fetch) จะถูกเริ่มต้นโดยระบบตามกำหนดเวลา แต่ไม่สามารถเริ่มต้นโดยเซิร์ฟเวอร์ได้ WebSocket รักษาการเชื่อมต่อถาวร แต่กินแบตเตอรี่มากกว่าและไม่เหมาะกับแอปทุกประเภท
ในการดีบัก Silent Push ให้ใช้ Console.app บน Mac และกรองตามชื่อแอป ระบบจะบันทึก silent push แต่ละรายการด้วยป้าย “background task” และระบุว่าการประมวลผลสำเร็จหรือไม่ บนอุปกรณ์ ให้ตรวจสอบผ่าน Settings → Developer → Background Modes Logging การติดตามฝั่งเซิร์ฟเวอร์ทำผ่าน APNS Feedback Service เพื่อระบุการแจ้งเตือนที่ไม่ได้รับการจัดส่ง
คำถามที่พบบ่อย
Silent Push จะไม่แสดงให้ผู้ใช้เห็น ไม่เล่นเสียง และไม่ปรากฏในศูนย์การแจ้งเตือน วัตถุประสงค์ของมัน คือการเปิดใช้งานแอปในเบื้องหลังเพื่อซิงโครไนซ์ข้อมูล การ push ปกติจะแสดงแบนเนอร์เสมอและอาจมีเสียงและป้าย
แอปได้รับ 30 วินาที เพื่อทำงานเบื้องหลังให้เสร็จ หลังจากเรียก completionHandler ระบบจะคืนอุปกรณ์กลับสู่โหมดสลีป หากไม่เรียก completionHandler ทันเวลา ระบบอาจหยุดจัดส่ง silent Push ไปยังแอปนี้
ระบบอาจเลื่อนการจัดส่งเมื่อแบตเตอรี่เหลือน้อย ในโหมดประหยัดพลังงาน หลังจากส่ง silent push บ่อยครั้ง หรือหากไม่ได้ใช้แอปเป็นเวลานาน นี่คือพฤติกรรมปกติของ iOS ที่ไม่เกี่ยวข้องกับข้อผิดพลาดในการนำไปใช้
ได้ คุณสามารถรวม content-available: 1 พร้อมกับ alert — ในกรณีนี้ การแจ้งเตือนจะแสดงให้ผู้ใช้เห็นและแอปจะได้รับการเปิดใช้งานเบื้องหลังเพิ่มเติม แต่หากงาน คือการซิงโครไนซ์เบื้องหลังโดยไม่แสดงเท่านั้น จะไม่สามารถรวม alert ได้
ใช้ Console.app บน Mac เพื่อดูบันทึกงานเบื้องหลัง ส่ง silent push ทดสอบผ่าน APNS และตรวจสอบว่า didReceiveRemoteNotification ถูกเรียกด้วย completionHandler ที่ถูกต้อง ใน Xcode ให้ใช้เครื่องจำลองพร้อมการจำลองโหมดเบื้องหลัง
สรุป
เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร
IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ
อ่านเพิ่มเติม