2017-02-17 13 views
19

주요 목표는 사이트 알림 기능을 추가하여 Html5 Push API 및 서비스 작업자를 사용하여 사용자에게 경고하는 시스템 알림을 팝업으로 표시하는 기능입니다. 사이트가 열리는 동안 클라이언트 스크립트 만 실행할 수있는 SignalR을 사용하지 않습니다. 또한 here과 같이 사이트가 닫히면 알림을 보낼 수 있어야합니다. 가능합니다.Asp Net Core 웹 푸시 알림

Here 푸시 API에 대한 좋은 기사입니다 좋은 example 을 제공하지만 알림 서비스에 요청을 보낼 서버와 web-push 구성 요소로 NodeJS를 사용합니다.

.NET 예제를 찾을 수 없습니다. 두 가지 해결 방법에 대해 생각합니다.

는 데이터가없는 푸시 메시지를 보내, 당신은 단순히이 HTTP POST 요청을 사용하여 엔드 포인트 URL로 보내

첫째, 서버에 대한 푸시 API 문서를 note에 따라 모든 것을 처음부터 작성하는 것입니다. 그러나 푸시 메시지에 데이터가 포함되어 있으면이를 암호화해야합니다. 이는 상당히 복잡한 과정입니다.

둘째,

더 많은 솔루션이 있습니까 Node.js를 스크립트 파일 실행 AspNetCore.NodeServices (그것에 대해 article)를 사용하는 것입니다? 이것에 대한 준비된 해결책이 있습니까?

삼가지 경우 연구 주제 후

:

  1. HTTP + 오래된 브라우저 + IE 모든 버전 - 사용 SignalR +는 알림, + JS
  2. HTTP + 현대 브라우저 (크롬 HTML을 사용하여 렌더링 Firefox, Safary, Opera ?, Edge)를 지원합니다. - SignalR을 사용하고 js를 사용하여 js로 기본 브라우저 알림을 실행합니다. new Notification('Message')
  3. 서비스 근로자를 사용하는 닫힌 사이트에 대한 기본 알림을 실행하는 데 사용되는 Push API를 지원하는 Chrome (모바일) Chrome 모바일 버전은 서비스 담당자 만 사용하여 알림을 만들 수 있습니다.

복잡해졌습니다. 뭐가 잘못 되었 니?

가능한 솔루션 : 1 2 예를 들어

this 저장소를 발견했다. 양호한 대체 지원을 제공하는 훌륭한 프론트 엔드 솔루션이라고 생각하십시오. 3 케이스의 경우 여전히 수행 할 작업을 모릅니다.

현재 해결 방법. 추가 : 2017년 11월 22일

  • 없음 오프라인 클라이언트 알림
  • HTTPS에 크롬 V62 + 모든 프로젝트 이동에 대한 모바일 지원
  • 지원하지 - (0.2 SignalR을 사용 link
  • 합니다.0) 온라인 클라이언트에 푸시 보내기
  • pnotify v3 +를 사용하여 기본 desctop 또는 html 알림을 표시합니다.
  • (저자의 약속 모바일 지원 크롬. Issue) pnotify V4.0.0 대기
  • 여기에 전체 프로젝트를 다시 작성 SignalR 1.0 .NET 코어 2.1을 기다리는 중.
+4

입니다 - 당신이 다음 콜백에 반응하는 백엔드에서 클라이언트에 통지 할 수있을 것입니다 HTML5 푸시 API –

+0

고객은 서비스 작업자 스크립트에서 ServiceWorkerRegistration.showNotification을 호출하여 생성 된 브라우저에서 모바일 장치 및 데스크톱의 브라우저 알림을보고 싶어합니다. 따라서 SignallR은 호출 할 수 있으며 현재 사이트가 열려 있지만 닫힌 경우 알림 API가 필요합니다. – aleha

+0

[Pushpad] (https://pushpad.xyz/docs/pushpad_pro_get_started)와 [REST API] (https://pushpad.xyz/docs/rest_api)를 사용할 수 있습니다 ('POST/projects/PROJECT_ID/notifications' 참고).). – collimarco

답변

3

언급 한 노드 라이브러리가 C# : web-push-csharp으로 이식되었습니다. 여기

는 자신의 사이트에서 직접 찍은 간단한 사용 예제 : SignalR을 사용하지 않는 이유는 무엇

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

googleapis로 타겟팅 된 pushEndpoint는 Chrome에서만 작동한다는 것을 의미합니까? – aleha

+0

Firefox를 타겟팅하려면 다른 끝점이 필요합니다. 프로젝트의 readme에는 브라우저 지원 표가 있습니다. –