2017-02-17 67 views
19

主な目標は、Web通知を送信して、Html5 Push APIとサービスワーカーを使用しているユーザーに警告するシステム通知をポップアップする機能をサイトに追加することです。 サイトが開かれている間だけクライアントスクリプトを実行できるSignalRは使用しません。また、hereと記載されているように、サイトが閉鎖されている場合には通知を送信する機能もあります。Asp Net Core Web Push通知

HereはプッシュAPIについての良い記事であり、良好なexample を提供しかし、それは通知サービスに要求を送信し、サーバーとweb-pushコンポーネントとしてNodeJSを使用しています。

.NETの例が見つかりません。私は2つの回避策について考えています。

まず、サーバーに関するプッシュAPIの記事noteに基づいてゼロからすべてを書くことです:

あなたはデータなしでプッシュメッセージを送信すると、あなたは、単にHTTPのPOSTリクエストを使用してエンドポイントのURLに送信します。ただし、プッシュメッセージにデータが含まれている場合は、データを暗号化する必要がありますが、これはかなり複雑なプロセスです。

第二には、Node.jsのスクリプトファイル

を実行するためにAspNetCore.NodeServices(それについてarticle)を使用することですが、より解決策はありますか?おそらくこれのための準備ができた解決策が存在しますか?主題の後

3例研究:

  1. HTTP +古いブラウザ+ IEのすべてのバージョン - 利用SignalR +レンダリング通知使用して、HTML + JS
  2. HTTP +最近のブラウザ(Chromeを、 Firefox、Safary、Opera ?, Edge)をサポートしています。 - SignalRを使用し、jsを使用してjsでネイティブブラウザ通知をトリガーnew Notification('Message')
  3. サービスワーカーを使用してクローズドサイトのネイティブ通知を開始するためのHTTPS + Chrome(モバイル) Chromeのモバイル版では、サービス担当者のみが通知を作成できます。

複雑になりました。なにが問題ですか?

可能な解決策:1および2の場合について

thisリポジトリを発見しました。良いフォールバックをサポートする優れたフロントエンドソリューションだと思ってください。 3つの場合、まだ何をすべきか分からない。

現在の解決策。追加:2017年11月22日

  • んが、オフラインクライアントの通知は
  • HTTPSにクロームV62 +すべてのプロジェクトを移動するためのモバイルサポート
  • サポートしていない - (0.2 SignalRを使用してlink
  • を。0)オンラインクライアントにプッシュを送信する
  • pnotify v3 +を使用して、ネイティブのdesctopまたはhtml通知を表示します。
  • (著者の約束は、モバイルサポートをクロム。Issuepnotify v4.0.0を待っている
  • それにプロジェクト全体を書き換えることSignalR 1.0と.NETのコア2.1を待っています。
+4

SignalRを使用しないためのあなたの理由は何ですか - あなたが、その後にコールバックで反応するバックエンドからクライアントに通知することができるようになります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に移植されています。

ここで自分のサイトから直接取得簡略化され、使用例です:

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は、それがクロームでのみ動作することを意味しましたか? – aleha

+0

Firefoxをターゲットにするには別のエンドポイントが必要です。プロジェクトのreadmeには、ブラウザのサポートの表があります。 –

関連する問題