ยิง Notification (FCM) ด้วย Postman
ว่าด้วยเรื่องของการส่ง Notification ผ่าน Firebase Cloud Messaging (FCM) นั้นสามารถทำผ่านตัว Firebase Console แต่ถ้าเราอยากจะส่งเฉพาะ data payload ล่ะ เพราะการส่งผ่านตัวคอนโซล มันจะติด notification payload มาด้วย วิธีแก้ไขปัญหาก็คือเขียน Script ซึ่งอาจจะเป็นเรื่องที่ยากหลายคนรวมถึงตัวเจ้าของบล็อคเอง วันนี้เจ้าของบล็อคเลยมานำเสนอเรื่องวิธีการทำผ่านเครื่องมือที่ชื่อว่า Postman
สำหรับ Protocol ในการส่ง Message ของ Firebase Cloud Messaging จะมีด้วยกัน 2 แบบคือ HTTP และ XMPP และในตัวอย่างนี้เจ้าของบล็อคขอเลือกใช้ HTTP โดยการส่งจะประกอบไปด้วย 3 ส่วน คือ
- URL ที่จะใช้คือ https://fcm.googleapis.com/fcm/send
- HTTP HEADER
- Content-Type:application/json
- Authorization:key=SERVER_KEY - Body จะอยู่ในรูปแบบของ Messages (JSON)
สามารถเอา SERVER_KEY ได้โดยการเข้าไปที่ Firebase Console จากนั้นเข้าไปที่ Project ที่เราต้องการ แล้วไปที่ Project settings ให้เลือก Tab ที่ชื่อว่า CLOUD MESSAGING ก็จะเจอ Server key ดังนี้
ต่อไปทำความเข้าใจกับ Messages (JSON) กันหน่อย เพราะมันสำคัญมากเลย ใน Message นั้นจะประกอบไปด้วย 3 ส่วน (อีกละ)
- Target คือ เป้าหมายที่จะส่ง messages ไป ตัวอย่าง
- to: เป็นการระบุ token 1 ตัว หรือ topic 1 เรื่อง (ถ้าเป็น topic จะมี prefixed คือ /topics/ เช่น ถ้าต้องการส่งไปที่หัวข้อที่มีชื่อว่า promotion ก็จะเป็นแบบนี้ /topics/promotion)
- registration_ids: เป็นการระบุ token โดยจะอยู่ในรูปแบบของ array ที่เป็น string จะมีเงื่อนไขคือต้องมีอย่างน้อย 1 token และสูงสุดได้ที่ 1,000 token
- condition: เป็นการระบุ topic ที่มากกว่า 1 หัวข้อ โดยการใช้ชื่อหัวข้อตัวพิมพ์เล็ก พิมพ์ใหญ่มีผลนะครับต้องถูก 100% ซึ่งสามารถใช้ operator หรือ(||) กับ และ(&&) ได้ด้วย
2. Options คือ ตัวเลือกเพิ่มเติม ยกตัวอย่าง
- priority: ความสำคัญของข้อความ มีค่า Normal กับ High เช่น android อยู่ใน doze mode การที่ระบุค่า priority เป็น high จะสะกิดให้ตื่นขึ้นมา
3. Payload คือ ชุดของข้อความที่จะส่ง จะประกอบไปด้วย 2 แบบคือ
- Notification: เป็น Object ทำมาเพื่อรองรับการทำงานข้าม platform ได้ โดยจะมีการกำหนด parameter แตกต่างกันออกไปเล็กน้อยสำหรับแต่ละ Platform เช่น
- Android ได้แก่ title, body, sound, icon, click_action เป็นต้น
- iOS ได้แก่ title, body, sound, badge, click_action เป็นต้น - Data: เป็น Object ที่เราสามารถกำหนดข้อมูลได้เองซึ่งจะเป็นในรูปแบบของ key/value นั่นเอง
เรามาดูตัวอย่างหน้าตา Messages(Json) ก่อนส่งก็จะเป็นแบบนี้
ส่งแบบ Notification messages
{
"to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
"notification" : {
"body" : "great match!",
"title" : "Portugal vs. Denmark",
"icon" : "myicon"
}
}
ส่งแบบ Data messages
{
"to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
"data" : {
"Nick" : "Mario",
"body" : "great match!",
"Room" : "PortugalVSDenmark"
}
}
สามารถดูรายละเอียดเพิ่มเติมแบบเต็มสูบได้ที่นี่
ในตัวอย่างนี้จะขอนำเสนอการส่งในรูปแบบของ Data Messages ผ่าน Postman อย่างเดียวนะครับ (Notification Messages แทบจะแตกต่างกัน อิอิ) ก็จะได้หน้าตาการส่งใน Postman ก็จะได้ดังนี้
โดยในส่วนของ Header 🤖
มาในส่วนของ Body ในส่วนนี้แหละครับที่เราจะทำการกำหนดให้เป็น Data Messages หรือ Notification Messages
ก่อนจะทำการ Send ให้ไปดูโค้ดตัวรับ Notification ดีๆ นะครับห้ามมีการดึงข้อมูลการ Notification Messages เด็ดขาดไม่งั้น บึมแน่!!! 💥🔥 ถ้าพร้อมแล้วก็กด Send ปุ่มฟ้าๆ ได้เลย
ถ้าทำการตั้งรับดีๆ ผลก็จะเอามาเป็นแบบนี้ครับท่านผู้ชม 🎊
*** ถ้าเป็น Android ก็ไม่ต้องห่วงเรื่อง foreground กับ background เพราะเราสามารถนำข้อมูลมา Custom เองได้ทั้งหมด 👏
สรุป การยิง Notification ด้วย Postman แบบ Protocol HTTP ส่วนตัวเจ้าของบล็อคคิดว่าสะดวกในการเทสมากกว่าการไปทำบน Firebase Console เพราะสามารถทำได้เหมือนกัน เจ้าของบล็อคคิดว่าจะเป็นอีกทางเลือกหนึ่งในการทดสอบก็แล้วกัน และก็หวังว่าเป็นประโยชน์สำหรับผู้ที่หลงเข้ามาอ่าน นะครับ