ยิง Notification (FCM) ด้วย Postman

Jedsada Tiwongvorakul
20Scoops CNX
Published in
3 min readMay 13, 2017

ว่าด้วยเรื่องของการส่ง Notification ผ่าน Firebase Cloud Messaging (FCM) นั้นสามารถทำผ่านตัว Firebase Console แต่ถ้าเราอยากจะส่งเฉพาะ data payload ล่ะ เพราะการส่งผ่านตัวคอนโซล มันจะติด notification payload มาด้วย วิธีแก้ไขปัญหาก็คือเขียน Script ซึ่งอาจจะเป็นเรื่องที่ยากหลายคนรวมถึงตัวเจ้าของบล็อคเอง วันนี้เจ้าของบล็อคเลยมานำเสนอเรื่องวิธีการทำผ่านเครื่องมือที่ชื่อว่า Postman

สำหรับ Protocol ในการส่ง Message ของ Firebase Cloud Messaging จะมีด้วยกัน 2 แบบคือ HTTP และ XMPP และในตัวอย่างนี้เจ้าของบล็อคขอเลือกใช้ HTTP โดยการส่งจะประกอบไปด้วย 3 ส่วน คือ

  1. URL ที่จะใช้คือ https://fcm.googleapis.com/fcm/send
  2. HTTP HEADER
    - Content-Type:application/json
    - Authorization:key=SERVER_KEY
  3. Body จะอยู่ในรูปแบบของ Messages (JSON)

สามารถเอา SERVER_KEY ได้โดยการเข้าไปที่ Firebase Console จากนั้นเข้าไปที่ Project ที่เราต้องการ แล้วไปที่ Project settings ให้เลือก Tab ที่ชื่อว่า CLOUD MESSAGING ก็จะเจอ Server key ดังนี้

ต่อไปทำความเข้าใจกับ Messages (JSON) กันหน่อย เพราะมันสำคัญมากเลย ใน Message นั้นจะประกอบไปด้วย 3 ส่วน (อีกละ)

  1. 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 🤖

key คือ Server key นะจ๊ะ

มาในส่วนของ Body ในส่วนนี้แหละครับที่เราจะทำการกำหนดให้เป็น Data Messages หรือ Notification Messages

ส่งแบบ Topic
ส่งแบบ Token

ก่อนจะทำการ Send ให้ไปดูโค้ดตัวรับ Notification ดีๆ นะครับห้ามมีการดึงข้อมูลการ Notification Messages เด็ดขาดไม่งั้น บึมแน่!!! 💥🔥 ถ้าพร้อมแล้วก็กด Send ปุ่มฟ้าๆ ได้เลย

ถ้าทำการตั้งรับดีๆ ผลก็จะเอามาเป็นแบบนี้ครับท่านผู้ชม 🎊

*** ถ้าเป็น Android ก็ไม่ต้องห่วงเรื่อง foreground กับ background เพราะเราสามารถนำข้อมูลมา Custom เองได้ทั้งหมด 👏

สรุป การยิง Notification ด้วย Postman แบบ Protocol HTTP ส่วนตัวเจ้าของบล็อคคิดว่าสะดวกในการเทสมากกว่าการไปทำบน Firebase Console เพราะสามารถทำได้เหมือนกัน เจ้าของบล็อคคิดว่าจะเป็นอีกทางเลือกหนึ่งในการทดสอบก็แล้วกัน และก็หวังว่าเป็นประโยชน์สำหรับผู้ที่หลงเข้ามาอ่าน นะครับ

--

--