Веб-Push-уведомления Asp Net Core

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

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

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

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

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

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

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

После предметного исследования

3 случая:

  1. HTTP + старые браузеры + IE все версии - используйте SignalR + визуализация уведомлений с использованием html + js
  2. HTTP + Современные браузеры (Chrome, Firefox, Safary, Opera?, Edge) с поддержкой Notification API. - Используйте SignalR и запускайте родное уведомление браузера с помощью js, используя new Notification('Message')
  3. 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 (автор обещает поддержку Chrome Mobile. Выпуск)
  • Ожидание.NET Core 2.1 с SignalR 1.0, чтобы переписать весь проект к нему.

2 ответа

Упоминаемая вами библиотека узлов была портирована на 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:example@example.com";
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);
}

Библиотека CorePush для Интернета, Android и iOS

Я бы просто использовал для этого библиотеку CorePush . У него очень простой интерфейс, он легкий и поддерживает все, например, Интернет, iOS и Android. Вот как вы отправляете Web Push через Firebase:

      var fcm = new FcmSender(settings, httpClient);
await fcm.SendAsync(deviceToken, notification);
Другие вопросы по тегам