การทำ Firebase Notification สำหรับ ฝั่ง web/server ฉบับทำงานจริง ( Codeing php sending message from server to mobile )

Tuanrit Sahapaet
2 3 Perspective
Published in
3 min readAug 4, 2017

สิ่งที่จะเขียนต่อไปนี้เป็นการแบ่งปันขั้นตอนในการใช้งาน fcm จากการทำงานจริงของผมเอง อาจจะไม่ได้อธิบายให้เข้าใจทั้งหมด แต่ในตอนท้าย ได้แนบลิ้ง slide ให้ไปศึกษาเพิ่มเติม ดูได้จากด้านล่างครับ

Firebase Notifications

มันคืออะไร สั้นๆมันคือเครื่องมือที่ไว้สำหรับส่งข้อความ จาก server ไปยังอุปกรณ์ใดๆก็ได้อย่างมีประสิทธิภาพ

ก่อนอื่นไปที่ website : https://firebase.google.com/

เข้าสู่ระบบ และ กดที่เมนู ไปที่คอนโซล จะพบกับหน้าของ console หลังจากนั้นกด Add project

หลังจากที่เรากำหนดชื่อของโปรเจค กำหนดค่าต่างๆเสร็จแล้ว ให้เข้าไปที่หน้ารายละเอียดของโปรเจค จะพบกับเมนูดังภาพ

หลังจากเข้าหน้าโปรเจคสำเร็จ ให้เข้าไปที่เมนูที่ชื่อว่า Notification ในด้านซ้ายมือ จะพบกับ คุณพี่เสื้อเหลืองผิวแทน มารอเราอยู่ เราจะต้องสร้างคีย์ กำหนด ค่าต่างๆให้เรียบร้อย เมื่อกำหนดค่าเสร็จจะได้ config file มาเราก็ส่งต่อให้กับทางฝั่ง mobile ให้เขาไปเขียนโค้ด เพื่อสร้าง token มาให้เรา ไว้ส่งข้อความ

หลังจากที่เรา ได้ token มาเรียบร้อยแล้ว เรามาลองส่งข้อความก่อนดีกว่า ว่ามันจะสามารถส่งได้ไหม ถ้าส่งไม่ได้เป็นที่ token ผิดพลาดจะต้องให้ mobile ไปสร้าง token ให้สามารถยิงผ่าน console ให้ได้ก่อน ถึงเราจะลงมือโค้ดได้

จากภาพ

Message text : ข้อความที่จะใช้แสดงใน notification

Delivery date : สำหรับกำหนดเวลาในการส่งข้อความ เราสามารถตั้งเวลาส่งล่วงหน้าได้ หรือ จะส่งทันทีก็ได้เช่นกัน

Target : เป้าหมายที่เราจะเลือกส่ง จำแนกได้ 3 กลุ่ม คือ

1.User segment เหมาะสำหรับการส่งที่ต้องการ filter เช่น กลุ่มผู้ใช้ ภาษา หรือเวอร์ชั่นแอป

2.Topic เหมาะสำหรับส่งให้ User ที่ได้ subscribe หัวข้อนั้นๆไว้

3.Single device เหมาะสำหรับส่งข้อความหาแค่ 1 token 1 เครื่องเท่านั้น

ทีนี้เรากำหนดข้อความ และ ตั้งเวลาเป็นส่งทันที เลือก single device และนำ token ที่ได้มา ไปใส่ไว้ในช่องด้านล่างสุด และกด send message หากทุกอย่างถูกต้อง ข้อความก็จะถูกส่งไป เครื่องที่เป็นเจ้าของ token นั้น

ทีนี้เมื่อเรามี token และก็ส่งได้เรียบร้อยละ ถึงเวลามาเขียนโค้ดกันสักที

อ่ะเราก็เขียนโค้ด register ปกติ แต่เพิ่มเติมคือรับค่า token มาด้วยให้คู่กับ user id เก็บเข้าระบบของเรา

