Подтвердить что ты не робот

Уведомления Asp Net Core Web Push

Основная цель состоит в том, чтобы добавить к сайту возможность отправлять веб-уведомления, чтобы вывести системное уведомление, чтобы предупредить пользователя, используя API-интерфейс Html5 Push и сервис-работников. Не использовать SignalR, который может запускать клиентские скрипты во время открытия сайта. Также должна быть возможность отправлять уведомления, если сайт закрыт, как упоминалось здесь - это возможно.

Здесь хорошая статья о Push API и при условии хорошего example Но он использует NodeJS в качестве сервера и web-push компонент для отправки запросов в службы уведомлений.

Невозможно найти примеры .NET. Я думаю об этих двух обходных решениях.

Во-первых, написать все с нуля на основе статьи Push API отметить о сервере:

Когда вы отправляете push-сообщение без данных, вы просто отправляете его на URL-адрес конечной точки, используя запрос HTTP POST. Однако, когда push-сообщение содержит данные, вам необходимо зашифровать его, что является довольно сложным процессом.

Во-вторых, следует использовать AspNetCore.NodeServices(статья об этом) для выполнения node.js script file

Есть ли еще решения? Может быть, существует готовое решение для этого?

После изучения темы

3 случая:

  • HTTP + старые браузеры + IE все версии - использование SignalR + render Notification с помощью html + js
  • HTTP + Современные браузеры (Chrome, Firefox, Safary, Opera?, Edge) с поддержкой API уведомлений. - Используйте SignalR и запускайте собственное уведомление обозревателя с помощью js, используя new Notification('Message')
  • HTTPS + Chrome (Mobile) с поддержкой Push API для запуска собственного уведомления для закрытого сайта с использованием сервис-работников. Мобильная версия Chrome может создавать уведомления только с помощью службы-службы.

Это стало сложно. Что не так?

Возможные решения:

В 1 и 2 случаях найдено этот репозиторий. Подумайте, что это хорошее решение для интерфейса с хорошей поддержкой резервного копирования. За 3 случая все еще не знаю, что делать.

Текущее решение. Добавлено: 2017-11-22

  • Поддержка автономных клиентов без подписки
  • Нет мобильной поддержки
  • Для Chrome v62 + перемещение всего проекта на https - ссылка
  • Использование SignalR (0.2.0) для отправки push в онлайн-клиенты
  • Используя pnotify v3 +, чтобы показать собственные уведомления desctop или html.
  • Ожидание pnotify v4.0.0 (автор promises поддержка Chrome. Issue)
  • Ожидание .NET Core 2.1 с SignalR 1.0 для перезаписи всего проекта на него.
4b9b3361

Ответ 1

Загруженная вами библиотека node была перенесена на С#: web-push-csharp.

Здесь приведен упрощенный пример использования с сайта:

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