FCM (Firebase Cloud Messaging) คือบริการข้ามแพลตฟอร์มจาก Google สำหรับการส่งการแจ้งเตือนแบบพุชและการถ่ายโอนข้อมูลระหว่างเซิร์ฟเวอร์และแอปพลิเคชันมือถือ รองรับ Android, iOS และแพลตฟอร์มเว็บผ่าน API เดียว ตาม เอกสาร Firebase, FCM ประมวลผลมากกว่า 1 พันล้านข้อความทุกวันทั่วโลก
ประเด็นสำคัญ
Firebase Cloud Messaging (FCM) คือบริการคลาวด์จาก Google ที่รับประกันการส่งการแจ้งเตือนแบบพุชและข้อความข้อมูลไปยังอุปกรณ์มือถืออย่างน่าเชื่อถือ เดิมรู้จักกันในชื่อ Google Cloud Messaging (GCM) FCM ได้กลายเป็นเครื่องมือหลักสำหรับการแจ้งเตือนข้ามแพลตฟอร์มในระบบนิเวศของ Firebase
FCM เลือกช่องทางการส่งที่เหมาะสมที่สุดโดยอัตโนมัติตามแพลตฟอร์ม: บน Android ใช้การเชื่อมต่อ FCM ของตัวเอง; บน iOS ใช้ APNS (ผ่านเกตเวย์ FCM) นักพัฒนาไม่จำเป็นต้องรวมสองระบบที่แตกต่างกัน — FCM จัดการการกำหนดเส้นทาง
บริการนี้มี REST API และ Admin SDK แบบรวมสำหรับการส่งข้อความ ช่วยให้สามารถส่งการแจ้งเตือนจากฝั่งเซิร์ฟเวอร์โดยไม่ถูกผูกติดกับแพลตฟอร์มผู้รับเฉพาะ
FCM รองรับโหมดการส่งหลายแบบ: ข้อความเดียว ไปยังอุปกรณ์เฉพาะ, การกระจายกลุ่ม ตามหัวข้อ และ การส่งแบบแบ่งส่วน ตามเงื่อนไข การส่งตามกำหนดเวลาและการทดสอบ A/B ของเนื้อหาการแจ้งเตือนก็สามารถทำได้เช่นกัน
สถาปัตยกรรม FCM ขึ้นอยู่กับสามองค์ประกอบ: แอปพลิเคชันไคลเอ็นต์, Firebase Connection Server และเซิร์ฟเวอร์แอป ไคลเอ็นต์ลงทะเบียนกับ FCM เมื่อเริ่มต้นและรับ โทเคนการลงทะเบียน ที่ไม่ซ้ำกัน — สตริงที่ระบุอุปกรณ์สำหรับแอปพลิเคชันนั้น
เซิร์ฟเวอร์แอปส่งคำขอไปยัง FCM REST API โดยระบุโทเคนผู้รับหรือหัวข้อ Firebase Connection Server ส่งข้อความโดยใช้การเชื่อมต่อ XMPP แบบถาวรหรือคำขอ HTTP หากอุปกรณ์ออฟไลน์ ข้อความจะถูกจัดคิวและส่งเมื่อการเชื่อมต่อกลับคืนมา
FCM รับประกันการส่งโดยใช้ คิวลำดับความสำคัญ และกลไกการยืนยัน บน Android ข้อความจะถูกเก็บไว้ในคิวสูงสุด 28 วัน; บน iOS สูงสุด 4 สัปดาห์ (ผ่าน APNS) หลังจากวันหมดอายุ ข้อความจะถูกลบโดยไม่มีการแจ้งเตือน
โทเคนการลงทะเบียนสามารถเปลี่ยนแปลงได้ในหลายกรณี: เมื่อกู้คืนข้อมูลแอป, เมื่ออัปเดตเป็นเวอร์ชันใหม่ หรือเมื่อล้างแคช แอปต้องใช้ FirebaseMessagingService.onNewToken เพื่อจัดการการอัปเดตโทเคนและซิงค์กับเซิร์ฟเวอร์
FCM รองรับเพย์โหลดสองประเภท: notification และ data แต่ละประเภทกำหนดวิธีการและเวลาที่ข้อความถูกประมวลผลบนอุปกรณ์ผู้รับ
| พารามิเตอร์ | Notification | Data |
|---|---|---|
| แสดงอัตโนมัติ | ใช่ ถ้าแอปอยู่ในพื้นหลัง | ไม่ เฉพาะในแอป |
| การประมวลผล | ระบบ/NOS — ในพื้นหลัง; แอป — ในเบื้องหน้า | ในแอปเสมอ (onMessageReceived) |
| ขนาดสูงสุด | 4 KB | 4 KB |
| คีย์แบบกำหนดเอง | จำกัดเฉพาะฟิลด์ที่กำหนดไว้ล่วงหน้า | คู่คีย์-ค่าใด ๆ |
| ต้องใช้ CollapseKey | ไม่บังคับ | ไม่บังคับสำหรับการจัดกลุ่ม |
ในทางปฏิบัติ แนะนำให้ ใช้ข้อความ data เมื่อแอปต้องการประมวลผลการแจ้งเตือนแบบเต็มใน onMessageReceived ข้อความ notification เหมาะสำหรับสถานการณ์ง่าย ๆ ที่การแสดงผลของระบบเพียงพอ
FCM และ APNS เป็นบริการส่งพุชหลักสองบริการ FCM ทำหน้าที่เป็นเกตเวย์ข้ามแพลตฟอร์ม ในขณะที่ APNS มีไว้สำหรับระบบนิเวศของ Apple เท่านั้น ความแตกต่างหลักอยู่ที่สถาปัตยกรรม ข้อกำหนดใบรับรอง และกลไกการกำหนดเส้นทาง
การเลือกระหว่าง FCM และ APNS โดยตรงขึ้นอยู่กับสถาปัตยกรรมโปรเจกต์ สำหรับแอปพลิเคชัน ข้ามแพลตฟอร์ม FCM เป็นตัวเลือกที่ดีที่สุด สำหรับโปรเจกต์ที่ใช้ iOS เท่านั้น การทำงานโดยตรงกับ APNS ผ่าน HTTP/2 API ก็สามารถทำได้
FCM เหมาะสมเมื่อโปรเจกต์ใช้ทั้ง Android และ iOS พร้อมกัน รวมถึงเมื่อต้องการการวิเคราะห์ Firebase, การทดสอบ A/B ของการแจ้งเตือน หรือหัวข้อโดยไม่ต้องใช้ตรรกะเซิร์ฟเวอร์ APNS โดยตรงเหมาะสำหรับแอปพลิเคชันที่ใช้ iOS เท่านั้นที่มีการพึ่งพาน้อยที่สุดและข้อกำหนดด้านความหน่วงในการส่งที่เข้มงวด
ในการเชื่อมต่อ FCM กับแอปพลิเคชัน Android คุณต้องเพิ่ม Firebase SDK และกำหนดค่า google-services.json ในรากของโปรเจกต์ หลังจากลงทะเบียนโทเคน แอปพลิเคชันก็พร้อมรับข้อความผ่าน FirebaseMessagingService
// build.gradle (Module)
dependencies {
implementation("com.google.firebase:firebase-messaging:24.1.0")
}
// AndroidManifest.xml
<service android:name=".MyFirebaseMessagingService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>
class MyFirebaseMessagingService :
FirebaseMessagingService() {
override fun onNewToken(token: String) {
sendTokenToServer(token)
}
override fun onMessageReceived(message: RemoteMessage) {
message.notification?.let {
showNotification(it.title, it.body)
}
}
}
หลังการตั้งค่า แอปพลิเคชันจะได้รับ โทเคน FCM โดยอัตโนมัติเมื่อเปิดครั้งแรก ต้องส่งโทเคนไปยังเซิร์ฟเวอร์แอปเพื่อส่งการแจ้งเตือนไปยังอุปกรณ์นี้ในภายหลัง
บน Android 8+ ก่อนส่งการแจ้งเตือน FCM ด้วยการแสดงอัตโนมัติ คุณต้องสร้าง NotificationChannel ข้อความ notification ของ FCM ใช้ ID ช่องสัญญาณเริ่มต้น แต่แนะนำให้สร้างช่องสัญญาณแบบกำหนดเองผ่าน FirebaseMessagingService เมื่อได้รับข้อความแรก ข้อความ data ไม่ต้องการช่องสัญญาณ — แอปตัดสินใจเองว่าจะแสดงการแจ้งเตือนอย่างไรและเมื่อใด
บน iOS FCM ทำหน้าที่เป็นตัวกลางระหว่างเซิร์ฟเวอร์แอปและ APNS Firebase รับข้อความจากเซิร์ฟเวอร์ ห่อในรูปแบบ APNS และส่งผ่านเกตเวย์ของ Apple นักพัฒนาต้องกำหนดค่าคีย์หรือใบรับรอง APNS ในคอนโซล Firebase
import FirebaseMessaging
import UserNotifications
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions options: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
FirebaseApp.configure()
UNUserNotificationCenter.current().delegate = self
Messaging.messaging().delegate = self
return true
}
}
extension AppDelegate: MessagingDelegate {
func messaging(
_ messaging: Messaging,
didReceiveRegistrationToken fcmToken: String?
) {
UserDefaults.standard.set(fcmToken, forKey: "fcm_token")
}
}
บน iOS การลงทะเบียน APNS เกิดขึ้นแบบอะซิงโครนัส FCM SDK จะได้รับโทเคน APNS โดยอัตโนมัติและส่งต่อไปยังเซิร์ฟเวอร์ Firebase didReceiveRegistrationToken จะถูกเรียกเมื่อได้รับโทเคน FCM ใหม่ ซึ่งรวมโทเคน APNS เข้ากับตัวระบุโปรเจกต์
FCM มีคอนโซล Firebase สำหรับตรวจสอบการส่ง: จำนวนการแจ้งเตือนที่ส่ง ได้รับ และแสดง นอกจากนี้ยังมี การเรียกกลับสถานะ ผ่าน Firebase Cloud Functions สำหรับติดตามข้อผิดพลาดในการส่งฝั่งเซิร์ฟเวอร์ ตัวชี้วัดสำคัญ: การแสดงผลและการเปิดการแจ้งเตือน
เมื่อทำงานกับ FCM การเลือกประเภทข้อความที่ถูกต้องสำหรับแต่ละสถานการณ์เป็นสิ่งสำคัญ สำหรับการแจ้งเตือนง่าย ๆ ที่แสดงอัตโนมัติ ให้ใช้ ข้อความ notification สำหรับกรณีที่แอปต้องประมวลผลข้อมูลก่อนแสดง ให้ใช้ข้อความ data ประเภทผสม (notification + data) แนะนำให้ใช้เฉพาะเมื่อข้อมูลจำเป็นสำหรับการวิเคราะห์เท่านั้น ไม่ใช่เพื่อเปลี่ยนเนื้อหาการแจ้งเตือน
จัดการโทเคนแบบรวมศูนย์ จัดเก็บโทเคนปัจจุบันบนเซิร์ฟเวอร์ในตารางที่เชื่อมโยงกับผู้ใช้และแพลตฟอร์ม ใช้กลไก การล้างโทเคนที่ล้าสมัย: เมื่อพบข้อผิดพลาด NotRegistered หรือ InvalidRegistration ให้ลบโทเคนออกจากฐานข้อมูล โทเคนไม่ค่อยเปลี่ยนแปลง แต่การล้างโทเคนเป็นองค์ประกอบบังคับของการสนับสนุน FCM
ใช้คีย์ยุบ (collapseKey) สำหรับจัดกลุ่มข้อความ หากคุณกำลังส่งการแจ้งเตือนหลายรายการประเภทเดียวกัน (เช่น "อัปเดตอัตราแลกเปลี่ยน") ให้ตั้งค่า collapseKey เดียวกัน FCM จะส่งเฉพาะข้อความสุดท้ายจากกลุ่มเท่านั้น ซึ่งลดภาระอุปกรณ์และหลีกเลี่ยงการถล่มผู้ใช้ด้วยการแจ้งเตือน
ตรวจสอบการส่งผ่าน Firebase Console และ Cloud Functions การวิเคราะห์ FCM แสดงจำนวนการแจ้งเตือนที่ส่ง ได้รับ และแสดง หากอัตราการแสดงต่ำกว่า 70% ให้ตรวจสอบการตั้งค่าช่องสัญญาณบน Android และการตั้งค่าสิทธิ์บน iOS การส่งต่ำมักเกี่ยวข้องกับช่องสัญญาณที่ปิดใช้งานหรือการห้ามการแจ้งเตือน ประการที่ห้า: ใช้การทดสอบ A/B ของ Firebase เพื่อปรับข้อความการแจ้งเตือนและเวลาในการส่งให้เหมาะสม — ซึ่งเพิ่มอัตราการเปิดได้ 15–25% ตามข้อมูลของ Firebase
คำถามที่พบบ่อย
FCM คือการอัปเดตเชิงวิวัฒนาการของ GCM (Google Cloud Messaging) FCM มีการตั้งค่าที่ง่ายขึ้นผ่าน Firebase Console การวิเคราะห์ในตัว หัวข้อ และการรองรับ Web Push GCM ถูกยกเลิกอย่างเป็นทางการตั้งแต่เมษายน 2019 และโปรเจกต์ทั้งหมดต้องย้ายไปใช้ FCM
Firebase Cloud Messaging เป็นบริการ ฟรี ไม่มีข้อจำกัดด้านจำนวนข้อความ การชำระเงินจะคิดเฉพาะเมื่อใช้บริการ Firebase อื่น ๆ เช่น Cloud Functions หรือ Firestore FCM ไม่ต้องสมัครสมาชิก Spark หรือ Blaze สำหรับการส่งการแจ้งเตือนพื้นฐาน
โทเคน FCM เปลี่ยนแปลงเมื่อ: กู้คืนแอปจากการสำรองข้อมูล, ล้างข้อมูลแอป, ติดตั้งใหม่, อัปเดตเป็นเวอร์ชันใหม่ที่มีการเปลี่ยน Sender ID จัดการ onNewToken ใน FirebaseMessagingService เสมอเพื่อส่งโทเคนใหม่ไปยังเซิร์ฟเวอร์
FCM ของ Google ถูก บล็อก ในจีน สำหรับการส่งการแจ้งเตือนในจีน จะใช้บริการทางเลือก: Huawei Push Kit, MiPush (Xiaomi), Oppo Push, Vivo Push สำหรับการส่งข้ามแพลตฟอร์ม จะใช้บริการหลายผู้ให้บริการอย่าง Getui
ใช้คอนโซล Firebase ในตัว: เลือก "Cloud Messaging" — "Send Test Message" ป้อน โทเคนทดสอบ และส่งข้อความ notification การแจ้งเตือนควรปรากฏบนอุปกรณ์ คุณยังสามารถตรวจสอบบันทึก FirebaseMessagingService.onMessageReceived
สรุป
เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร
IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ
อ่านเพิ่มเติม