การแจ้งเตือนแบบพุชเป็นหนึ่งในวิธีที่มีประสิทธิภาพที่สุดในการโต้ตอบกับผู้ใช้หลังจากติดตั้งแอป ช่วยให้แจ้งเกี่ยวกับข้อความใหม่ ส่วนลด การอัปเดตเนื้อหา หรือเตือนเกี่ยวกับตะกร้าสินค้าที่ถูกละทิ้ง การแจ้งเตือนแบบพุช (push notifications) ทำงานผ่านบริการคลาวด์: Firebase Cloud Messaging (FCM) บน Android และ Apple Push Notification Service (APNS) บน iOS ในบทความนี้เราจะวิเคราะห์สถาปัตยกรรมการแจ้งเตือน ประเภท และขั้นตอนการตั้งค่าสำหรับทั้งสองแพลตฟอร์ม ดูรายละเอียดเพิ่มเติมได้ใน เอกสารทางการของ FCM
ประเด็นสำคัญ
การแจ้งเตือนแบบพุชคือข้อความที่เซิร์ฟเวอร์ส่งไปยังอุปกรณ์มือถือโดยไม่มีการร้องขอจากแอป ข้อความผ่านบริการคลาวด์ (FCM หรือ APNS) ซึ่งจะส่งไปยังอุปกรณ์แม้ว่าแอปจะปิดอยู่ การแจ้งเตือนแบ่งออกเป็นสองประเภท: การแจ้งเตือนแบบแสดงผล (แสดงให้ผู้ใช้เห็น) และการแจ้งเตือนแบบข้อมูล (ส่งข้อมูลสำหรับการประมวลผลพื้นหลัง)
สถาปัตยกรรมการแจ้งเตือนแบบพุชประกอบด้วยสามองค์ประกอบ: (1) เซิร์ฟเวอร์แอป — ส่งคำขอไปยัง FCM/APNS; (2) บริการคลาวด์ — เส้นทางการแจ้งเตือน; (3) แอปไคลเอนต์ — รับและประมวลผลการแจ้งเตือน เซิร์ฟเวอร์ต้องทราบ Device Token ของอุปกรณ์เพื่อส่งการแจ้งเตือนไปยังอุปกรณ์นั้นโดยเฉพาะ สำหรับการส่งจำนวนมากใช้ Topic Subscription — การสมัครรับอุปกรณ์ในช่องตามหัวข้อ (ข่าวสาร โปรโมชั่น สภาพอากาศ)
บนแต่ละอุปกรณ์ การแจ้งเตือนจะถูกประมวลผลโดยระบบปฏิบัติการ: Android — ผ่าน NotificationManager และ NotificationChannel, iOS — ผ่าน UNUserNotificationCenter ผู้ใช้สามารถกำหนดค่าพฤติกรรมการแจ้งเตือนสำหรับแต่ละช่อง: อนุญาตเสียง แบนเนอร์ แสดงบนหน้าจอล็อก หรือปิดทั้งหมด การกำหนดค่าช่องที่ถูกต้อง ช่วยเพิ่มการมีส่วนร่วมและลดอัตราการยกเลิกการสมัคร
ที่ IT Sectr เราออกแบบระบบการแจ้งเตือนแบบพุชโดยคำนึงถึงคุณสมบัติเฉพาะของแพลตฟอร์มตั้งแต่เริ่มต้น การตัดสินใจหลัก: การเลือกระหว่าง FCM และ APNS โดยตรง รูปแบบเพย์โหลด ความถี่ในการส่ง และกลไกการสมัครรับข้อมูล ช่วยหลีกเลี่ยงสถานการณ์ที่การแจ้งเตือนไม่ถึงหรือถูกบล็อกโดยระบบ
Firebase Cloud Messaging (FCM) คือบริการข้ามแพลตฟอร์มของ Google สำหรับส่งการแจ้งเตือน FCM รองรับ Android, iOS, Web และ Flutter บน iOS FCM ทำงานผ่าน APNS: FCM ส่งคำขอไปยัง APNS ซึ่งส่งการแจ้งเตือนไปยังอุปกรณ์ ข้อดีของ FCM: API เดียวสำหรับทั้งสองแพลตฟอร์ม การวิเคราะห์ในตัว การทดสอบ A/B หัวข้อและกลุ่มผู้ชม
Apple Push Notification Service (APNS) คือบริการดั้งเดิมของ Apple ทำงานบนอุปกรณ์ Apple เท่านั้น (iOS, macOS, watchOS, tvOS) ต้องการการอนุญาตโดยตรงผ่านใบรับรอง TLS หรือโทเค็น (JWT) APNS ให้ ความหน่วงในการส่งน้อยที่สุดและการรวมโดยตรงกับฟีเจอร์ iOS: PushKit, Notification Service Extension และการแจ้งเตือนที่สำคัญ
การเลือกระหว่าง FCM และ APNS ขึ้นอยู่กับสถาปัตยกรรมของโปรเจกต์ หากแอปสำหรับ iOS เท่านั้น — APNS ให้การควบคุมมากขึ้น หากข้ามแพลตฟอร์ม — FCM สะดวกกว่าด้วย API เดียว หลายโปรเจกต์ใช้ FCM เป็นบริการหลักและตั้งค่า PushKit เพิ่มเติมสำหรับ VoIP บน iOS แนวทางแบบไฮบริด ช่วยให้ได้รับสิ่งที่ดีที่สุดจากทั้งสองระบบ
| คุณลักษณะ | FCM | APNS |
|---|---|---|
| แพลตฟอร์ม | Android, iOS, Web, Flutter | iOS, macOS, watchOS, tvOS |
| การอนุญาต | คีย์เซิร์ฟเวอร์ (Firebase Console) | ใบรับรอง TLS หรือโทเค็น JWT |
| เพย์โหลดสูงสุด | 4 KB (data), 2 KB (notification) | 4 KB |
| หัวข้อ | ในตัว (Topic Messaging) | ไม่มี (ดำเนินการฝั่งเซิร์ฟเวอร์) |
| Silent Push | รองรับ | รองรับ (content-available) |
| PushKit | ไม่มี | มี (VoIP, กิจกรรมสด) |
| การวิเคราะห์ | Firebase Analytics | ไม่มีในตัว |
| การส่งไปยังอุปกรณ์ที่ปิด | จำกัด (ขึ้นอยู่กับผู้ผลิต) | ได้ ผ่าน PushKit |
Rich Notification คือการแจ้งเตือนที่มีไม่เพียงแค่ข้อความแต่ยังมีเนื้อหามัลติมีเดีย: รูปภาพ วิดีโอ เสียง และปุ่มดำเนินการ บน Android ดำเนินการผ่านสไตล์ NotificationCompat: BigPictureStyle (รูปภาพขนาดใหญ่), BigTextStyle (ข้อความย่อ/ขยาย), InboxStyle (รายการข้อความ), MediaStyle (ควบคุมการเล่น) บน iOS ใช้ Notification Content Extension — เป้าหมายแยกต่างหากพร้อม UI ที่กำหนดเองสำหรับการแจ้งเตือนแบบขยาย
Silent Push (content-available บน iOS) คือการแจ้งเตือนที่ส่งโดยไม่แสดงให้ผู้ใช้เห็น มีไว้สำหรับการอัปเดตข้อมูลพื้นหลัง: การซิงค์เนื้อหา การโหลดล่วงหน้า การอัปเดตวิดเจ็ต บน iOS Silent Push ต้องการเปิด Background Modes → Remote notifications บน Android ใช้ FirebaseMessagingService กับ onMessageReceived สำหรับจัดการการแจ้งเตือนพื้นหลัง สำคัญ: บน iOS Silent Push มีข้อจำกัดความถี่และไม่รับประกันการส่งหากแอปไม่ได้อยู่เบื้องหน้า
Interactive Notification ช่วยให้ผู้ใช้ดำเนินการโดยไม่ต้องเปิดแอป บน Android คือปุ่ม (Action) ในการแจ้งเตือน: "ตอบกลับ", "อนุมัติ", "ปฏิเสธ" การดำเนินการประมวลผลผ่าน PendingIntent ซึ่งเริ่ม BroadcastReceiver หรือ Service บน iOS Notification Action ลงทะเบียนผ่าน UNNotificationAction และ UNNotificationCategory ปุ่มสามารถเป็น foreground (เปิดแอป), background (ทำงานในพื้นหลัง) หรือ destructive (การดำเนินการที่ไม่สามารถย้อนกลับ — ลบ, บล็อก)
Notification Content Extension (iOS) — ตัวควบคุมมุมมองที่กำหนดเองสำหรับแสดงเนื้อหาการแจ้งเตือนแบบขยายเมื่อกดค้างหรือ 3D Touch Notification Service Extension (iOS) — มิดเดิลแวร์สำหรับแก้ไขเนื้อหาการแจ้งเตือนก่อนแสดง: ถอดรหัสข้อความ E2E โหลดรูปภาพ ทำให้ข้อมูลลับไม่ชัดเจน บน Android ไม่มีสิ่งที่คล้ายคลึงกันโดยตรง — การแก้ไขทั้งหมดทำใน FirebaseMessagingService
สำหรับ Android จำเป็นต้อง: (1) เพิ่ม Firebase SDK ในโปรเจกต์ (google-services.json); (2) สร้าง NotificationChannel (Android 8+) สำหรับแต่ละหมวดหมู่การแจ้งเตือน; (3) ดำเนินการ FirebaseMessagingService เพื่อรับโทเค็นและข้อความขาเข้า Notification Channel จำเป็น — หากไม่มี การแจ้งเตือนจะไม่แสดงบน Android 8+ ช่องมีลำดับความสำคัญ (IMPORTANCE_HIGH — เสียง + ป๊อปอัป, IMPORTANCE_LOW — ไม่มีเสียง) และผู้ใช้สามารถกำหนดค่าได้ในการตั้งค่าระบบ
สำหรับ iOS จำเป็นต้อง: (1) เปิดความสามารถ Push Notifications ใน Xcode; (2) กำหนดค่าคีย์ APNS บน Apple Developer Portal; (3) ขออนุญาตผ่าน UNUserNotificationCenter.requestAuthorization — นี่คือกล่องโต้ตอบระบบที่แสดงครั้งเดียว การตอบสนองของผู้ใช้ สำคัญมาก: หากไม่ได้รับอนุญาต การแจ้งเตือนจะไม่ถูกส่ง ขอแนะนำให้อธิบายให้ผู้ใช้ทราบว่าทำไมต้องมีการแจ้งเตือนก่อนแสดงกล่องโต้ตอบระบบ (pre-permission prompt)
Device Token (iOS) และ Registration Token (Android) คือตัวระบุอุปกรณ์ที่ไม่ซ้ำกันสำหรับการแจ้งเตือนแบบพุช โทเค็นถูกสร้างขึ้นเมื่อเปิดแอปครั้งแรกและสามารถเปลี่ยนแปลงได้: เมื่อติดตั้งใหม่ ล้างข้อมูล รีเซ็ตการตั้งค่าความเป็นส่วนตัว เซิร์ฟเวอร์ต้องอัปเดตโทเค็นเป็นประจำ Firebase มี API ที่สะดวกสำหรับการจัดการโทเค็นผ่าน onNewToken รวมถึงแผงสำหรับส่งการแจ้งเตือนทดสอบ (Firebase Console → Cloud Messaging)
Topic Subscription เป็นหนึ่งในกลไกที่มีประสิทธิภาพที่สุดของ FCM อุปกรณ์สมัครรับหัวข้อ (เช่น "news", "promo_users_ios") และเซิร์ฟเวอร์ส่งการแจ้งเตือนตามหัวข้อโดยไม่ต้องเก็บรายการโทเค็น Firebase Topics รองรับผู้สมัครรับสูงสุดหนึ่งล้านคนต่อหัวข้อและการส่งแบบมีเงื่อนไข (Condition) ผ่านภาษานิพจน์: "'news' in topics && ('US' in topics || 'UK' in topics)"
Notification Payload คือโครงสร้าง JSON ที่ส่งผ่าน FCM/APNS สำหรับ FCM: แยก notification (ส่วนที่มองเห็น — หัวเรื่อง เนื้อหา รูปภาพ) และ data (ฟิลด์ที่กำหนดเองสำหรับแอป) สำหรับ APNS: พจนานุกรม aps พร้อม alert, badge, sound, category และ content-available โครงสร้างเพย์โหลดที่ถูกต้อง สำคัญมาก: หาก notification + data มาถึงพร้อมกัน แอปในพื้นหลังอาจไม่ได้รับ data ขอแนะนำให้ใช้เฉพาะข้อความ data สำหรับ Android และส่งฟิลด์ที่มองเห็นแยกต่างหากผ่าน FCM Console
คำถามที่พบบ่อย
FCM (Firebase Cloud Messaging) คือบริการของ Google สำหรับ Android และการแจ้งเตือนข้ามแพลตฟอร์ม APNS (Apple Push Notification Service) คือบริการของ Apple สำหรับ iOS/macOS เท่านั้น FCM สามารถส่งการแจ้งเตือน ผ่าน APNS บน iOS โดยทำหน้าที่เป็นพร็อกซีเซิร์ฟเวอร์
Rich Notification คือการแจ้งเตือนขั้นสูงพร้อมเนื้อหามัลติมีเดีย: รูปภาพ วิดีโอ เสียง ปุ่มดำเนินการ บน iOS ดำเนินการผ่าน Notification Content Extension; บน Android ผ่าน BigPictureStyle และ InboxStyle
Device Token คือตัวระบุอุปกรณ์ที่ไม่ซ้ำกันสำหรับส่งการแจ้งเตือนแบบพุช บน Android คือ Registration Token จาก FCM; บน iOS คือ Device Token จาก APNS โทเค็นสามารถเปลี่ยนแปลงได้ เมื่อติดตั้งแอปใหม่หรือรีเซ็ตการตั้งค่า ดังนั้นจึงต้องอัปเดตบนเซิร์ฟเวอร์
Silent Push (การแจ้งเตือนแบบเงียบ) คือการแจ้งเตือนที่ไม่แสดงให้ผู้ใช้เห็น ใช้สำหรับอัปเดตข้อมูลพื้นหลัง: การซิงค์เนื้อหา การอัปเดตวิดเจ็ต การดึงข้อมูลล่วงหน้า บน iOS ต้องเปิด Background Modes → Remote notifications
PushKit คือเฟรมเวิร์กของ Apple สำหรับส่งการแจ้งเตือนลำดับความสำคัญสูงที่ใช้ในแอป VoIP (การโทร ข้อความ) PushKit ส่งการแจ้งเตือน แม้ว่าแอปจะถูกปิดและรับประกันการเปิดแอปสำหรับการประมวลผล
สรุป
เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร
IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