39

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

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

找不到任何 .NET 示例。我考虑了两种解决方法。

首先,是根据关于服务器的 Push API 文章注释从头开始编写所有内容:

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

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

还有更多的解决方案吗?也许存在为此准备好的解决方案?

课题研究后

3个案例:

  1. HTTP + 旧浏览器 + IE 所有版本 - 使用 SignalR + 使用 html+js 渲染通知
  2. 支持通知 API 的 HTTP + 现代浏览器(Chrome、Firefox、Safary、Opera?、Edge)。- 使用 SignalR 并使用 js 触发本机浏览器通知new Notification('Message')
  3. HTTPS + Chrome (Mobile) 支持 Push API 以使用 service-workers 触发关闭站点的本地通知。移动版 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 将整个项目重写为它。
4

2 回答 2

12

您提到的节点库已移植到 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);
}
于 2017-12-03T10:21:26.197 回答
0

用于 Web、Android 和 iOS 的 CorePush 库

我会为此使用CorePush库。它有一个非常简单的界面,它是轻量级的,并且支持一切,例如 Web、iOS 和 Android。这是通过 Firebase 发送 Web 推送的方式:

var fcm = new FcmSender(settings, httpClient);
await fcm.SendAsync(deviceToken, notification);
于 2021-10-02T14:07:34.337 回答