2017-10-08 98 views
0

我在寫一個需要發送通知的Web應用程序。它每30秒檢查12個不同的事物,如果其中一個符合標準,它應該發送通知;那麼它應該在下一個30分鐘(小時和半小時)間隔之前不發送另一個通知。你如何檢查通知是否已經發送,而不是再次發送?我認爲這是通過標籤完成的,但具有相同標籤的兩個通知仍然會彈出,第二個只會替換第一個。Web通知API - 每個週期只顯示一次

用於生成通知功能是

function randomNotification(whoisit, tagtoPass) { 

    var message = whoisit + " is getting a notification"; 
    var options = { 
     body: message, 
     icon: 'logo.png', 
     tag: tagtoPass, 
    } 

    var n = new Notification('Website Says:',options); 
    setTimeout(n.close.bind(n), 5000); 
    } 

即函數是從經由每30秒的Ajax加載其他腳本調用。該腳本檢查數據庫,以查看12件事中的一件是否處於需要通知的狀態,然後調用該功能並傳遞該名稱和該30分鐘間隔的唯一標籤。

此外,我已經注意到,此代碼基於Mozilla的開發人員文檔,位於Notifications API,不會將通知添加到OS X通知中心。

+1

可以如[這篇文章描述的使用Redis的鎖(http://blog.pushpad.xyz/2017/07/how-to -throttle-notifications-to-user-and-reduce-cost /) – collimarco

回答

1

您是否考慮在localStorage中使用標誌來存儲上次通知發送的時間?

假設您存儲發送第一個通知的時間,然後再次檢查它,如果時間足夠長,則發送另一個通知並更新該標記。

即使刷新網頁,localStorage數據也會保留。

實施例:

localStorage.setItem("last_notification", timestamp) 
localStorage.getItem("last_notification") 

參考:https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage

+0

我曾考慮過,但假設這不是使用通知的正確方式,而且我應該使用某種本地通知API解決方案 – jskrwyk