การแสดงการแจ้งเตือน

ตัวเลือกการแจ้งเตือนจะแบ่งออกเป็น 2 ส่วน โดยส่วนแรกจะเกี่ยวกับลักษณะการมองเห็น ) และส่วนที่จะอธิบายลักษณะลักษณะการทำงานของการแจ้งเตือน (ส่วนถัดไป)

ลองใช้ตัวเลือกการแจ้งเตือนที่หลากหลายในเบราว์เซอร์ต่างๆ ในแพลตฟอร์มต่างๆ โดยใช้ของ Peter Beverloo ตัวสร้างการแจ้งเตือน

ตัวเลือกภาพ

API สำหรับแสดงการแจ้งเตือนนั้นใช้งานง่ายดังนี้

<ServiceWorkerRegistration>.showNotification(<title>, <options>);

ทั้งอาร์กิวเมนต์ title และ options เป็นค่าที่ไม่บังคับ

ชื่อเป็นสตริงที่มีและตัวเลือกอย่างใดอย่างหนึ่งต่อไปนี้

{
  "//": "Visual Options",
  "body": "<String>",
  "icon": "<URL String>",
  "image": "<URL String>",
  "badge": "<URL String>",
  "dir": "<String of 'auto' | 'ltr' | 'rtl'>",
  "timestamp": "<Long>"

  "//": "Both visual & behavioral options",
  "actions": "<Array of Strings>",
  "data": "<Anything>",

  "//": "Behavioral Options",
  "tag": "<String>",
  "requireInteraction": "<boolean>",
  "renotify": "<Boolean>",
  "vibrate": "<Array of Integers>",
  "sound": "<URL String>",
  "silent": "<Boolean>",
}

มาดูตัวเลือกภาพกัน

การแยก UI ของการแจ้งเตือน

ตัวเลือกชื่อและเนื้อหา

นี่คือลักษณะของการแจ้งเตือนที่ไม่มีชื่อและตัวเลือกใน Chrome บน Windows:

การแจ้งเตือนที่ไม่มีชื่อและตัวเลือกใน Chrome บน Windows

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

หากติดตั้ง Progressive Web Application ไว้ในอุปกรณ์ ระบบจะใช้ชื่อเว็บแอปแทน ของชื่อเบราว์เซอร์:

การแจ้งเตือนที่มีชื่อเว็บแอปแทนชื่อเบราว์เซอร์

หากเราเรียกใช้โค้ดต่อไปนี้

const title = 'Simple Title';

const options = {
  body: 'Simple piece of body text.\nSecond line of body text :)',
};

registration.showNotification(title, options);

เราได้รับการแจ้งเตือนนี้ใน Chrome บน Linux

การแจ้งเตือนที่มีชื่อและเนื้อความใน Chrome บน Linux

ใน Firefox บน Linux จะมีลักษณะดังนี้

การแจ้งเตือนที่มีชื่อและเนื้อความใน Firefox บน Linux

นี่คือลักษณะของการแจ้งเตือนที่มีข้อความจำนวนมากในชื่อและเนื้อความใน Chrome บน กรณีที่ใช้ Linux

การแจ้งเตือนที่มีชื่อแบบยาวและข้อความเนื้อหาใน Chrome บน Linux

Firefox บน Linux จะยุบข้อความส่วนเนื้อหาจนกว่าคุณจะวางเมาส์เหนือการแจ้งเตือน ซึ่งทำให้ การแจ้งเตือนที่จะขยาย:

การแจ้งเตือนที่มีชื่อแบบยาวและข้อความเนื้อหาใน Firefox บน Linux

การแจ้งเตือนที่มีชื่อแบบยาวและข้อความเนื้อหาใน Firefox บน Linux ขณะวางเมาส์เหนือการแจ้งเตือนด้วยเคอร์เซอร์เมาส์

การแจ้งเตือนเดียวกันใน Firefox บน Windows มีลักษณะดังนี้

การแจ้งเตือนที่มีชื่อและเนื้อความใน Firefox บน Windows

การแจ้งเตือนที่มีชื่อยาวและเนื้อความใน Firefox บน Windows

คุณจะเห็นได้ว่าการแจ้งเตือนเดียวกันอาจดูแตกต่างออกไปในเบราว์เซอร์ที่ต่างกัน และอาจมีลักษณะดังนี้ ในเบราว์เซอร์เดียวกันแต่ต่างแพลตฟอร์ม

