2017-02-17 301 views
19

主要目標是添加網站發送Web通知的能力,彈出系統通知以使用Html5推送API和服務工作人員提醒用戶。 不使用SignalR,它只能在站點打開時運行客戶端腳本。也應該能夠發送通知,如果網站已關閉,如上所述here - 這是可能的。Asp Net核心Web推送通知

Here即將推式API好文章,並提供了良好的example 但它使用的的NodeJS服務器和web-push組件將請求發送到通知服務。

找不到任何.NET示例。我想到了兩種解決方法。

首先,是寫一切從基礎上推式API文章note有關服務器劃傷:

當您發送到無數據的推送消息,你可以將它發送到使用HTTP POST請求的端點URL。但是,當推送消息包含數據時,您需要對其進行加密,這是一個非常複雜的過程。

其次,就是用AspNetCore.NodeServices(article它)來執行的node.js腳本文件

是否有更多的解決方案?也許存在這樣的現成解決方案?

學科研究

3案件後:

  1. HTTP +舊的瀏覽器+ IE所有版本 - 使用SignalR +渲染使用通知HTML + JS
  2. HTTP +現代瀏覽器(Chrome瀏覽器, Firefox,Safary,Opera?,Edge)支持Notification API。 - 使用SignalR並使用js觸發原生瀏覽器通知使用new Notification('Message')
  3. 支持Push API的HTTPS + Chrome(Mobile)可使用服務工作人員觸發關閉站點的本機通知。 Chrome的移動版本只能使用服務人員創建通知。

變得複雜了。哪裏不對?

可能的解決方案:

對於1,2例發現this庫。認爲這是一個良好的前端解決方案,具有良好的後備支持。 3例仍不知如何是好。

當前的解決方案。補充:2017年11月22日

  • 沒有離線客戶通知支持
  • 沒有移動支持
  • 使用Chrome V62 +移動所有項目HTTPS - link
  • 使用SignalR(0.2。0)用於發送推送到在線客戶端
  • 使用pnotify v3 +顯示本機桌面或html通知。
  • 等待pnotify V4.0.0(作者承諾Chrome移動設備的支持。Issue
  • 等待.NET 2.1的核心與SignalR 1.0到整個項目重寫它。
+4

你有什麼理由不使用SignalR - 這將是能夠從後臺,在那裏你然後在回調與反應通知你的客戶HTML5推送API。 –

+0

客戶希望通過從服務工作者腳本調用ServiceWorkerRegistration.showNotification生成的瀏覽器在移動設備和桌面上查看瀏覽器通知。因此,SignallR可以調用它,然後網站當前打開,但如果它關閉,則需要通知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意味着它只能在chrome中工作? – aleha

+0

您需要一個不同的端點來定位Firefox。在該項目的自述文件中有一個瀏覽器支持表。 –