การแจ้งเตือนต้องมีการโต้ตอบ - UX การแจ้งเตือนที่ราบรื่นยิ่งขึ้นบนเดสก์ท็อป

เราได้รับข้อมูลมากมายนับตั้งแต่การแจ้งเตือนและการรับส่งข้อความ 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'
        });
        });
    }
    });
}

ลองใช้เดโม