Chrome และ Firefox ใช้การแจ้งเตือนของระบบและศูนย์การแจ้งเตือนบนแพลตฟอร์มที่ พร้อมใช้งาน

เช่น การแจ้งเตือนของระบบใน macOS ไม่รองรับรูปภาพและการดําเนินการ (ปุ่มและการทํางานในบรรทัด คำตอบ)

Chrome ยังมีการแจ้งเตือนที่กำหนดเองสำหรับแพลตฟอร์มเดสก์ท็อปทุกแพลตฟอร์มอีกด้วย คุณสามารถเปิดใช้งานได้โดยการตั้งค่า chrome://flags/#enable-system-notifications ตั้งค่าสถานะเป็น Disabled

Icon

โดยพื้นฐานแล้วตัวเลือก icon ก็คือรูปภาพขนาดเล็กที่คุณสามารถแสดงไว้ข้างชื่อและข้อความเนื้อหาได้

ในโค้ดของคุณ คุณต้องระบุ URL ไปยังภาพที่คุณต้องการโหลด:

const title = 'Icon Notification';

const options = {
  icon: '/images/demos/icon-512x512.png',
};

registration.showNotification(title, options);

คุณจะได้รับการแจ้งเตือนนี้ใน Chrome บน Linux

การแจ้งเตือนที่มีไอคอนใน Chrome บน Linux

และใน Firefox บน Linux

การแจ้งเตือนพร้อมไอคอนใน Firefox บน Linux

แต่ไม่มีหลักเกณฑ์ที่ชัดเจนสำหรับขนาดรูปภาพที่จะใช้เป็นไอคอน

ดูเหมือนว่า Android จะอยากได้รูปภาพขนาด 64dp (ซึ่งก็คือ 64px ทวีคูณตามอัตราส่วนพิกเซลของอุปกรณ์)

สมมติว่าอัตราส่วนพิกเซลสูงสุดสำหรับอุปกรณ์คือ 3 ขนาดไอคอน 192 พิกเซลขึ้นไปคือ เงินเดิมพันได้อย่างปลอดภัย

ป้าย

badge เป็นไอคอนโมโนโครมขนาดเล็กที่ใช้เพื่อแสดงข้อมูลเพิ่มเติมเล็กน้อยใน ผู้ใช้ว่าการแจ้งเตือนมาจากไหน

const title = 'Badge Notification';

const options = {
  badge: '/images/demos/badge-128x128.png',
};

registration.showNotification(title, options);

ส่วนที่เขียนป้ายจะใช้เฉพาะใน Chrome ใน Android เท่านั้น

การแจ้งเตือนที่มีป้ายใน Chrome บน Android

ในเบราว์เซอร์อื่นๆ (หรือ Chrome ที่ไม่มีป้าย) คุณจะเห็นไอคอนของเบราว์เซอร์

การแจ้งเตือนพร้อมป้ายใน Firefox บน Android

เช่นเดียวกับตัวเลือก icon ไม่มีหลักเกณฑ์จริงเกี่ยวกับขนาดที่จะใช้

การสำรวจหลักเกณฑ์ของ Android ขนาดที่แนะนำคือ 24px คูณด้วยอัตราส่วนพิกเซลของอุปกรณ์

หมายความว่ารูปภาพที่มีขนาด 72 พิกเซลขึ้นไปควรจะดี (สมมติว่าอัตราส่วนพิกเซลของอุปกรณ์สูงสุดคือ 3)

รูปภาพ

คุณสามารถใช้ตัวเลือก image เพื่อแสดงรูปภาพขนาดใหญ่ขึ้นแก่ผู้ใช้ได้ โดยเฉพาะอย่างยิ่ง มีประโยชน์ในการแสดงตัวอย่างรูปภาพให้กับผู้ใช้

const title = 'Image Notification';

const options = {
  image: '/images/demos/unsplash-farzad-nazifi-1600x1100.jpg',
};

registration.showNotification(title, options);

ใน Chrome บน Linux การแจ้งเตือนจะมีลักษณะดังนี้

การแจ้งเตือนพร้อมรูปภาพใน Chrome บน Linux

ใน Chrome บน Android การครอบตัดและอัตราส่วนจะแตกต่างกันดังนี้

