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

เราได้เรียนรู้อะไรมากมายตั้งแต่การแจ้งเตือนและข้อความ Push เข้ามาอยู่ใน Chrome แล้ว ความคิดเห็นที่เฉพาะเจาะจงอย่างหนึ่งเกี่ยวกับอุปกรณ์ระดับเดสก์ท็อปคือ การแจ้งเตือนจะยังปรากฏอยู่บนหน้าจอของผู้ใช้จนกว่าผู้ใช้จะคอยปิดการแจ้งเตือน

เมื่อหน้าเว็บเปิดอยู่ คุณสามารถสร้างตัวจับเวลา JavaScript ง่ายๆ ซึ่งจะปิดการแจ้งเตือนโดยอัตโนมัติ แต่ปัจจุบันเราอยู่ในโลกที่มี Service Worker ซึ่งเป็นที่ที่เว็บแอปมีอายุการใช้งานเกินกรอบเวลาหนึ่ง และพนักงานบริการจะเข้าสู่โหมดสลีปให้เร็วที่สุดเพื่อประหยัดทรัพยากร ซึ่งหมายความว่าเราต้องการวิธีอื่นในการสร้างประสบการณ์ที่ดีให้แก่ผู้ใช้

มีการอัปเดตข้อกำหนดการแจ้งเตือนเมื่อเร็วๆ นี้เพื่อให้นักพัฒนาแอปสามารถระบุว่าระบบไม่ควรปิดการแจ้งเตือนโดยอัตโนมัติ

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

อาจจะฟังดูแปลกแต่ก็หมายความว่า ถ้าไม่ได้มีการแจ้งไว้เป็นอย่างอื่น ควรนำการแจ้งเตือนออกจากการแสดงผลในระยะเวลาสั้นๆ

ตอนนี้ Chrome 47 (เบต้าในเดือนตุลาคม 2015) รองรับตัวเลือก requireInteraction แล้ว หากไม่ได้ระบุไว้และตั้งค่าเป็น true ไว้อย่างชัดแจ้ง ระบบจะปิดการแจ้งเตือนทั้งหมดบนเดสก์ท็อปหลังผ่านไปประมาณ 20 วินาที แต่ส่วนที่น่าสนใจคือ Chrome ได้นำศูนย์การแจ้งเตือนออกจากแพลตฟอร์มเดสก์ท็อปทั้งหมด (ยกเว้น ChromeOS) เมื่อเร็วๆ นี้ ซึ่งหมายความว่าการแจ้งเตือนที่ย่อเล็กสุดจะถือเป็นการปิดและเข้าถึงได้ผ่านการเรียก getNotifications ในโปรแกรมทำงานของบริการ

ใน 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'
        });
        });
    }
    });
}

ลองใช้เดโม