L'objectif principal est d'ajouter à la capacité du site d'envoyer une notification Web pour faire apparaître une notification système pour alerter l'utilisateur à l'aide de l'API Push Html5 et des travailleurs de service. Ne pas utiliser SignalR qui ne peut exécuter que des scripts client lorsque le site est ouvert. Il devrait également être possible d'envoyer une notification si le site est fermé, comme mentionné ici - c'est possible.
Ici est un bon article sur l'API Push et fourni bon exemple Mais il utilise NodeJS comme serveur et web-Push composant pour envoyer des demandes aux services de notification.
Impossible de trouver des exemples .NET. Je pense aux deux solutions de contournement.
Tout d'abord, il faut tout écrire à partir de zéro basé sur l'article de l'API Push note sur le serveur:
Lorsque vous envoyez un message Push sans données, vous l'envoyez simplement à l'URL du point de terminaison à l'aide d'une requête HTTP POST. Cependant, lorsque le message Push contient des données, vous devez le crypter, ce qui est assez un processus complexe.
Deuxièmement, utiliser AspNetCore.NodeServices ( article à ce sujet) pour exécuter le fichier de script node.js
Y a-t-il d'autres solutions? Peut-être existe-t-il une solution prête à cela?
Après la recherche du sujet
3 cas:
new Notification('Message')
C'est devenu trop compliqué. Qu'est-ce qui ne va pas?
Solutions possibles:
Pour 1 et 2 cas trouvés this repository. Pensez que c'est une bonne solution frontale avec un bon support de secours. Pour 3 cas, je ne sais toujours pas quoi faire.
Solution actuelle. Ajouté le 22-11-2017
La bibliothèque de nœuds que vous mentionnez a été portée sur c #: web-Push-csharp .
Voici un exemple d'utilisation simplifié tiré directement de leur site:
var pushEndpoint = @"https://fcm.googleapis.com/fcm/send/efz_TLX_rLU:APA91bE6U0iybLYvv0F3mf6uDLB6....";
var p256dh = @"BKK18ZjtENC4jdhAAg9OfJacySQiDVcXMamy3SKKy7FwJcI5E0DKO9v4V2Pb8NnAPN4EVdmhO............";
var auth = @"fkJatBBEl...............";
var subject = @"mailto:[email protected]";
var publicKey = @"BDjASz8kkVBQJgWcD05uX3VxIs_gSHyuS023jnBoHBgUbg8zIJvTSQytR8MP4Z3-kzcGNVnM...............";
var privateKey = @"mryM-krWj_6IsIMGsd8wNFXGBxnx...............";
var subscription = new PushSubscription(pushEndpoint, p256dh, auth);
var vapidDetails = new VapidDetails(subject, publicKey, privateKey);
var webPushClient = new WebPushClient();
try
{
webPushClient.SendNotification(subscription, "payload", vapidDetails);
}
catch (WebPushException exception)
{
Console.WriteLine("Http STATUS code" + exception.StatusCode);
}