Chrome 48 中的通知動作

2015 年初,我們在 Android 版和電腦版 Chrome 中推出了推播通知和通知功能。在網路上踏出了一大步,即使瀏覽器已關閉,使用者也能開始更深入地與網路體驗互動。

雖然傳送這些訊息是件好事,但您唯一能做的事,就是點選訊息並開啟頁面,或完全關閉。

如果您查看行動裝置平台 (例如 iOS 和 Android) 原生應用程式提供的通知,這些通知會讓開發人員定義使用者可叫用及互動的關聯動作。在 Chrome 48 版中,我們新增了與電腦版和 Android 版 Google Chrome 的網頁通知類似的功能。

通知螢幕截圖

這個 API 的新增項目非常簡單。從 ServiceWorker 註冊程序呼叫 showNotification 時 (直接在 ServiceWorker 中或透過 navigator.serviceWorker.ready 在網頁上呼叫),您只需建立動作陣列,並將動作新增至 NotificationOptions 物件即可。

Chrome 目前只支援每則通知提供的兩項動作。 部分平台可能可以支援更多,且部分平台可能不支援甚至完全不支援。您可以檢查 Notification.maxActions 來判斷平台支援的內容。在以下範例中,我們假設平台支援兩項動作。

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

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

例如:

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

現在,您已建立通知並將其看起來為 😻?,使用者之後可能會一段時間與該通知互動。目前 (從 Chrome 48 版開始) 與通知的互動都會經過您在服務工作站中註冊的 notificationclick 事件,這些事件可能是一般的點選通知,或對通知輕觸其中一個動作按鈕。另外,你日後也可以回覆通知結束活動

如要瞭解使用者採取哪項動作,您必須查看事件的 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 的情況下將內容與雲端保持同步。不過,最好將資料變更訊息傳送至任何開啟的視窗,以便更新使用者介面。對於需要使用者互動的動作,您可以開啟視窗讓使用者進行回覆。

由於平台支援的動作數量不同,或是在某些情況下無法支援「通知動作」按鈕,因此您必須確保使用者能夠隨時提供合理的備用服務,以便使用者點選通知即可執行的操作。

如要查看實際運作情形,請參閱 Peter Beverloo's Notification Test Harnes,並閱讀通知規格在更新時遵循規格