web-dev-qa-db-ja.com

Asp Net Core Webプッシュ通知

主な目標は、Web通知を送信してシステム通知をポップアップし、Html5 Push APIおよびサービスワーカーを使用してユーザーに警告する機能をサイトに追加することです。サイトが開かれている間のみクライアントスクリプトを実行できるSignalRを使用しない。前述のように、サイトが閉じられた場合に通知を送信する機能も必要です here -可能です。

ここ はPush APIに関する優れた記事であり、優れた情報を提供します しかし、NodeJSをサーバーとして使用し、 web-Push コンポーネントを使用してリクエストを通知サービスに送信します。

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

まず、Push APIの記事に基づいてすべてをゼロから作成することです サーバーについて:

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

次に、AspNetCore.NodeServices( article about it)を使用してnode.jsスクリプトファイルを実行する

他に解決策はありますか?たぶんこのための準備ができたソリューションが存在しますか?

主題研究の後

3件:

  1. HTTP +古いブラウザ+ IEすべてのバージョン-SignalRを使用+ html + jsを使用して通知をレンダリング
  2. HTTP +最新のブラウザ(Chrome、Firefox、Safary、Opera?、Edge)とNotification APIのサポート。 -SignalRを使用し、new Notification('Message')を使用してjsでネイティブブラウザー通知をトリガーする
  3. HTTPS + Chrome(モバイル)プッシュAPIのサポートにより、サービスワーカーを使用して閉じたサイトのネイティブ通知をトリガーします。モバイルバージョンChromeは、サービスワーカーを使用します。

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

可能な解決策:

1および2のケースが見つかった場合 this repository。優れたフォールバックサポートを備えた優れたフロントエンドソリューションだと思います。 3ケースについては、まだ何をすべきかわかりません。

現在の解決策。追加:2017-11-22

  • オフラインクライアント通知のサポートなし
  • モバイルサポートなし
  • For Chrome v62 +すべてのプロジェクトをhttpsに移動- リンク
  • オンラインクライアントにプッシュを送信するためにSignalR(0.2.0)を使用する
  • pnotify v3 +を使用して、ネイティブデスクトップまたはHTML通知を表示します。
  • pnotify v4.0.0を待っています(著者の約束chromeモバイルサポート。 Issue
  • SignalR 1.0を備えた.NET Core 2.1を待って、プロジェクト全体を書き換えます。
24
aleha

言及したノードライブラリは、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);
}
7
Ángela