การแจ้งเตือนพร้อมรูปภาพใน Chrome บน Android

เนื่องจากอัตราส่วนระหว่างเดสก์ท็อปและอุปกรณ์เคลื่อนที่มีความแตกต่างกัน จึงเป็นการยากต่อการแนะนำ หลักเกณฑ์

เนื่องจาก Chrome บนเดสก์ท็อปจะไม่เติมเต็มพื้นที่ที่มีอยู่ และมีอัตราส่วน 4:3 ซึ่งน่าจะดีที่สุด วิธีการคือแสดงรูปภาพที่มีอัตราส่วนนี้และอนุญาตให้ Android ครอบตัดรูปภาพ อย่างไรก็ตาม ตัวเลือก image อาจยังเปลี่ยนแปลงไป

ใน Android หลักเกณฑ์เพียงอย่างเดียวคือ ความกว้าง 450dp

ตามหลักเกณฑ์นี้ รูปภาพความกว้าง 1350px หรือมากกว่านั้นจะเป็นตัวเลือกที่ดี

การทำงาน (ปุ่ม)

คุณกำหนดให้ actions แสดงปุ่มที่มีการแจ้งเตือนได้ ดังนี้

const title = 'Actions Notification';

const options = {
  actions: [
    {
      action: 'coffee-action',
      type: 'button',
      title: 'Coffee',
      icon: '/images/demos/action-1-128x128.png',
    },
    {
      action: 'doughnut-action',
      type: 'button',
      title: 'Doughnut',
      icon: '/images/demos/action-2-128x128.png',
    },
    {
      action: 'gramophone-action',
      type: 'button',
      title: 'Gramophone',
      icon: '/images/demos/action-3-128x128.png',
    },
    {
      action: 'atom-action',
      type: 'button',
      title: 'Atom',
      icon: '/images/demos/action-4-128x128.png',
    },
  ],
};

registration.showNotification(title, options);

สำหรับการดำเนินการแต่ละรายการ คุณสามารถกำหนด title, action (ซึ่งก็คือรหัส), icon และ type ชื่อและไอคอนคือสิ่งที่คุณจะเห็นในการแจ้งเตือน ระบบจะใช้รหัสเมื่อตรวจหา ว่ามีการคลิกปุ่มการทำงาน (ดูข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้ในส่วนถัดไป) ประเภท สามารถละเว้นได้เนื่องจาก 'button' เป็นค่าเริ่มต้น

ในขณะที่เขียนเฉพาะการดำเนินการสนับสนุนของ Chrome และ Opera for Android

ในตัวอย่างข้างต้น มีการกระทำ 4 อย่างที่กำหนดไว้เพื่อแสดงให้เห็นว่าคุณสามารถกำหนดการกระทำได้มากกว่า จะปรากฏขึ้น หากต้องการทราบจำนวนการดำเนินการที่เบราว์เซอร์จะแสดง คุณสามารถตรวจสอบ window.Notification?.maxActions:

const maxVisibleActions = window.Notification?.maxActions;

if (maxVisibleActions) {
  options.body = `Up to ${maxVisibleActions} notification actions can be displayed.`;
} else {
  options.body = 'Notification actions are not supported.';
}

บนเดสก์ท็อป ไอคอนปุ่มดำเนินการจะแสดงสีต่างๆ (ดูโดนัทสีชมพู)

การแจ้งเตือนที่มีปุ่มการทำงานใน Chrome ใน Linux

ใน Android 6 และเวอร์ชันก่อนหน้า ไอคอนจะมีสีตามรูปแบบสีของระบบ ดังนี้

การแจ้งเตือนที่มีปุ่มการทำงานใน Chrome สำหรับ Android

ใน Android 7 ขึ้นไป ไอคอนการดำเนินการจะไม่แสดงเลย

Chrome จะเปลี่ยนลักษณะการทำงานของ Chrome บนเดสก์ท็อปให้สอดคล้องกับ Android (เช่น ใช้ รูปแบบสีที่เหมาะสมเพื่อให้ไอคอนเข้ากับรูปลักษณ์ของระบบ) ในระหว่างนี้ คุณ สามารถจับคู่สีข้อความของ Chrome ได้โดยทำให้ไอคอนมีสี #333333

นอกจากนี้ สิ่งที่ควรทราบด้วยว่าไอคอนดูคมชัดบน Android แต่ไม่ชัดเจนบนเดสก์ท็อป

