2017-02-17 68 views
19

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

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

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

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

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

Во-вторых, это использование AspNetCore.NodeServices (article об этом), чтобы выполнить node.js файл сценария

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

После предмета исследуете

3 случая:

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

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

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

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

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

  • Нет оффлайн клиенты уведомления не поддерживает
  • Нет поддержки мобильной
  • Для Chrome V62 + перемещения всего проекта к HTTPS - link
  • Использованием SignalR (0.2.0) для отправки push на онлайн-клиентов
  • Использование pnotify v3 + для отображения уведомлений о родном десктопе или html.
  • Ожидание pnotify V4.0.0 (автор обещает хрому поддержки мобильных устройств. Issue)
  • Ожидание .NET Ядра 2.1 с SignalR 1.0 переписать весь проект к нему.
+4

Какова ваша причина неиспользования SignalR - он будет иметь возможность уведомить своего клиента от внутреннего интерфейса, где вы затем реагировать на обратный вызов с API HTML5 Push. –

+0

Клиент хочет видеть уведомления обозревателя на мобильных устройствах и на рабочем столе из браузера, которые генерируются при вызове ServiceWorkerRegistration.showNotification из сценария рабочего стола. Таким образом, SignallR может вызывать его, тогда сайт в настоящее время открыт, но если он закрыт, то требуется Notification API. – aleha

+0

Вы можете использовать [Pushpad] (https://pushpad.xyz/docs/pushpad_pro_getting_started) и его [REST API] (https://pushpad.xyz/docs/rest_api) (см. «POST/projects/PROJECT_ID/notifications»). – collimarco

ответ

3

Узел библиотеки, который вы упомянули, был перенесен на C#: 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); 
} 
+0

pushEndpoint, предназначенный для googleapis, означает, что он будет работать только в хроме? – aleha

+0

Вам понадобится другой конечный пункт для установки Firefox. В readme проекта есть таблица поддержки браузера. –