เริ่มต้นด้วยการไปที่ Firebase Console จากนั้นเลือกโปรเจคของเรา เลือก Project setting แล้วเลือก Cloud Messaging เราจะเจอหน้าตาและคีย์ต่างๆ

ให้เรา copy server key และ sender id เอาไว้ และนำไปแทนค่าในโค้ดด้านล่าง

ตรงนี้จะเป็น function ที่จะไว้ส่ง ข้อความ ไปให้ mobile จากตัวอย่างผมใช้ php curl ในการส่งข้อความ โดยที่

1.Server key คือ คีย์ที่ได้มาจาก หน้า console

2.Sender url คือ ปลายทางที่จะใช้ส่ง ในที่นี้คือ https://fcm. googleapis .com/fcm/send

3.sender id คือ คีย์ที่ได้มาจาก หน้า console

4.fieled คือ message ที่จะใช้ในการส่ง

5.header คือ การกำหนดค่าใช้สำหรับ curl ส่งไปยัง sender url ที่กำหนดไว้

ทีนี้เราได้ฟังชั่น ที่จะใช้ส่งละ เหลืออีกจุดคือ json message ที่จะใช้ในการส่ง ส่วนนี้สำคัญมาก สำคัญต่อทั้งในส่วนของขั้นตอนการส่ง และ ปลายทางเขาจะอยากได้ข้อมูลอะไรจากตรงนี้บ้าง

1.ในฟังชั่นนี้ผมเริ่มจาก load helper ที่เขียนไว้ก่อนหน้านี้ไว้

2.query หาข้อมูลจาก database ทั้ง ส่งหาใคร ส่งข้อความว่าอะไร และ ส่งอะไรไปตอนส่งข้อความอะไรบ้าง

3.ใน array notification คือข้อความที่เราจะแสดงตอนไปถึง mobile

4.ใน array data คือข้อมูลเพิ่มเติมที่หลังจาก user ได้รับ noti เราจะส่งอะไรเพื่อเปิดหน้า detail หรือ action อะไรให้ ต้องคุยกับฝั่งมือถือให้ดี

5. เมื่อกำหนด ข้อมูลเรียบร้อยแล้ว เราก็จะส่งไปยัง helper ที่เราเขียนไว้ก่อนหน้า function send_notification()

6.อัพเดต database ว่าเราส่งไปแล้วน่ะ ตาม id ที่เราฟิกไว้

เพียงเท่านี้ก็ได้ฟังชั่นการทำงานไว้สำหรับส่งข้อมูล noti ละครับ

แนะนำเพิ่มเติม

registration_ids จะต้องมี token บรรจุอยู่อย่างน้อย 1 token แต่ไม่เกิน 1,000 tokens ต่อการยิง 1 ครั้ง ไม่เช่นนั้นยิงไปก็สูญเปล่า

ขนาดของ Notification payload ต้องไม่เกิน 2KB

ขนาดของ Data payload ต้องไม่เกิน 4KB

Token มีโอกาสเปลี่ยนแปลงได้ ฉะนั้นเราต้องจัดการให้ดี เพราะบางคนอาจมีหลายเครื่อง บางคนเปลี่ยนเครื่องใหม่ มันจะมีเหตุการณ์เงื่อนไขประมาณนี้

- แอพใช้คำสั่งลบ Instance ID

- restore แอพนั้นๆไปที่ device ใหม่

- uninstall แล้ว reinstall แอพ

  • ผู้ใช้ clear app data

ช่วงสุดท้าย ขอขอบคุณ

ข้อมูลเบื้องต้นผมเอามาจาก พี่ Jirawatee ตำแหน่ง Google Developer Expert Firebase แต่ผมนำมาเสนอในมุมที่ผมใช้งานจริง สุดท้ายขอ แนบ slide ของพี่เขาด้วย เผื่อผมอธิบายไม่ละเอียด ไปดูได้ใน slide น่ะครับ

--

--

Tuanrit Sahapaet
2 3 Perspective

Senior Software Engineer ที่ Purple Ventures Co., Ltd. (Robinhood)