ขนาดที่ดีที่สุดที่ฉันใช้ได้ใน Chrome บนเดสก์ท็อปคือ 24px x 24px ภาพนี้ดูแปลกๆ อย่างเศร้าๆ บน Android

แนวทางปฏิบัติแนะนำที่เราเห็นได้จากความแตกต่างเหล่านี้

  • ใช้รูปแบบสีที่สอดคล้องกันสำหรับไอคอนเพื่อให้ไอคอนทั้งหมดมีความสอดคล้องกัน แสดงต่อผู้ใช้
  • อย่าลืมทำงานในแบบโมโนโครมเนื่องจากบางแพลตฟอร์มอาจแสดงในลักษณะดังกล่าว
  • ทดสอบขนาดและดูว่าขนาดใดที่เหมาะกับคุณ 128px × 128px ทำงานได้ดีใน Android สำหรับฉัน แต่ไม่ดี คุณภาพบนเดสก์ท็อป
  • คาดว่าไอคอนการดำเนินการจะไม่แสดงเลย

ข้อกำหนดการแจ้งเตือนกำลังสำรวจวิธีกำหนดขนาดไอคอนที่หลากหลาย แต่ดูเหมือนว่า ระยะเวลารอสักพักก่อนที่จะตกลงกันไว้

การดำเนินการ (การตอบกลับแบบแทรกในบรรทัด)

คุณเพิ่มการตอบกลับการแจ้งเตือนในบรรทัดได้โดยกำหนดการดำเนินการด้วยประเภท 'text' ดังนี้

const title = 'Alexey Rodionov';

const options = {
  body: 'How are you doing? )',
  image: '/images/demos/avatar-512x512.jpg',
  icon: '/images/demos/icon-512x512.png',
  badge: '/images/demos/badge-128x128.png',
  actions: [
    {
      action: 'reply',
      type: 'text',
      title: 'Reply',
      icon: '/images/demos/action-5-128x128.png',
    }
  ],
};

registration.showNotification(title, options);

นี่คือหน้าตาของฟีเจอร์บน Android:

การแจ้งเตือนใน Android พร้อมปุ่มการดำเนินการตอบกลับ

การคลิกปุ่มการทำงานจะเปิดช่องป้อนข้อความดังนี้

การแจ้งเตือนใน Android ที่มีช่องป้อนข้อความที่เปิดอยู่

คุณสามารถปรับแต่งตัวยึดตำแหน่งสำหรับช่องป้อนข้อความได้ดังนี้

const title = 'Alexey Rodionov';

const options = {
  body: 'How are you doing? )',
  icon: '/images/demos/avatar-512x512.jpg',
  badge: '/images/demos/badge-128x128.png',
  actions: [
    {
      action: 'reply',
      type: 'text',
      title: 'Reply',
      icon: '/images/demos/action-5-128x128.png',
      placeholder: 'Type text here',
    }
  ],
};

registration.showNotification(title, options);

การแจ้งเตือนบน Android พร้อมตัวยึดตำแหน่งที่กำหนดเองสำหรับช่องป้อนข้อความ

ช่องป้อนข้อความใน Chrome บน Windows จะแสดงอยู่เสมอโดยไม่ต้องคลิกการดําเนินการ ปุ่ม:

การแจ้งเตือนใน Windows ที่มีช่องป้อนข้อความและปุ่มตอบกลับ

คุณสามารถเพิ่มการตอบกลับแบบแทรกในบรรทัดได้มากกว่า 1 รายการ หรือรวมปุ่มและการตอบกลับแบบแทรกในบรรทัดดังนี้

const title = 'Poll';

const options = {
  body: 'Do you like this photo?',
  image: '/images/demos/cat-image.jpg',
  icon: '/images/demos/icon-512x512.png',
  badge: '/images/demos/badge-128x128.png',
  actions: [
    {
      action: 'yes',
      type: 'button',
      title: '👍 Yes',
    },
    {
      action: 'no',
      type: 'text',
      title: '👎 No (explain why)',
      placeholder: 'Type your explanation here',
    },
  ],
};

registration.showNotification(title, options);

การแจ้งเตือนใน Windows ที่มีช่องป้อนข้อความและปุ่มดำเนินการ 2 ปุ่ม

ทิศทาง

