เราได้รับข้อมูลมากมายนับตั้งแต่การแจ้งเตือนและการรับส่งข้อความ Push เข้ามาอยู่ใน Chrome ความคิดเห็นหนึ่งเกี่ยวกับอุปกรณ์ระดับเดสก์ท็อปคือ การแจ้งเตือนจะยังคงปรากฏบนหน้าจอของผู้ใช้จนกว่าผู้ใช้จะปิด
เมื่อหน้าเว็บเปิดอยู่ คุณสามารถสร้างตัวจับเวลา JavaScript ง่ายๆ ที่จะปิดการแจ้งเตือนโดยอัตโนมัติ แต่ตอนนี้เราอยู่ในโลกที่มี Service Worker ซึ่งเว็บแอปสามารถทำงานได้นานกว่าอายุการใช้งานของกรอบเวลา และ Service Worker จะเข้าสู่โหมดสลีปโดยเร็วที่สุดเพื่อประหยัดทรัพยากร ซึ่งหมายความว่าเราต้องหาวิธีอื่นในการสร้างประสบการณ์ที่ดีให้แก่ผู้ใช้
เมื่อเร็วๆ นี้ เราได้อัปเดตข้อกำหนดเฉพาะของการแจ้งเตือนเพื่อให้นักพัฒนาแอปสามารถระบุว่าระบบไม่ควรปิดการแจ้งเตือนโดยอัตโนมัติ
การแจ้งเตือนมี Flag การตั้งค่าการโต้ตอบที่จำเป็นซึ่งตั้งค่าเป็น "ปิด" ไว้ตั้งแต่แรก เมื่อตั้งค่าแล้ว การตั้งค่านี้จะระบุว่าในอุปกรณ์ที่มีหน้าจอขนาดใหญ่เพียงพอ การแจ้งเตือนควรพร้อมใช้งานจนกว่าผู้ใช้จะเปิดใช้งานหรือปิดการแจ้งเตือน
การดำเนินการนี้อาจดูแปลก แต่สิ่งที่เราต้องการจะสื่อคือระบบจะนำการแจ้งเตือนออกจากมุมมองหลังจากผ่านไประยะหนึ่ง เว้นแต่จะมีการแจ้งให้ทราบเป็นอย่างอื่น
ตอนนี้ Chrome 47 (เบต้าในเดือนตุลาคม 2015) รองรับตัวเลือก requireInteraction
แล้ว ระบบจะปิดการแจ้งเตือนทั้งหมดในเดสก์ท็อปหลังจากผ่านไปประมาณ20 วินาที เว้นแต่จะมีการระบุและตั้งค่าเป็น true
อย่างชัดเจน แต่ที่น่าสนใจคือ Chrome เพิ่งนำศูนย์การแจ้งเตือนออกจากแพลตฟอร์มเดสก์ท็อปทั้งหมด (ยกเว้น ChromeOS) ซึ่งหมายความว่าระบบจะถือว่าการแจ้งเตือนที่ย่ออยู่ถูกปิดไปแล้ว และจะเข้าถึงไม่ได้เมื่อเรียกใช้ getNotifications
ใน Service Worker
ใน Chrome สำหรับ Android ระบบจะไม่สนใจตัวเลือก requireInteraction
เนื่องจากมีการย่อการแจ้งเตือนในพื้นที่ถาดการแจ้งเตือน
navigator.serviceWorker.register('sw.js');
function showNotifications() {
Notification.requestPermission(function(result) {
if (result === 'granted') {
navigator.serviceWorker.ready.then(function(registration) {
registration.showNotification('requireInteraction: true', {
body: 'Requires interaction',
icon: '../images/touch/chrome-touch-icon-192x192.png',
requireInteraction: true,
tag: 'require-interaction'
});
registration.showNotification('requireInteraction: false', {
body: 'Does not require interaction',
icon: '../images/touch/chrome-touch-icon-192x192.png',
requireInteraction: false,
tag: 'no-require-interaction'
});
});
}
});
}