ลักษณะการทำงานของการแจ้งเตือน

ถึงตอนนี้ เราได้พิจารณาตัวเลือกต่างๆ ที่เปลี่ยนแปลงรูปลักษณ์ของการแจ้งเตือนไปแล้ว มี ที่เปลี่ยนลักษณะการทำงานของการแจ้งเตือนด้วย

โดยค่าเริ่มต้น การเรียกใช้ showNotification() ที่มีเพียงตัวเลือกภาพจะมีสิ่งต่อไปนี้ พฤติกรรม:

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

ในส่วนนี้ เราจะดูว่าเราสามารถเปลี่ยนแปลงลักษณะการทำงานเริ่มต้นเหล่านี้โดยใช้ตัวเลือกได้อย่างไร โดดเดี่ยว วิธีเหล่านี้นำไปใช้งานและใช้ประโยชน์ได้ไม่ยาก

กิจกรรมการคลิกการแจ้งเตือน

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

แนวทางปฏิบัติทั่วไปสำหรับการคลิกการแจ้งเตือนคือให้คลิกปิดและดำเนินการตรรกะอื่นๆ (เช่น เปิดหน้าต่างหรือเรียก API ไปยังแอปพลิเคชัน)

เพื่อให้บรรลุเป้าหมายนี้ คุณต้องเพิ่ม Listener เหตุการณ์ 'notificationclick' ลงใน Service Worker ของเรา ช่วงเวลานี้ จะถูกเรียกทุกครั้งที่มีการคลิกการแจ้งเตือน

self.addEventListener('notificationclick', (event) => {
  const clickedNotification = event.notification;
  clickedNotification.close();

  // Do something as the result of the notification click
  const promiseChain = doSomething();
  event.waitUntil(promiseChain);
});

จากตัวอย่างนี้จะเห็นว่าการแจ้งเตือนที่ถูกคลิกจะสามารถเข้าถึงได้โดย event.notification จากหน้านี้ คุณสามารถเข้าถึงพร็อพเพอร์ตี้และวิธีการของการแจ้งเตือนได้ ด้วยวิธีนี้ คุณเรียกใช้ Method ของ close() และดำเนินการเพิ่มเติม

การทำงาน

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

ปุ่ม

ในส่วนก่อนหน้านี้ คุณได้ดูวิธีกำหนดปุ่มการทำงานเมื่อโทรหา showNotification() ดังต่อไปนี้

const title = 'Actions Notification';

