2017-10-08 1 views
0

J'écris une application Web qui doit envoyer des notifications. Il vérifie 12 choses différentes toutes les 30 secondes et si l'un d'entre eux répond aux critères, il doit envoyer une notification; il ne doit pas envoyer d'autre notification avant l'intervalle de 30 minutes suivant (heure et heure et demie). Comment vérifier si une notification a déjà été envoyée et ne pas l'envoyer à nouveau? Je pensais que cela se faisait via des tags, mais deux notifications avec le même tag apparaîtront toujours, la seconde remplacera simplement la première.API Web Notifications - Afficher uniquement une fois par période

La fonction utilisée pour générer la notification est

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); 
    } 

Cette fonction est appelée à partir d'un autre script qui est chargé via Ajax toutes les 30 secondes. Ce script vérifie la base de données pour voir si l'une des 12 choses est dans un état qui nécessite une notification puis appelle la fonction et transmet le nom et un marqueur unique pour cet intervalle de 30 minutes.

J'ai également remarqué avec ce code, qui était basé sur les docs de développeur de Mozilla sur l'API Notifications, n'ajoute pas la notification au centre de notifications OS X.

+1

Vous pouvez utiliser un verrou Redis comme décrit dans [ce poste] (http://blog.pushpad.xyz/2017/07/how-to -throttle-notifications-à-user-and-reduce-cost /) – collimarco

Répondre

1

Avez-vous envisagé d'utiliser un indicateur dans localStorage pour stocker l'heure à laquelle la dernière notification a été envoyée? Disons que vous stockez l'heure à laquelle vous envoyez la première notification, puis vérifiez à nouveau et si elle est assez ancienne, vous en envoyez une autre et mettez à jour ce drapeau. Les données locales de stockage resteront même si vous actualisez la page Web.

Exemple:

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

Référence: https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage

+0

Je l'avais considéré mais j'avais supposé que ce n'était pas la bonne façon d'utiliser les notifications et que je devrais utiliser une sorte de solution d'API de notifications natives – jskrwyk