Chrome 48 中的通知動作

我們在 2015 年初為 Android 和電腦版 Chrome 推出推播訊息和通知功能。這對網路來說是一大進步。即使瀏覽器已關閉,使用者仍可開始深入參與網站上的體驗。

雖然您可以傳送這些訊息,但您只能點按訊息開啟網頁,或完全關閉訊息。

您可以查看 iOS 和 Android 等行動平台上原生提供給應用程式的通知,這些通知都允許開發人員定義使用者可以叫用及互動的關聯動作。在 Chrome 48 中,我們已在電腦版和 Android 版 Chrome 中為網頁通知新增類似功能。

通知螢幕截圖

新增 API 相當簡單。您只需建立動作陣列,並在從 ServiceWorker 註冊 (直接在 ServiceWorker 中或透過 navigator.serviceWorker.ready 在網頁上) 呼叫 showNotification 時,將這些動作新增至 NotificationOptions 物件。

目前 Chrome 僅支援對每則通知執行兩種動作。部分平台可能支援更多,部分平台則可能支援較少,甚至不支援。您可以查看 Notification.maxActions,判斷平台支援的功能。在以下範例中,我們假設平台支援兩種動作。

self.registration.showNotification('New message from Alice', {
  actions: [
    {action: 'like', title: 'Like'},
    {action: 'reply', title: 'Reply'}]
});

這會建立一個含有兩個按鈕的簡單通知。請注意,您無法直接將圖示新增至動作 (目前),但可以使用表情符號和擴充的萬國碼字元集,為通知按鈕新增更多內容。

例如:

self.registration.showNotification("New message from Alice", {
  actions: [
    {action: 'like', title: '👍Like'},
    {action: 'reply', title: '⤻ Reply'}]
});

您已建立通知並讓它看起來很 😻?,使用者日後可能會與通知互動。目前 (Chrome 48 起) 所有與通知的互動都會透過服務工作者註冊的 notificationclick 事件進行,這些互動可以是一般點選通知,或是輕觸其中一個動作按鈕。附註:日後您也可以回覆notificationclose事件

如要瞭解使用者採取哪些動作,您需要檢查事件的 action 屬性,然後選擇要為使用者開啟新頁面以便完成動作,或是在背景執行工作。

self.addEventListener('notificationclick', function(event) {
  var messageId = event.notification.data;

  event.notification.close();

  if (event.action === 'like') {
    silentlyLikeItem();
  }
  else if (event.action === 'reply') {
    clients.openWindow("/messages?reply=" + messageId);
  }
  else {
    clients.openWindow("/messages?reply=" + messageId);
  }
}, false);

有趣的是,動作不必開啟新視窗,就能執行一般應用程式互動,也不必建立使用者介面。舉例來說,使用者可以「按讚」或「刪除」社群媒體貼文,系統會針對使用者的本機資料執行動作,然後在未開啟 UI 的情況下,將資料與雲端同步 (建議您將資料變更訊息傳送至任何已開啟的視窗,以便更新 UI)。如果是需要使用者互動的動作,您可以開啟視窗,讓使用者回覆。

由於平台不支援相同數量的動作,或在某些情況下根本無法支援通知動作按鈕,因此您必須確保一律為任務提供合理的備用選項,也就是說,如果使用者只按一下通知,您希望他們執行的動作。

如要立即瞭解這項功能,請參閱 Peter Beverloo 的通知測試 harness,並閱讀通知規格追蹤規格更新