const options = {
  actions: [
    {
      action: 'coffee-action',
      title: 'Coffee',
      type: 'button',
      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);

หากผู้ใช้คลิกปุ่มดำเนินการ ให้ตรวจสอบค่า event.action ใน noticationclick เพื่อระบุว่าคลิกปุ่มการทำงานใด

event.action จะมีค่า action ที่กำหนดไว้ในตัวเลือก ในตัวอย่างข้างต้น ค่า event.action จะเป็นค่าใดค่าหนึ่งต่อไปนี้ 'coffee-action', 'doughnut-action', 'gramophone-action' หรือ 'atom-action'

จากนั้น เราจะตรวจหาการคลิกการแจ้งเตือนหรือการคลิกการดำเนินการดังนี้

self.addEventListener('notificationclick', (event) => {
  if (!event.action) {
    // Was a normal notification click
    console.log('Notification Click.');
    return;
  }

  switch (event.action) {
    case 'coffee-action':
      console.log("User ❤️️'s coffee.");
      break;
    case 'doughnut-action':
      console.log("User ❤️️'s doughnuts.");
      break;
    case 'gramophone-action':
      console.log("User ❤️️'s music.");
      break;
    case 'atom-action':
      console.log("User ❤️️'s science.");
      break;
    default:
      console.log(`Unknown action clicked: '${event.action}'`);
      break;
  }
});

การตอบกลับแบบแทรกในบรรทัด

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

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);

event.reply จะมีค่าที่ผู้ใช้พิมพ์ในช่องป้อนข้อมูล:

self.addEventListener('notificationclick', (event) => {
  const reply = event.reply;

  // Do something with the user's reply
  const promiseChain = doSomething(reply);
  event.waitUntil(promiseChain);
});

แท็ก

โดยพื้นฐานแล้วตัวเลือก tag ก็คือรหัสสตริงที่ "groups" การแจ้งเตือนต่างๆ ร่วมกัน โดยทำให้ กำหนดวิธีแสดงการแจ้งเตือนหลายรายการต่อผู้ใช้ ขั้นตอนนี้อธิบายได้ง่ายที่สุด พร้อมตัวอย่าง

แสดงการแจ้งเตือนและเพิ่มแท็ก 'message-group-1' เราจะแสดง การแจ้งเตือนที่มีรหัสนี้:

const title = 'Notification 1 of 3';

const options = {
  body: "With 'tag' of 'message-group-1'",
  tag: 'message-group-1',
};

registration.showNotification(title, options);

ซึ่งจะแสดงการแจ้งเตือนแรกของเรา

การแจ้งเตือนครั้งแรกพร้อมแท็กของกลุ่มข้อความ 1

เรามาแสดงการแจ้งเตือนครั้งที่ 2 ซึ่งมีแท็กใหม่ของ 'message-group-2' กัน เช่น

const title = 'Notification 2 of 3';

const options = {
  body: "With 'tag' of 'message-group-2'",
  tag: 'message-group-2',
};

registration.showNotification(title, options);

การดำเนินการนี้จะแสดงการแจ้งเตือนครั้งที่ 2 แก่ผู้ใช้

การแจ้งเตือน 2 รายการซึ่งมีแท็กที่ 2 ของกลุ่มข้อความ 2

คราวนี้มาแสดงการแจ้งเตือนครั้งที่ 3 แต่ใช้แท็กแรกของ 'message-group-1' ซ้ำ การดำเนินการนี้ จะปิดการแจ้งเตือนแรกและแทนที่ด้วยการแจ้งเตือนใหม่

const title = 'Notification 3 of 3';

const options = {
  body: "With 'tag' of 'message-group-1'",
  tag: 'message-group-1',
};

registration.showNotification(title, options);

ตอนนี้เรามีการแจ้งเตือน 2 รายการ แม้จะมีการเรียก showNotification() ถึง 3 ครั้ง

การแจ้งเตือน 2 รายการโดยแทนที่การแจ้งเตือนแรกด้วยการแจ้งเตือนครั้งที่ 3

ตัวเลือก tag เป็นเพียงวิธีหนึ่งในการจัดกลุ่มข้อความเพื่อให้การแจ้งเตือนเก่าที่ ที่แสดงอยู่ในปัจจุบันจะถูกปิดหากมีแท็กเดียวกันกับการแจ้งเตือนใหม่

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

นี่จึงเป็นที่มาของตัวเลือก renotify

แจ้งซ้ำ

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

อาจมีบางกรณีที่คุณอาจต้องการให้การแจ้งเตือนการแทนที่ให้ผู้ใช้ทราบแทน อัปเดตแบบเงียบๆ แอปพลิเคชันการแชทเป็นตัวอย่างที่ดี ในกรณีนี้ คุณควรตั้งค่า tag และ renotify ถึง true

const title = 'Notification 2 of 2';

const options = {
  tag: 'renotify',
  renotify: true,
};

registration.showNotification(title, options);

เงียบ

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

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

const title = 'Silent Notification';

const options = {
  silent: true,
};

registration.showNotification(title, options);

ต้องมีการโต้ตอบ

Chrome บนเดสก์ท็อปจะแสดงการแจ้งเตือนในระยะเวลาที่กำหนดก่อนที่จะซ่อนการแจ้งเตือนเหล่านั้น Chrome เปิดอยู่ Android ไม่มีลักษณะการทำงานนี้ การแจ้งเตือนจะแสดงจนกว่าผู้ใช้จะโต้ตอบกับ

หากต้องการบังคับให้การแจ้งเตือนปรากฏตลอดจนกว่าผู้ใช้จะโต้ตอบกับผู้ใช้ ให้เพิ่ม requireInteraction ตัวเลือก ซึ่งจะแสดงการแจ้งเตือนจนกว่าผู้ใช้จะปิดหรือคลิกการแจ้งเตือนของคุณ

const title = 'Require Interaction Notification';

const options = {
  requireInteraction: true,
};

registration.showNotification(title, options);

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

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

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

Code Lab