web-dev-qa-db-fra.com

Notifications push Web Asp Net Core

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:

  1. HTTP + anciens navigateurs + IE toutes les versions - Utilisez SignalR + Notification de rendu en utilisant html + js
  2. Navigateurs HTTP + modernes (Chrome, Firefox, Safary, Opera ?, Edge) avec prise en charge de l'API de notification. - Utilisez SignalR et déclenchez une notification native du navigateur avec js en utilisant new Notification('Message')
  3. HTTPS + Chrome (Mobile) avec prise en charge de l'API Push pour déclencher une notification native pour le site fermé à l'aide de techniciens de service. La version mobile de Chrome peut créer des notifications uniquement par en utilisant le travailleur de service.

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

  • Aucune prise en charge des notifications des clients hors ligne
  • Pas de support mobile
  • Pour Chrome v62 + déplacement de tous les projets vers https - lien
  • Utilisation de SignalR (0.2.0) pour envoyer des Push aux clients en ligne
  • Utilisation de pnotify v3 + pour afficher les notifications natives desctop ou html.
  • En attente de pnotify v4.0.0 (l'auteur promet chrome support mobile. Problème )
  • En attente de .NET Core 2.1 avec SignalR 1.0 pour y réécrire tout le projet.
24
aleha

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