Asp Net Core Web推送通知

主要目标是增加站点发送Web通知的能力,以弹出系统通知,以使用Html5 Push API和服务工作人员提醒用户。 不使用SignalR,它只能在打开站点时运行客户端脚本。 如果站点关闭,也应该能够发送通知,如此处所述 – 这是可能的。

这是关于Push API的好文章并提供了很好的示例但是它使用NodeJS作为服务器和web-push组件来向通知服务发送请求。

找不到任何.NET示例。 我想到了两个解决方法。

首先,是基于关于服务器的Push API文章说明从头开始编写所有内容:

当您发送没有数据的推送消息时,只需使用HTTP POST请求将其发送到端点URL。 但是,当推送消息包含数据时,您需要对其进行加密,这是一个非常复杂的过程。

其次,是使用AspNetCore.NodeServices(关于它的文章 )来执行node.js脚本文件

还有更多解决方案吗? 也许存在现成的解决方案?

经过学科研究

3例:

  1. HTTP +旧浏览器+ IE所有版本 – 使用信号R +使用html + js渲染通知
  2. HTTP +现代浏览器(Chrome,Firefox,Safary,Opera?,Edge),支持Notification API。 – 使用SignalR并使用new Notification('Message')使用js触发本机浏览器通知
  3. HTTPS + Chrome(移动版),支持Push API,可使用服务工作者触发已关闭网站的本机通知。 移动版Chrome只能使用service-worker创建通知。

它变得复杂了。 怎么了?

可能的解决方案:

对于1和2个案例找到了此存储库。 认为这是一个很好的前端解决方案,具有良好的后备支持。 对于3个案例仍然不知道该怎么办。

当前解决方案 补充:2017-11-22

  • 没有脱机客户端通知支持
  • 没有移动支持
  • 对于Chrome v62 +将所有项目移至https – 链接
  • 使用SignalR(0.2.0)将推送发送到在线客户端
  • 使用pnotify v3 +显示本机desctop或html通知。
  • 正在等待pnotify v4.0.0(作者承诺提供Chrome移动支持。 问题 )
  • 等待带有SignalR 1.0的.NET Core 2.1将整个项目重写到它。

您提到的节点库已移植到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); }