การแจ้งเตือน Push คือข้อความที่เซิร์ฟเวอร์ส่งไปยังอุปกรณ์มือถือแม้ในขณะที่แอปพลิเคชันปิดอยู่ ตามข้อมูลของ Google Firebase, 2024 การแจ้งเตือน Push จะถูกประมวลผลผ่านบริการเฉพาะทาง — FCM บน Android และ APNS บน iOS ซึ่งรองรับ การส่งแบบเรียลไทม์ ไปยังอุปกรณ์นับล้านเครื่องพร้อมกัน การแจ้งเตือนเหล่านี้กลายเป็นส่วนสำคัญของประสบการณ์ผู้ใช้ในแอปพลิเคชันมือถือสมัยใหม่
สาระสำคัญ
การแจ้งเตือน Push คือข้อความสั้นที่เซิร์ฟเวอร์ของแอปพลิเคชันส่งไปยังอุปกรณ์ของผู้ใช้โดยไม่ต้องมีการร้องขออย่างชัดแจ้ง ข้อความเหล่านี้จะแสดงในรูปแบบของแบนเนอร์ ไอคอนหรือสัญญาณเสียง เพื่อดึงดูดความสนใจของผู้ใช้ไปยังแอปพลิเคชันและแจ้งข้อมูลเกี่ยวกับเหตุการณ์สำคัญ
การแจ้งเตือน Push ประกอบด้วยหัวเรื่อง เนื้อหาของข้อความ และข้อมูลเพิ่มเติม (payload) ที่ไม่บังคับ แตกต่างจาก SMS การแจ้งเตือน Push นั้นฟรีสำหรับผู้ใช้และถูกส่งผ่าน โครงสร้างพื้นฐานของบริการคลาวด์ — FCM สำหรับ Android และ APNS สำหรับ iOS วัตถุประสงค์หลักของการแจ้งเตือน Push: เพิ่มการมีส่วนร่วม แจ้งข้อมูลเกี่ยวกับเหตุการณ์ และดึงผู้ใช้กลับมาใช้แอปพลิเคชัน
สถิติการใช้งานแสดงให้เห็นว่าการแจ้งเตือน Push ที่กำหนดค่าอย่างถูกต้องจะเพิ่ม retention ของแอปพลิเคชันได้ 30-60% อย่างไรก็ตามความถี่ที่มากเกินไปของการแจ้งเตือนทำให้เกิดการยกเลิก — ผู้ใช้มากกว่า 60% ปิดการแจ้งเตือนหากถูกส่งบ่อยกว่าสามครั้งต่อวัน
ระบบ Push ประกอบด้วยสามองค์ประกอบ: เซิร์ฟเวอร์แอปพลิเคชัน (app server), บริการของแพลตฟอร์ม (FCM/APNS) และแอปพลิเคชันไคลเอนต์บนอุปกรณ์ เซิร์ฟเวอร์ส่งคำขอไปยังบริการของแพลตฟอร์ม ซึ่งจะส่งการแจ้งเตือนไปยังอุปกรณ์เป้าหมายผ่านการเชื่อมต่อถาวรกับระบบปฏิบัติการ
กลไกการส่ง ของการแจ้งเตือน Push ขึ้นอยู่กับการเชื่อมต่อถาวรระหว่างอุปกรณ์และบริการของแพลตฟอร์ม ระบบปฏิบัติการจะรักษาช่องทางการสื่อสารที่เข้ารหัสไว้ ซึ่งข้อความ Push ทั้งหมดจะถูกส่งผ่าน
เมื่อเปิดใช้งานครั้งแรก แอปพลิเคชันจะขออนุญาตในการส่งการแจ้งเตือนและรับ โทเค็นอุปกรณ์เฉพาะ จาก FCM หรือ APNS โทเค็นนี้เป็นสตริงที่มีความยาวสูงสุด 4 KB ซึ่งระบุอินสแตนซ์ของแอปพลิเคชันได้อย่างชัดเจน โทเค็นจะเปลี่ยนแปลงเมื่อติดตั้งแอปพลิเคชันใหม่หรือกู้คืนอุปกรณ์จากการสำรองข้อมูล
class FirebaseMessagingService :
FirebaseMessagingService() {
override fun onNewToken(token: String) {
sendTokenToServer(token)
}
override fun onMessageReceived(
message: RemoteMessage
) {
showNotification(message.notification)
}
}
เซิร์ฟเวอร์แอปพลิเคชันส่งคำขอ HTTP ไปยัง FCM API หรือ APNS API โดยระบุโทเค็นเป้าหมาย หัวเรื่อง เนื้อหา และข้อมูลเพิ่มเติม บริการของแพลตฟอร์มจะตอบกลับด้วยสถานะการส่ง: success, invalid token (อุปกรณ์ลบแอปพลิเคชันแล้ว) หรือ rate-limited (เกินความถี่ในการส่ง)
fetch("https://fcm.googleapis.com/fcm/send", {
method: "POST",
headers: {
"Authorization": "key=AIzaSy...",
"Content-Type": "application/json"
},
body: JSON.stringify({
to: "device_token_here",
notification: {
title: "ข้อความใหม่",
body: "คุณมีการแจ้งเตือนใหม่!"
}
})
})
การเลือกระหว่าง FCM และ APNS ขึ้นอยู่กับแพลตฟอร์มเป้าหมาย FCM รองรับ Android และ iOS ส่วน APNS รองรับเฉพาะระบบนิเวศของ Apple มาดูความแตกต่างที่สำคัญซึ่งสำคัญสำหรับการพัฒนาแอปพลิเคชันมือถือแบบข้ามแพลตฟอร์ม
FCM เป็นบริการของ Google ที่ทำงานบน Google Play Services รองรับรูปแบบการส่งสองแบบ: การแจ้งเตือนแบบแสดงผลอัตโนมัติ (display notifications) และ การแจ้งเตือนแบบข้อมูล ซึ่งแอปพลิเคชันจะจัดการด้วยตนเอง FCM ใช้งานได้ฟรีและไม่มีข้อจำกัดเกี่ยวกับจำนวนข้อความที่ส่ง
APNS เป็นบริการของ Apple ที่รองรับ ไฟล์แนบมัลติมีเดีย (รูปภาพ วิดีโอ เสียง) ขนาดสูงสุด 10 MB สำหรับการส่งผ่าน APNS จำเป็นต้องมี ใบรับรอง TLS หรือคีย์การตรวจสอบสิทธิ์ APNS จำกัดความถี่ในการส่งต่อหนึ่งอุปกรณ์ — ไม่เกิน 150 การแจ้งเตือนต่อนาที หลังจากนั้นจะเปิดใช้งาน rate limiting
| คุณลักษณะ | FCM | APNS |
|---|---|---|
| แพลตฟอร์ม | Android, iOS, Web | iOS, macOS, watchOS |
| ข้อกำหนด | Google Play Services | Apple Developer Program |
| สื่อ | สูงสุด 4 KB (data) | สูงสุด 10 MB (attachments) |
| ลำดับความสำคัญ | normal/high | immediate/power-saving |
| ค่าใช้จ่าย | ฟรี | ฟรี (ต้องมีบัญชี) |
การแจ้งเตือน Push ถูกจำแนกตามวิธีการแสดงผลและวัตถุประสงค์ การเข้าใจประเภทต่าง ๆ ช่วยในการเลือกกลยุทธ์ที่เหมาะสมสำหรับแต่ละสถานการณ์การโต้ตอบกับผู้ใช้
ประเภทที่พบบ่อยที่สุดคือ การแจ้งเตือนแบบแสดงผล พร้อมหัวเรื่องและเนื้อหา ระบบปฏิบัติการจะแสดงในแผงแจ้งเตือนโดยอัตโนมัติ บนหน้าจอล็อก และในรูปแบบแบนเนอร์ นักพัฒนาสามารถกำหนดค่าเสียง การสั่น ไอคอน และปุ่มปฏิบัติการสำหรับการดำเนินการโดยตรง (ตอบกลับ เปิด ปฏิเสธ)
การแจ้งเตือนแบบข้อมูล มี เฉพาะ payload โดยไม่มีการแสดงผลทางภาพ แอปพลิเคชันจะประมวลผลในพื้นหลัง: ซิงค์ข้อมูล อัปเดตแคช หรือเริ่มการดาวน์โหลด บน Android การแจ้งเตือนแบบข้อมูล จะถูกส่งอย่างแน่นอน ส่วนบน iOS — เฉพาะเมื่อแอปพลิเคชันทำงานอยู่หรือผ่าน background fetch
ระบบปฏิบัติการมือถือสมัยใหม่รองรับ การแจ้งเตือนแบบขยายและสื่อ พร้อมรูปภาพ GIF วิดีโอและเสียง บน iOS ทำได้ผ่าน UNNotificationAttachment บน Android — ผ่าน BigPictureStyle และ InboxStyle สำหรับการปรับแต่งลักษณะการแจ้งเตือนในแผงแจ้งเตือนของระบบ
การแจ้งเตือนแบบเงียบ ไม่แสดงต่อผู้ใช้ และใช้สำหรับการซิงค์พื้นหลัง บน iOS มีลำดับความสำคัญสูงสำหรับงานประเภทการอัปเดตข้อมูลก่อนเปิดแอปพลิเคชัน Android ถือว่าเป็น การแจ้งเตือนแบบข้อมูล ที่มีลำดับความสำคัญต่ำ
การตั้งค่าการแจ้งเตือน Push ต้องดำเนินการในระดับโครงสร้างพื้นฐาน ส่วนของเซิร์ฟเวอร์ และโค้ดไคลเอนต์ มาดูกระบวนการทั่วไปสำหรับโปรเจกต์มือถือแบบข้ามแพลตฟอร์ม
สำหรับ Android จำเป็นต้องสร้างโปรเจกต์ใน Firebase Console เพิ่ม google-services.json ในโปรเจกต์ และกำหนดค่า FirebaseMessagingService โทเค็นอุปกรณ์จะได้รับผ่าน FirebaseInstanceId หรือ FirebaseMessaging.getInstance().token จากนั้นส่งไปยังเซิร์ฟเวอร์ผ่าน API เมื่อเปิดใช้งานครั้งแรกหรือเมื่อมีการเปลี่ยนแปลง
สำหรับ iOS จำเป็นต้องสมัครสมาชิก Apple Developer Program สร้าง ใบรับรอง Push หรือ คีย์ APNS ใน Developer Portal และเปิดใช้งาน Capability Push Notifications ใน Xcode การลงทะเบียนการแจ้งเตือนทำผ่าน UIApplication.shared.registerForRemoteNotifications โดยรับ deviceToken ใน AppDelegate
import UIKit
import UserNotifications
@main
class AppDelegate: UIResponder,
UIApplicationDelegate {
func application(
_ application: UIApplication,
didRegisterForRemoteNotificationsWithDeviceToken
deviceToken: Data
) {
let token = deviceToken
.map { String.format("%02x", $0) }
.joined()
// ส่ง token ไปยังเซิร์ฟเวอร์ของคุณ
}
}
ในฝั่งเซิร์ฟเวอร์ การแจ้งเตือน Push จะถูกส่งผ่าน REST API หรือ Admin SDK สำหรับ FCM ใช้ Firebase Admin SDK (พร้อมใช้งานสำหรับ Node.js, Java, Python, Go) สำหรับ APNS ใช้ไลบรารี pusher (pushy สำหรับ Java, apn2 สำหรับ Node.js) แนะนำให้เก็บโทเค็นในฐานข้อมูลพร้อมtimestamp ของการอัปเดตล่าสุด
ความปลอดภัยของการแจ้งเตือน Push มีความสำคัญอย่างยิ่ง เนื่องจากข้อมูลที่ละเอียดอ่อนอาจถูกส่งผ่านทางนั้น ทั้งสองแพลตฟอร์มมีกลไกการป้องกันพื้นฐาน แต่นักพัฒนามีหน้าที่ต้องใช้อย่างถูกต้อง
Payload ของการแจ้งเตือน Push อาจมี ข้อมูลส่วนบุคคล ของผู้ใช้: ชื่อ จำนวนเงินธุรกรรม ลิงก์ไปยังข้อความ แม้ว่าช่องทางการสื่อสารระหว่าง FCM/APNS และอุปกรณ์จะถูกเข้ารหัส ข้อมูลอาจถูกดักจับในระดับแอปพลิเคชันเมื่อมีการดักจับการแจ้งเตือนโดยซอฟต์แวร์ของบุคคลที่สาม แนะนำให้เข้ารหัส payload ที่ละเอียดอ่อนบนเซิร์ฟเวอร์ด้วยอัลกอริทึม AES-256 และถอดรหัสบนอุปกรณ์ด้วยคีย์ที่เก็บไว้ใน Keychain (iOS) หรือ EncryptedSharedPreferences (Android)
โทเค็นอุปกรณ์คือ ตัวระบุเซสชัน ที่อาจถูกบุกรุกเมื่ออุปกรณ์ถูกแฮ็กหรือมีการดักจับทราฟฟิก เซิร์ฟเวอร์แอปพลิเคชันต้องตรวจสอบโทเค็นก่อนส่ง: ตรวจสอบกับฐานข้อมูล ติดตามโทเค็นที่ไม่ใช้งาน และลบเมื่อพบข้อผิดพลาด InvalidToken ซ้ำ ๆ FCM และ APNS จะส่งคืนสถานะ InvalidRegistration สำหรับโทเค็นที่ไม่ถูกต้อง — อย่าละเลย
หากไม่มีการควบคุมความถี่ การแจ้งเตือน Push อาจกลายเป็น เครื่องมือสแปม ที่ทำให้ผู้ใช้รำคาญและลด retention ให้ตั้งค่าขีดจำกัดบนเซิร์ฟเวอร์: ไม่เกิน 5 การแจ้งเตือนต่อชั่วโมงต่อผู้ใช้หนึ่งคน และไม่เกิน 3 ข้อความที่เหมือนกัน สำหรับการแจ้งเตือนทางธุรกรรม (ยืนยันคำสั่งซื้อ เปลี่ยนรหัสผ่าน) ขีดจำกัดอาจสูงกว่า — ถึง 10 ต่อชั่วโมง เนื่องจากเป็นข้อมูลที่สำคัญอย่างยิ่ง ใช้ rate limiting ในระดับ API การส่งเพื่อป้องกันไม่ให้ผู้ไม่หวังดีเรียกส่งจำนวนมากผ่านเซิร์ฟเวอร์ของคุณ
คำถามที่พบบ่อย
ได้ ผ่าน การเชื่อมต่อตรงไปยัง APNS ไม่รองรับบน Android — สำหรับอุปกรณ์ที่ไม่มี Google Play Services จะใช้ทางเลือกอื่นเช่น Huawei Mobile Services (HMS) และการเชื่อมต่อ WebSocket ของตัวเอง อย่างไรก็ตาม FCM ยังคงเป็นมาตรฐานสำหรับแอปพลิเคชันส่วนใหญ่เนื่องจากใช้งานฟรีและมีความน่าเชื่อถือ
FCM และ APNS จะเก็บ การแจ้งเตือนล่าสุด ไว้บนเซิร์ฟเวอร์ของตนและส่งเมื่อเชื่อมต่อใหม่ ในแต่ละอุปกรณ์จะเก็บเฉพาะการแจ้งเตือนล่าสุดจากแต่ละแอปพลิเคชัน ดังนั้นเมื่อไม่มีเครือข่ายเป็นเวลานาน ข้อความระหว่างกลางจะสูญหาย
สาเหตุที่พบบ่อยที่สุดคือ ใบรับรอง Push หมดอายุ (มีอายุ 1 ปี) โทเค็นอุปกรณ์ไม่ถูกต้อง ปิดการแจ้งเตือนในการตั้งค่า หรือเปิดโหมดประหยัดพลังงาน ตรวจสอบใบรับรอง ใน Apple Developer Console และตรวจสอบให้แน่ใจว่าแอปพลิเคชันขออนุญาตผ่าน UNUserNotificationCenter
บน Android ใช้ PendingIntent ใน NotificationCompat.Builder พร้อมติดตามการเปิดผ่าน Intent บน iOS — ใช้เมธอด UNUserNotificationCenterDelegate.userNotificationCenter(_:didReceive:withCompletionHandler:) FCM ให้รายงานการส่งและการเปิดสำหรับการแจ้งเตือนแต่ละครั้ง
มีผลเพียงเล็กน้อย — การแจ้งเตือน Push ไม่ได้รักษาการเชื่อมต่อถาวร ระบบปฏิบัติการใช้ช่องทางระบบเดียวสำหรับทุกแอปพลิเคชัน ซึ่งช่วยลดการใช้พลังงานโดยรวม การส่งบ่อยครั้ง (ทุก 5 นาที) ใช้พลังงานมากขึ้นในการปลุกอุปกรณ์และออกจากโหมดพัก การแจ้งเตือนแบบเงียบบน iOS ใช้พลังงานมากกว่าเนื่องจากมีการเปิดใช้งานแอปพลิเคชันในพื้นหลังเพื่อประมวลผลข้อมูลที่ได้รับ
สรุป
เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร
IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ
อ่านเพิ่มเติม