Firebase Cloud Messaging (FCM) เป็นบริการส่งข้อความและการแจ้งเตือนแบบ push ข้ามแพลตฟอร์มจาก Google ที่ออกแบบมาสำหรับแอปพลิเคชันมือถือและเว็บ FCM ช่วยให้การส่งข้อมูลระหว่างเซิร์ฟเวอร์และอุปกรณ์ไคลเอนต์เชื่อถือได้โดยไม่จำเป็นต้องรักษาการเชื่อมต่อเครือข่ายอย่างถาวร ตามข้อมูลจาก Firebase Documentation, 2026 โครงสร้างพื้นฐานของ FCM รองรับข้อความมากกว่า 300 พันล้าน ข้อความต่อวันทั่วโลก บริการนี้รองรับทั้งการแจ้งเตือนที่แสดงผลอัตโนมัติและข้อความข้อมูลสำหรับการส่งข้อมูลในพื้นหลัง
สิ่งสำคัญ
Firebase Cloud Messaging คือบริการคลาวด์ของ Google ที่ช่วยส่งการแจ้งเตือนแบบ push และข้อความข้อมูลระหว่างเซิร์ฟเวอร์ของแอปพลิเคชันกับอุปกรณ์ไคลเอนต์ บริการนี้ได้แทนที่ Google Cloud Messaging (GCM) รุ่นเก่าและกลายเป็นโซลูชันมาตรฐานสำหรับการส่ง push ในระบบนิเวศของ Firebase FCM รองรับ Android, iOS, Web และ Unity โดยมีอินเทอร์เฟซการส่งแบบเดียวกันไม่ว่าแพลตฟอร์มเป้าหมายจะเป็นใด
บริการนี้มีกลไกการส่งข้อความหลายแบบ แต่ละแบบแก้ปัญหาเฉพาะ ข้อความแจ้งเตือน (Notification) จะแสดงผลโดยระบบโดยอัตโนมัติเมื่อได้รับ — นักพัฒนาไม่จำเป็นต้องเขียนโค้ดเพื่อแสดงการแจ้งเตือน ข้อความข้อมูล (Data) จะส่ง payload ที่กำหนดเองในรูปแบบคู่คีย์-ค่าและประมวลผลภายในแอปพลิเคชัน ข้อความแบบผสมประกอบด้วยทั้งส่วนที่มองเห็นได้และส่วนที่ซ่อนเพื่อความยืดหยุ่นสูงสุด
การสร้างเซิร์ฟเวอร์ push ของตนเองต้องรักษาการเชื่อมต่อ TCP กับทุกอุปกรณ์อย่างต่อเนื่อง ซึ่งไม่มีประสิทธิภาพและไม่ปลอดภัย FCM ใช้ โครงสร้างพื้นฐานเดียวของ Google ที่รองรับการเชื่อมต่อกับอุปกรณ์หลายพันล้านเครื่องพร้อมกัน บริการนี้จัดการการลองส่งใหม่ คิวข้อความ และการปรับสมดุลโหลดโดยอัตโนมัติ ช่วยให้นักพัฒนาไม่ต้องแก้ไขปัญหาเหล่านี้ด้วยตนเอง
สถาปัตยกรรมของ FCM ประกอบด้วยสามองค์ประกอบหลัก: เซิร์ฟเวอร์ผู้ให้บริการ (backend ของคุณ), เซิร์ฟเวอร์ Firebase Cloud Messaging และแอปพลิเคชันไคลเอนต์บนอุปกรณ์ เมื่อเซิร์ฟเวอร์ส่งข้อความ ข้อความจะเข้าสู่โครงสร้างพื้นฐานของ FCM ก่อน ซึ่งจะกำหนดเส้นทางไปยังอุปกรณ์เป้าหมาย หากอุปกรณ์ออฟไลน์ FCM จะเก็บข้อความในคิวและส่งเมื่อมีการเชื่อมต่ออีกครั้ง
เมื่อเริ่มต้นแอปพลิเคชันครั้งแรก แอปจะเรียก Firebase SDK ซึ่งลงทะเบียนอุปกรณ์ในบริการ FCM และรับ Registration Token เฉพาะ โทเคนนี้เป็นสตริงยาวประมาณ 150 อักขระและระบุอินสแตนซ์เฉพาะของแอปพลิเคชันบนอุปกรณ์เฉพาะ โทเคนสามารถเปลี่ยนแปลงได้เมื่อติดตั้งแอปใหม่ ล้างข้อมูล หรือกู้คืนจากข้อมูลสำรอง — นักพัฒนาควรจัดการการอัปเดตโทเคนผ่าน delegate onNewToken
เมื่อเซิร์ฟเวอร์ส่งคำขอผ่าน FCM API ข้อความจะผ่านหลายขั้นตอน การรับและตรวจสอบ — FCM ตรวจสอบความถูกต้องของคำขอและการมีอยู่ของอุปกรณ์เป้าหมาย คิว — หากอุปกรณ์ไม่พร้อมใช้งาน ข้อความจะเข้าสู่คิวเก็บข้อมูล การกำหนดเส้นทาง — FCM กำหนดช่องทางการส่งที่เหมาะสมที่สุด (Wifi หรือข้อมูลมือถือ) การส่ง — ระบบส่งข้อความไปยังแอปพลิเคชันเป้าหมาย หลังจากส่งสำเร็จ FCM จะส่งคืน ID ข้อความให้เซิร์ฟเวอร์
Firebase Cloud Messaging รองรับข้อความสามประเภท แต่ละประเภทมีลักษณะการประมวลผลบนฝั่งไคลเอนต์แตกต่างกัน ข้อความแจ้งเตือน (Notification) จะถูกประมวลผลโดยบริการระบบ Google Play Services ใน Android และ APNs ใน iOS และแสดงผลเป็นแบนเนอร์ push โดยอัตโนมัติ ข้อความข้อมูล (Data) จะถูกส่งไปยังแอปพลิเคชันโดยตรงและประมวลผลผ่าน callback onMessageReceived ใน Android และ application(_:didReceiveRemoteNotification:) ใน iOS
ข้อความแจ้งเตือนประกอบด้วยฟิลด์ที่กำหนดไว้ล่วงหน้า: title, body, URL รูปภาพ และเสียงแจ้งเตือน ระบบจะสร้างและแสดง การแจ้งเตือนในถาดระบบโดยอัตโนมัติ แม้ว่าแอปพลิเคชันจะอยู่ในพื้นหลังหรือถูกปิด ผู้ใช้จะเห็นแบนเนอร์มาตรฐานพร้อมหัวข้อและข้อความ และเมื่อคลิก แอปพลิเคชันจะเปิดพร้อมข้อมูลที่ส่งใน payload หากแอปพลิเคชันทำงานอยู่ ข้อความแจ้งเตือนสามารถสกัดกั้นและประมวลผลในโค้ดได้
ข้อความข้อมูลคือชุดคู่คีย์-ค่าที่กำหนดเองโดยไม่มีฟิลด์ที่กำหนดไว้ล่วงหน้า Payload จะไม่ถูกประมวลผล โดยระบบอัตโนมัติ — แอปพลิเคชันได้รับข้อมูลดิบและสามารถตีความได้ตามต้องการ ข้อความข้อมูลใช้สำหรับซิงค์ข้อมูลในพื้นหลัง อัปเดตแคชในเครื่อง เรียกการซิงค์ หรือส่งคำสั่งโดยไม่แสดงการแจ้งเตือน ใน Android ข้อความข้อมูลจะถูกส่งเสมอ แม้ว่าแอปจะถูกปิดหรือทำงานในพื้นหลัง
FCM สามารถส่งข้อความที่มีทั้งส่วนแจ้งเตือน (สำหรับแสดงผล) และส่วนข้อมูล (สำหรับประมวลผล) Payload แบบผสม ประกอบด้วยทั้งฟิลด์แจ้งเตือนที่กำหนดไว้ล่วงหน้าและคีย์ข้อมูลที่กำหนดเอง ระบบจะแสดงการแจ้งเตือนจากส่วนแจ้งเตือน และส่วนข้อมูลจะถูกส่งไปยัง intent extras ของแอปพลิเคชันเมื่อเปิด เหมาะสำหรับสถานการณ์ที่ต้องแสดงการแจ้งเตือนให้ผู้ใช้เห็นและส่งบริบทสำหรับไปยังหน้าจอเฉพาะพร้อมกัน
| ประเภท | แสดงผลอัตโนมัติ | ประมวลผลในพื้นหลัง | ตัวอย่าง |
|---|---|---|---|
| Notification | ใช่ โดยระบบ | อัตโนมัติ ไม่ต้องเขียนโค้ด | การแจ้งเตือน push ต้อนรับ |
| Data | ไม่ | ผ่าน callback ของแอป | ซิงค์ข้อมูลในพื้นหลัง |
| แบบผสม | ใช่ ส่วนแจ้งเตือน | ส่วนข้อมูลเมื่อเปิด | การแจ้งเตือน + ลิงก์ไปยังคำสั่งซื้อ |
การผสานรวม FCM ใน Android เริ่มต้นด้วยการเชื่อมต่อ Firebase SDK ผ่านไฟล์ build.gradle ในระดับแอปพลิเคชัน หลังจากเพิ่ม dependencies และไฟล์ google-services.json แอปพลิเคชันจะได้รับ Registration Token โดยอัตโนมัติ ซึ่งส่งผ่าน callback FirebaseMessagingService เพื่อรับการแจ้งเตือน ต้องสร้างบริการที่สืบทอดจาก FirebaseMessagingService และลงทะเบียนใน AndroidManifest.xml
หลังจากเชื่อมต่อ SDK แล้ว Firebase จะสร้างโทเคนอุปกรณ์โดยอัตโนมัติโดยไม่ต้องเขียนโค้ดเพิ่มเติม โทเคนสามารถเข้าถึงได้ ผ่าน FirebaseMessaging.getInstance().token ซึ่งส่งคืน Task
class MyFirebaseMessagingService :
FirebaseMessagingService() {
override fun onNewToken(token: String) {
sendTokenToServer(token)
}
override fun onMessageReceived(
message: RemoteMessage
) {
val data = message.data
val title = "ข้อความใหม่"
val body = data["body"] ?: ""
showNotification(title, body)
}
}
ต้องลงทะเบียนบริการสำหรับรับข้อความ FCM ใน AndroidManifest.xml พร้อม intent-filter ที่เหมาะสม การเพิ่มแท็ก service พร้อมสิทธิ์ INTERNET และการระบุ action หากไม่ได้ลงทะเบียนบริการ ข้อความจะไม่ถูกส่งไปยังแอปพลิเคชันในโหมดพื้นหลัง สำหรับการแสดงการแจ้งเตือนใน Android 13+ ต้องได้รับสิทธิ์ runtime POST_NOTIFICATIONS
<!-- AndroidManifest.xml -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name=
"android.permission.POST_NOTIFICATIONS" />
<service
android:name=".MyFirebaseMessagingService"
android:exported="false">
<intent-filter>
<action android:name=
"com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
การผสานรวม FCM ใน iOS ต้องตั้งค่าทั้งในฝั่ง Apple Push Notification Service (APNs) และใน Firebase Console ต่างจาก Android ที่ FCM จัดการการเชื่อมต่อโดยตรง ใน iOS FCM ใช้ APNs เป็นเลเยอร์การขนส่ง แอปพลิเคชันลงทะเบียนเพื่อรับการแจ้งเตือน push ผ่าน UIApplication.shared.registerForRemoteNotifications และ Firebase SDK จะสกัดกั้นโทเคนอุปกรณ์ที่ได้รับและเชื่อมโยงกับ FCM Registration Token
สำหรับการทำงานของ FCM ใน iOS ต้องอัปโหลดคีย์ APNs หรือใบรับรองใน Firebase Console คีย์ APNs เป็นวิธีการยืนยันตัวตนที่ทันสมัยโดยไม่ต้องใช้ใบรับรอง (แนะนำโดย Apple) คีย์ถูกสร้างขึ้นใน Apple Developer Portal ในส่วน Keys และอัปโหลดในการตั้งค่า Cloud Messaging ใน Firebase Console หลังจากตั้งค่า APNs แอปพลิเคชันจะขอสิทธิ์การแจ้งเตือนผ่าน UNUserNotificationCenter และลงทะเบียนผ่าน APNs
import Firebase
import UserNotifications
class AppDelegate: NSObject, UIApplicationDelegate {
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions
launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
FirebaseApp.configure()
UNUserNotificationCenter.current()
.requestAuthorization(options: [.alert, .sound, .badge])
application.registerForRemoteNotifications()
return true
}
func application(
_ application: UIApplication,
didRegisterForRemoteNotificationsWithDeviceToken
deviceToken: Data
) {
Messaging.messaging()
.apnsToken = deviceToken
}
}
สำหรับประมวลผลการแจ้งเตือนที่ได้รับ ให้ implement delegate ของ UNUserNotificationCenter เมธอด willPresent จะถูกเรียกเมื่อได้รับการแจ้งเตือนขณะที่แอปพลิเคชันทำงานอยู่ — ที่นี่สามารถแสดงการแจ้งเตือนแบบ in-app ที่กำหนดเองหรือละเว้นแบนเนอร์ของระบบ เมธอด didReceive จะถูกเรียกเมื่อผู้ใช้คลิกที่การแจ้งเตือน — ที่นี่จะดำเนินการนำทางไปยังหน้าจอที่เกี่ยวข้อง สำหรับข้อความข้อมูล ให้ใช้ delegate ของ MessagingDelegate ซึ่งรับ payload เมื่อได้รับข้อความ FCM ในพื้นหลัง
การส่งจากฝั่งเซิร์ฟเวอร์ ข้อความ FCM ทำผ่าน HTTP v1 API ของ Firebase Cloud Messaging หรือ Firebase Cloud Messaging API รุ่นเก่า HTTP v1 API เป็นวิธีที่แนะนำ ใช้การยืนยันตัวตน OAuth 2.0 ผ่าน Service Account และรองรับความสามารถที่ทันสมัยทั้งหมดของ FCM รวมถึงการวิเคราะห์การจัดส่งและการทดสอบ A/B คำขอจะถูกส่งด้วยเมธอด POST ไปยัง endpoint https://fcm.googleapis.com/v1/projects/{project_id}/messages:send
เนื้อหาของคำขอประกอบด้วยออบเจ็กต์ JSON พร้อมข้อมูลเกี่ยวกับข้อความ: target (โทเคน หัวข้อ หรือเงื่อนไข), notification (สำหรับแสดงผล) และ data (payload ที่กำหนดเอง) การยืนยันตัวตนผ่าน คีย์ JSON ของ Service Account ซึ่งอัปโหลดไปยังตัวแปรสภาพแวดล้อมของเซิร์ฟเวอร์ โทเคนการเข้าถึงถูกสร้างขึ้นผ่านไลบรารี google-auth-library Google แนะนำให้ใช้ Firebase Admin SDK เพื่อจัดการการยืนยันตัวตนและการลองใหม่โดยอัตโนมัติ
const admin = require("firebase-admin")
const serviceAccount = require("./serviceAccountKey.json")
admin.initializeApp({ credential: admin.credential.cert(serviceAccount) })
const message = {
token: "device_registration_token",
notification: { title: "ส่วนลด 20%", body: "สำหรับบริการทั้งหมดวันนี้" },
data: { screen: "promo", promoId: "324" },
android: { priority: "high" },
apns: { payload: { aps: { sound: "default" } } }
}
admin.messaging().send(message)
.then(response => {
console.log("ส่งสำเร็จ:", response)
})
.catch(error => {
console.log("ข้อผิดพลาดในการส่ง:", error)
})
สำหรับส่งการแจ้งเตือนไปยังกลุ่มผู้ใช้ FCM รองรับการสมัครรับหัวข้อ หัวข้อ (topic) คือช่องทางที่มีชื่อซึ่งแอปพลิเคชันไคลเอนต์สมัครผ่าน FirebaseMessaging.getInstance().subscribeToTopic() เซิร์ฟเวอร์สามารถส่งข้อความไปยังหัวข้อและข้อความจะถูกส่งไปยังอุปกรณ์ที่สมัครทั้งหมด หัวข้อเหมาะสำหรับการส่งข่าวสาร การแจ้งเตือนโปรโมชัน และ push ตามเหตุการณ์ สำหรับการแบ่งกลุ่มที่แม่นยำยิ่งขึ้น ให้ใช้เงื่อนไข (conditions) โดยอิงจากหลายหัวข้อด้วยตัวดำเนินการทางตรรกะ
คำถามที่พบบ่อย
FCM ทำงาน บน Android ผ่านโครงสร้างพื้นฐานของ Google เอง ส่วนใน iOS ใช้ APNs เป็นโปรโตคอลการขนส่ง FCM มี API เดียวสำหรับทั้งสองแพลตฟอร์ม การจัดเก็บข้อความในโหมดออฟไลน์อัตโนมัติ และการวิเคราะห์การจัดส่ง ซึ่งไม่มีใน APNs เพียงอย่างเดียว
ได้ ผ่าน Firebase Console ในส่วน Cloud Messaging สามารถส่งการแจ้งเตือนด้วยตนเองไปยังอุปกรณ์ หัวข้อ หรือกลุ่มผู้ชมที่เลือก ฟังก์ชันนี้เหมาะสำหรับการทดสอบและการส่งครั้งเดียว แต่ไม่สามารถแทนที่การผสานรวมกับเซิร์ฟเวอร์สำหรับแอปพลิเคชันในระดับ production
สมัครรับการอัปเดตโทเคนผ่าน onNewToken ใน FirebaseMessagingService (Android) หรือ MessagingDelegate (iOS) เมื่อโทเคนเปลี่ยน ให้ส่งโทเคนใหม่ไปยังเซิร์ฟเวอร์และลบโทเคนเก่า เซิร์ฟเวอร์ควรอัปเดตฐานข้อมูลและหยุดพยายามส่งไปยังโทเคนที่ล้าสมัย
FCM เก็บข้อความ ในคิวนานถึง 28 วันและส่งเมื่อมีการเชื่อมต่ออีกครั้ง สำหรับข้อความแจ้งเตือน ข้อความล่าสุดของแต่ละกลุ่มยุบ (collapse) เท่านั้นที่จะถูกเก็บ ส่วนข้อความข้อมูลจะถูกเก็บแยกต่างหากและส่งตามลำดับโดยไม่มีการยุบ
FCM ฟรีโดยสมบูรณ์ ไม่มีข้อจำกัดด้านจำนวนข้อความ การใช้ FCM ไม่มีค่าใช้จ่ายทั้งในแผน Spark และแผน Blaze มีข้อจำกัดเฉพาะขนาด payload: สูงสุด 4 KB สำหรับข้อความแจ้งเตือนและสูงสุด 2 KB สำหรับข้อความข้อมูล
สรุป
เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร
IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ
อ่านเพิ่มเติม