08 March 2020

Notification in Android ตอนที่ 1 - เรื่องพื้นฐานของ Notification ที่ควรรู้

Created on Sunday, March 08, 2020

นักพัฒนาหลายๆคนอาจจะเคยได้ยินกับคำว่า Notification กันมาบ้าง เพราะว่าเป็นสิ่งสำคัญที่จะช่วยให้แอปของผู้ที่หลงเข้ามาอ่านมีลูกเล่น, ความน่าสนใจ และเข้าถึงผู้ใช้ได้ง่ายขึ้น ซึ่งในบทความนี้ก็จะขอรวบรวมเรื่องราวของ Notification บนแอนดรอยด์มาเล่าให้ฟัง เพราะจริงๆแล้วผู้ที่หลงเข้ามาอ่านหลายๆคนอาจจะไม่รู้ว่า Notification นั้นสามารถทำอะไรได้มากกว่าที่คิด

หมายเหตุ - ในบทความนี้จะพูดถึง Android 5.0 Lollipop (API 21) ขึ้นไปเท่านั้น

บทความในซีรีย์เดียวกัน

• Notification in Android ตอนที่ 1 - เรื่องพื้นฐานของ Notification ที่ควรรู้
• Notification in Android ตอนที่ 2 - คำสั่งพื้นฐานของ Notification
• Notification in Android ตอนที่ 3 - ทำให้ Notification สมบูรณ์ยิ่งขึ้น
• Notification in Android ตอนที่ 4 - Notification Action
• Notification in Android ตอนที่ 5 - Notification Channel
• Notification in Android ตอนที่ 6 - กำหนด Notification Style ในรูปแบบต่างๆ
• Notification in Android ตอนที่ 7 - การแจ้งเตือนแบบ Heads-up notification
• Notification in Android ตอนที่ 8 - อัปเดตข้อมูลให้กับ Notification

Notification คืออะไร?

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

นี่คือคำจำกัดความสั้นๆของ Notification ซึ่งเป็นหนึ่งในความสามารถของแอนดรอยด์ที่เปิดให้นักพัฒนาสามารถใช้งาน Notification ในสถานการณ์ต่างๆที่เหมาะสมกับแอปของตนเองได้


ตามธรรมชาติของ Notification บนอุปกรณ์แอนดรอยด์ที่เป็นแบบ Phone กับ Tablet จะแสดงผลอยู่ที่ด้านบนของหน้าจอ และสามารถดู Notification ที่เคยแสดงได้จาก System Bar ของแอนดรอยด์

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

การทำงานของ Notification บนแอนดรอยด์

การทำงานจะทำงานอยู่บน Android Framework ซึ่งเป็นหัวใจหลักในการทำงานของระบบแอนดรอยด์ที่มีไว้ให้แอปต่างๆเรียกใช้งาน

ซึ่งใน Android Framework ก็จะมีการแบ่งการทำงานแยกกันออกไปตามหน้าที่ และส่วนที่ทำหน้าที่เกี่ยวกับระบบ Notification ก็จะมีชื่อเรียกว่า Notification Manager


และ Status Bar ของแอนดรอยด์ที่ทำหน้าที่แสดง Notification จากแอปต่างๆก็จะรับข้อมูลมาจาก Notification Manager ดังนั้นเมื่อใดก็ตามที่แอปในเครื่องส่ง Notification ไปให้ Notification Manager ก็จะถูกส่งไปเพื่อแสดงใน Notification Drawer ที่อยู่ใน Status Bar นั่นเอง 


ด้วยเหตุนี้ จึงเป็นที่มาว่าทำไมทุกครั้งที่นักพัฒนาต้องการแสดงข้อความแบบ Notification ให้กับผู้ใช้ จะต้องเรียกคำสั่งผ่าน Notification Manager อยู่เสมอ

ความแตกต่างของ Notification ในแต่ละเวอร์ชัน/ยี่ห้อ

เมื่อแอนดรอยด์มีการปล่อยอัปเดทเวอร์ชันใหม่ๆ ก็ย่อมมาพร้อมกับการเปลี่ยนแปลง UI ซึ่งรวมไปถึง Notification Drawer ด้วยเช่นกัน ดังนั้นอย่ามองข้ามตรงจุดนี้ไป เพราะอาจจะทำให้ Notification ของแอปแสดงผลได้ไม่เหมาะสมกับเวอร์ชันนั้นๆ


แต่ยังถือว่าโชคดีที่ Notification Drawer บนแอนดรอยด์ในเวอร์ชันหลังๆมานี้เริ่มมีความแตกต่างกันน้อยมาก รวมไปถึงฟีเจอร์ที่มีให้เรียกใช้งานด้วยเช่นกัน

และนอกจากเวอร์ชันแล้ว อุปกรณ์แอนดรอยด์ที่มียี่ห้อต่างกันก็อาจจะทำให้ UI ของ Notification Drawer แตกต่างเช่นกัน


แต่ไม่ต้องกังวลมากนัก เพราะว่า UI ของแต่ละยี่ห้อก็จะทำตาม UI Guideline Standard ที่ทางแอนดรอยด์กำหนดไว้เช่นกัน

เพื่อป้องกันการแสดงผล Notification ที่ไม่เหมาะสม จึงแนะนำให้นักพัฒนาลองเข้าไปอ่าน Android Notification Guideline ของ Material Design แล้วทำตามซะ จะได้ปลอดภัยและนอนหลับอย่างสบายใจ