พารามิเตอร์ dir ให้คุณกำหนดทิศทางที่จะแสดงข้อความ ขวาไปซ้ายหรือซ้ายไปขวา

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

ถ้าเป็นไปได้ เบราว์เซอร์ควรทำสิ่งที่ถูกต้องตามข้อกำหนด ข้อความที่ให้ไว้

ควรตั้งค่าพารามิเตอร์เป็น auto, ltr หรือ rtl

ภาษาที่อ่านจากขวาไปซ้ายซึ่งใช้ใน Chrome ใน Linux มีลักษณะดังนี้

การแจ้งเตือนที่อ่านจากขวาไปซ้ายใน Chrome ใน Linux

ใน Firefox (เมื่อวางเมาส์เหนือรายการนั้นๆ) คุณจะได้รับข้อมูลต่อไปนี้

การแจ้งเตือนที่อ่านจากขวาไปซ้ายใน Firefox บน Linux

สั่น

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

รูปแบบของตัวเลือกการสั่นควรเป็นชุดตัวเลขที่อธิบายจำนวนของ มิลลิวินาทีที่อุปกรณ์ควรสั่น ตามด้วยจำนวนมิลลิวินาทีที่อุปกรณ์ควรจะ ไม่สั่น

const title = 'Vibrate Notification';

const options = {
  // Star Wars shamelessly taken from the awesome Peter Beverloo
  // https://tests.peter.sh/notification-generator/
  vibrate: [
    500, 110, 500, 110, 450, 110, 200, 110, 170, 40, 450, 110, 200, 110, 170,
    40, 500,
  ],
};

registration.showNotification(title, options);

การดำเนินการนี้จะส่งผลต่ออุปกรณ์ที่รองรับการสั่นเท่านั้น

เสียง

พารามิเตอร์เสียงช่วยให้คุณกําหนดเสียงที่จะเล่นเมื่อได้รับการแจ้งเตือนได้

ในขณะที่เขียน ยังไม่มีเบราว์เซอร์ที่สนับสนุนตัวเลือกนี้

const title = 'Sound Notification';

const options = {
  sound: '/demos/notification-examples/audio/notification-sound.mp3',
};

registration.showNotification(title, options);

การประทับเวลา

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

timestamp ควรเป็นจำนวนมิลลิวินาทีตั้งแต่ 00:00:00 น. (UTC) ซึ่งก็คือวันที่ 1 มกราคม 1970 (ซึ่งก็คือ UNIX Epoch)

const title = 'Timestamp Notification';

const options = {
  body: 'Timestamp is set to "01 Jan 2000 00:00:00".',
  timestamp: Date.parse('01 Jan 2000 00:00:00'),
};

registration.showNotification(title, options);

แนวทางปฏิบัติแนะนำสำหรับ UX

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

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

บอกตามตรง คุณสามารถดูตัวอย่างและคิดว่า "ฉันจะไม่ทำผิดพลาดอย่างนั้น" แต่ทำได้ง่ายกว่า เกิดกับดักนั้น อย่างที่คุณคิด

ข้อผิดพลาดที่พบบ่อยบางส่วนที่ควรหลีกเลี่ยงมีดังนี้

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

การตรวจหาเบราว์เซอร์และฟีเจอร์

ในขณะที่เขียนบทความนั้น แตกต่างกันอย่างมากระหว่าง Chrome และ Firefox ในแง่ของ การสนับสนุนฟีเจอร์สำหรับการแจ้งเตือน

โชคดีที่คุณสามารถตรวจหาการสนับสนุนสำหรับฟีเจอร์การแจ้งเตือนได้โดยดูที่ window.Notification ต้นแบบ

สมมติว่าเราต้องการทราบว่าการแจ้งเตือนรองรับปุ่มการทำงานหรือไม่ เราจะทำดังต่อไปนี้

if ('actions' in window.Notification?.prototype) {
  // Action buttons are supported.
} else {
  // Action buttons are NOT supported.
}

เราจึงสามารถเปลี่ยนการแจ้งเตือนที่แสดงให้ผู้ใช้เห็นได้

สำหรับตัวเลือกอื่นๆ เพียงทำตามวิธีข้างต้น โดยแทนที่ 'actions' ด้วยตัวเลือกที่ต้องการ ชื่อพารามิเตอร์

สถานที่ที่จะไปต่อ

Code Lab