2017-10-08 97 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