我們在 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,並閱讀通知規格或追蹤規格更新。