Asp Net Core Web 推送通知

Posted

技术标签:

【中文标题】Asp Net Core Web 推送通知【英文标题】:Asp Net Core Web Push Notifications 【发布时间】:2017-07-07 08:49:33 【问题描述】:

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

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

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

首先是根据Push API文章note关于服务器从头开始写一切:

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

第二,是使用AspNetCore.NodeServices(article关于它)执行node.js脚本文件

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

课题研究后

3 例:

    HTTP + 旧浏览器 + IE 所有版本 - 使用 SignalR + 使用 html+js 渲染通知 支持通知 API 的 HTTP + 现代浏览器(Chrome、Firefox、Safary、Opera?、Edge)。 - 使用 SignalR 并通过 js 使用 new Notification('Message') 触发本机浏览器通知 HTTPS + Chrome (Mobile) 支持 Push API 以使用 service-workers 触发关闭站点的本地通知。移动版 Chrome 只能使用 service-worker 创建通知。

事情变得复杂了。怎么了?

可能的解决方案:

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

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

不支持离线客户端通知 不支持移动设备 对于 Chrome v62+,将所有项目移动到 https - link 使用 SignalR (0.2.0) 向在线客户端发送推送 使用pnotify v3+ 显示原生桌面或html通知。 等待pnotify v4.0.0(作者承诺支持chrome移动。Issue) 等待带有 SignalR 1.0 的 .NET Core 2.1 将整个项目重写为它。

【问题讨论】:

您不使用 SignalR 的原因是什么 - 它将能够从后端通知您的客户端,然后您在回调中使用 HTML5 Push API 做出反应。 客户希望在移动设备和桌面上通过浏览器查看浏览器通知,该通知是通过从服务工作者脚本调用 ServiceWorkerRegistration.showNotification 生成的。所以 SignallR 可以调用它,然后站点当前处于打开状态,但如果它关闭,则需要通知 API。 @collimarco 使用第三方服务不是最佳选择 @aleha 当然,选择取决于您的需求。请注意,它依赖于 Push API,它不是使用奇怪的专有协议构建的。 我不确定这是否是您想要的,但我们已经使用web-push-csharp 几个月来发送带有有效负载的网络推送。这是您提到的节点库的一个端口。不过,它只适用于现代 Chrome、Firefox 和 Opera。 【参考方案1】:

你提到的node库已经移植到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);

【讨论】:

pushEndpoint 针对 googleapis 意味着它只能在 chrome 中工作? 您需要一个不同的端点来定位 Firefox。在项目的自述文件中有一个浏览器支持表。 您介意提供任何示例代码以通过 asp net mvc / .net core 订阅 chrome 推送通知吗?我已经开始使用这个实验室工作developers.google.com/web/fundamentals/codelabs/…,但我需要清楚地了解 .NET 中的服务器端实现。谢谢! 你可以帮忙***.com/questions/62673508/…【参考方案2】:

适用于 Web、androidios 的 CorePush 库

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

var fcm = new FcmSender(settings, httpClient);
await fcm.SendAsync(deviceToken, notification);

【讨论】:

以上是关于Asp Net Core Web 推送通知的主要内容,如果未能解决你的问题,请参考以下文章

通过 FireBase 触发从 ASP.Net Api 到 Xamarin.Android 应用程序的推送通知

Asp.net 推送通知 [关闭]

Asp.net 中的推送通知

通过asp.net windows phone 8发送推送通知

ASP.Net MVC PWA 的推送通知

用于 asp.net 的 GCM 推送通知服务器端