มีเรื่องอะไรบ้างใน Notification ที่นักพัฒนาควรรู้​

ใช้คลาส NotificationCompat แทน Notification

เนื่องจาก API ของแอนดรอยด์ในแต่ละเวอร์ชันจะมีการเปลี่ยนแปลงไปตามฟีเจอร์ที่เพิ่มเข้ามาหรือปรับใหม่ ดังนั้นการจะเรียกใช้งาน Notification ให้รองรับกับทุกเวอร์ชันจึงเป็นเรื่องลำบากอย่างหนึ่งสำหรับนักพัฒนา

เพื่อลดปัญหาจาก Fragmentation ของแอนดรอยด์ ทีมพัฒนาแอนดรอยด์ได้สร้าง NotificationCompat ขึ้นมาในไลบรารีที่ชื่อว่า AndroidX เพื่อใช้ในการสร้าง Notification ก่อนที่จะส่งให้ NotificationManager

Channel และ Group ใน Android 8.0 Oreo (API 26) ขึ้นไป

เพื่อให้ผู้ใช้สามารถจัดการกับ Notification ของแต่ละแอปได้มากกว่าเดิม ตั้งแต่เวอร์ชัน 8.0 Oreo หรือ API 26 ขึ้นไป นักพัฒนาจะต้องสร้าง Notification Channel ให้กับ Notification ทุกๆตัว ไม่เช่นนั้นจะทำให้แอปพังได้ และถ้าเป็นแอปที่ต้องแสดง Notification บ่อย แต่ว่า Notification แต่ละตัวมีจุดประสงค์ในการทำงานที่ต่างกัน ก็สามารถกำหนด Notification Channel Group เพื่อจัดกลุ่มให้กับ Notification Channel ได้อีกด้วย


การทำ Notification Channel และแบ่งกลุ่มเป็น Group จะช่วยให้ผู้ใช้สามารถกำหนดได้ว่าจะให้ Group ไหนไม่แจ้งเตือนได้ ซึ่งเป็นทางออกที่ดีกว่าการโดนห้ามแสดง Notification ทั้งแอป

ใช้งาน Notification ร่วมกับ Service เพื่อทำให้เป็น Foreground Service

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

แต่สำหรับแอปที่ต้องการสร้าง Background Service แต่อยากให้ทำงานเป็นระยะเวลานานๆได้ จะต้องเปลี่ยนไปสร้างเป็น Foreground Service แทน


การทำงานของ Foreground Service จะบังคับให้นักพัฒนาต้องสร้าง Notification ตัวหนึ่งขึ้นมาเพื่อแจ้งให้ผู้ใช้ทราบว่ามีการทำงานเบื้องหลังจากแอปอยู่นั่นเอง

Notification Template

รูปแบบในการแสดงผลของ Notification นั้นจะขึ้นอยู่กับโค้ด ซึ่งแอนดรอยด์ได้เตรียมคำสั่งง่ายๆเพื่อแสดงผล Notification ในรูปแบบต่างๆ โดยเรียกว่า Template เพื่อให้นักพัฒนาสามารถนำ Template ไปใช้งานให้ตรงกับความต้องการได้ง่ายขึ้น ซึ่งมีทั้งหมด 6 Template ด้วยกัน


โดยทั้งหมดนี้สามารถกำหนดได้ผ่านโค้ดทั้งหมด และยังสามารถแก้ไขบางส่วนเพิ่มเติมได้ตามใจชอบอีกด้วย

Heads-up Notification

ตั้งแต่ Android 5.0 Lollipop (API Level 21) ขึ้นไป จะมีฟีเจอร์ที่เรียกว่า Heads-up Notification เพิ่มเข้ามาเพื่อให้นักพัฒนาสามารถแสดง Notification ที่มีความสำคัญสูงได้โดดเด่นและเห็นได้ง่ายมากขึ้น


การแสดง Notification บน Lock Screen

ตั้งแต่ Android 5.0 Lollipop (API 21) ขึ้นไป ผู้ใช้กำหนดได้ว่าจะให้แสดงรายละเอียดของ Notification ทั้งหมด ในขณะที่ยังไม่ได้ปลดล็อคหน้าจอหรือไม่ ถ้าต้องการให้ซ่อนเนื้อหา ผู้ใช้ก็จะไม่เห็นรายละเอียดของ Notification เมื่อเปิด Lock Screen


ซึ่งนักพัฒนาสามารถกำหนด Notification อีกตัวหนึ่งที่เรียกว่า Public Notification เพื่อแสดงให้ผู้ใช้เห็นบน Lock Screen แทนได้ จนกว่าจะปลดล็อคหน้าจอ

Bubble

บน Android 11 (API 30) ขึ้นไป จะสามารถกำหนดให้ Notification แสดงในรูปแบบ Bubble ได้ ซึ่งเป็นรูปแบบเดียวกับ Chat Head ของ Facebook Messenger นั่นเอง


ซึ่งการแสดงผลแบบ Bubble จะมีประโยชน์มากกับ Notification สำหรับบทสนทนา เพราะจะช่วยอำนวยความสะดวกให้ผู้ใช้ที่จะโต้ตอบกับคู่สนทนาได้ทันที

เจอกันต่อในบทความหน้า

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

ส่วนการเรียกใช้งาน Notification จะมีโค้ดแบบไหน เรียกใช้งานในแบบใดได้บ้าง ก็รอติดตามกันต่อไปในบทความหน้านะ