FCM ช่วยให้คุณส่งข้อความไปยังแอปไคลเอ็นต์ได้ 2 ประเภท ดังนี้
- SDK ของ FCM จะจัดการข้อความแจ้งเตือนโดยอัตโนมัติ ซึ่งคล้ายกับ "ข้อความที่แสดง" (ใน Android ที่มี
AndroidConfigV2ให้ใช้RemoteNotificationสำหรับข้อความทั้งหมดที่แสดงการแจ้งเตือนที่ผู้ใช้มองเห็นได้ เพื่อให้ระบบส่งข้อความโดยไม่มีความล่าช้าที่ตั้งใจไว้ การแจ้งเตือนจะแสดงโดยอัตโนมัติไม่ว่าแอปจะทำงานอยู่เบื้องหน้าหรือเบื้องหลัง เว้นแต่จะปิดเสียงไว้อย่างชัดเจนในโค้ดฝั่งไคลเอ็นต์) - ข้อความข้อมูล ซึ่งแอปไคลเอ็นต์จะจัดการ
ข้อความแจ้งเตือนประกอบด้วยชุดคีย์ที่ผู้ใช้มองเห็นได้ซึ่งกำหนดไว้ล่วงหน้า และอาจมีเพย์โหลดข้อมูลที่ไม่บังคับ ในทางตรงกันข้าม ข้อความข้อมูลจะมีเฉพาะคู่คีย์-ค่าที่กำหนดเองซึ่งผู้ใช้กำหนดไว้ เพย์โหลดสูงสุดสำหรับข้อความทั้ง 2 ประเภทคือ 4, 096 ไบต์ ยกเว้นเมื่อส่งข้อความจากคอนโซล Firebase ซึ่งบังคับใช้จำนวนอักขระสูงสุด 1, 000 ตัว
| ใช้สถานการณ์จำลอง | วิธีส่ง | |
|---|---|---|
| ข้อความแจ้งเตือน | FCM SDK จะแสดงข้อความไปยังอุปกรณ์ของผู้ใช้ปลายทางในนามของแอปไคลเอ็นต์เมื่อแอปทำงานอยู่เบื้องหลัง แต่หากแอปทำงานอยู่เบื้องหน้าเมื่อได้รับการแจ้งเตือน โค้ดของแอปจะเป็นตัวกำหนดลักษณะการทำงาน |
|
| ข้อความข้อมูล | แอปไคลเอ็นต์มีหน้าที่รับผิดชอบในการประมวลผลข้อความข้อมูล ข้อความข้อมูลมีเฉพาะคู่คีย์-ค่าที่กำหนดเองซึ่งไม่มีชื่อคีย์ที่สงวนไว้ (ดูด้านล่าง) | ในสภาพแวดล้อมที่เชื่อถือได้ เช่น
Cloud Functions หรือเซิร์ฟเวอร์แอป ให้ใช้ Firebase Admin SDK หรือ HTTP v1 API
ในคำขอส่ง ให้ตั้งค่าคีย์ data
|
คุณสามารถใช้ข้อความแจ้งเตือนเมื่อต้องการให้ SDK ของ FCM จัดการการแสดงการแจ้งเตือนโดยอัตโนมัติเมื่อแอปทำงานอยู่เบื้องหลัง FCM สามารถส่งข้อความแจ้งเตือนพร้อมเพย์โหลดข้อมูลที่ไม่บังคับได้ ในกรณีเช่นนี้ FCM จะแสดงเพย์โหลดการแจ้งเตือน และแอปไคลเอ็นต์จะจัดการเพย์โหลดข้อมูล
คุณสามารถใช้ข้อความข้อมูลเมื่อต้องการประมวลผลข้อความด้วยโค้ดแอปไคลเอ็นต์ของคุณเอง
ข้อความแจ้งเตือน
คุณสามารถส่งข้อความแจ้งเตือนโดยใช้คอนโซล Firebase, Firebase Admin SDK หรือ FCM HTTP v1 API คอนโซล Firebase มีการทดสอบ A/B ที่อิงตามข้อมูลวิเคราะห์เพื่อช่วยคุณปรับแต่งและปรับปรุงข้อความแจ้งเตือน
หากต้องการส่งข้อความแจ้งเตือนโดยใช้ Firebase Admin SDK หรือ FCM HTTP v1 API ให้ตั้งค่าคีย์ notification ด้วยชุดตัวเลือกคีย์-ค่าที่กำหนดไว้ล่วงหน้าของข้อความแจ้งเตือน คุณสามารถใช้ตัวอย่างต่อไปนี้เพื่อจัดรูปแบบข้อความแจ้งเตือนในแอป IM
{
"message":{
"token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
"notification":{
"title":"Portugal vs. Denmark",
"body":"great match!"
}
}
}
ระบบจะส่งข้อความแจ้งเตือนไปยังถาดการแจ้งเตือนเมื่อแอปอยู่เบื้องหลัง สำหรับแอปที่ทำงานอยู่เบื้องหน้า ข้อความจะได้รับการจัดการโดยฟังก์ชัน Callback
คุณสามารถใช้เอกสารอ้างอิงออบเจ็กต์การแจ้งเตือน FCM HTTP v1 API เพื่อดูรายการคีย์ที่กำหนดไว้ล่วงหน้าทั้งหมดที่ใช้สร้างข้อความแจ้งเตือนได้
ข้อความข้อมูล
คุณเลือกได้ว่าจะใช้เพย์โหลด FCM data เพื่อใช้รูปแบบการเข้ารหัสที่ต้องการอย่างไร ตรวจสอบว่าคุณไม่ได้ใช้คำที่สงวนไว้ในคู่คีย์-ค่าที่กำหนดเอง คำที่สงวนไว้ ได้แก่ from, message_type หรือคำใดก็ตามที่ขึ้นต้นด้วย google., gcm. หรือ gcm.notification.
ตัวอย่างต่อไปนี้แสดงการใช้ฟิลด์ข้อมูลระดับบนสุดหรือฟิลด์ข้อมูลทั่วไป ซึ่งไคลเอ็นต์ในทุกแพลตฟอร์มที่ได้รับข้อความจะตีความได้ ในแต่ละแพลตฟอร์ม แอปไคลเอ็นต์จะได้รับเพย์โหลดข้อมูลในฟังก์ชัน Callback
{
"message":{
"token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
"data":{
"Nick" : "Mario",
"body" : "great match!",
"Room" : "PortugalVSDenmark"
}
}
}
ข้อความแจ้งเตือนที่มีเพย์โหลดข้อมูลที่ไม่บังคับ
คุณสามารถส่งข้อความแจ้งเตือนที่มีเพย์โหลดที่ไม่บังคับของคู่คีย์-ค่าที่กำหนดเองแบบเป็นโปรแกรมหรือใช้คอนโซล Firebase ได้ ใน Notifications Composer ให้ใช้ช่องข้อมูลที่กำหนดเองในตัวเลือกขั้นสูง
ลักษณะการทำงานของแอปเมื่อได้รับข้อความที่มีทั้งเพย์โหลดการแจ้งเตือนและข้อมูลจะขึ้นอยู่กับว่าแอปทำงานอยู่เบื้องหลังหรือเบื้องหน้า กล่าวคือ ขึ้นอยู่กับว่าแอปทำงานอยู่หรือไม่ในขณะที่ได้รับข้อความ
- เมื่ออยู่ในเบื้องหลัง แอปจะได้รับเพย์โหลดการแจ้งเตือนในถาดการแจ้งเตือน และจะจัดการเพย์โหลดข้อมูลเมื่อผู้ใช้แตะการแจ้งเตือนเท่านั้น
- เมื่ออยู่เบื้องหน้า แอปจะได้รับออบเจ็กต์ข้อความที่มีเพย์โหลดทั้ง 2 รายการ
ตัวอย่างข้อความรูปแบบ JSON ที่มีทั้งคีย์ notification และคีย์ data มีดังนี้
{
"message":{
"token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
"notification":{
"title":"Portugal vs. Denmark",
"body":"great match!"
},
"data" : {
"Nick" : "Mario",
"Room" : "PortugalVSDenmark"
}
}
}