Skip to content

Blazor Server(.NET8)でプッシュ通知を実装する

Notifications You must be signed in to change notification settings

SoundOrion/PushNotification

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 

Repository files navigation

Blazor Server(.NET8)でプッシュ通知を実装する

とりあえず使うには

PushNotification2で

  • PushNotification.Serverプロジェクトのappsettings.jsonに公開鍵と秘密鍵をセット
  • PushNotification.Clientプロジェクトのwwwroot/js/pushNotifications.jsapplicationServerPublicKeyに公開鍵をセット
  • PushNotification.ServerプロジェクトとPushNotification.Clientプロジェクトをマルチ スタートアップなどで実行すればよい

簡単な流れ

  • サーバー側で公開鍵と秘密鍵を準備する
  • クライアント側で公開鍵を使って通知先のURL等を作成する
  • 通知したい人が上の情報を使って通知する

ここではサーバー側(WebApi)で通知を行うことを想定している。

サーバー側で公開鍵と秘密鍵を準備する

VAPIDを生成

以下のWebサイト等を利用する。

もしくは https://www.nuget.org/packages/WebPush を利用するとよい。

using WebPush;

var vapidKeys = VapidHelper.GenerateVapidKeys();
var vapidPublicKey = vapidKeys.PublicKey;
var vapidPrivateKey = vapidKeys.PrivateKey;

appsettings.jsonに生成した公開鍵と秘密鍵を以下のようにセットする。

  "VapidKeys": {
    "PublicKey": "ABCDEFGHIJKLMN123456789",
    "PrivateKey": "ZZZ1234"
  }

クライアント側で公開鍵を使って通知先のURL等を作成

service-worker.jspushNotifications.jsを作成してApp.razorに以下のように記述

    <script src="js/pushNotifications.js"></script>
    <script>navigator.serviceWorker.register('service-worker.js');</script>

service-worker.js

プッシュ通知を受け取ったときとプッシュ通知をクリックしたときの動作を定義している。

pushNotifications.js

Push通知をするためにはEndpoint、UserPublicKey、UserAuthToken(上記の公開鍵とは別物)が必要で、これを取得する関数を定義している。const applicationServerPublicKey = ...のところに公開鍵をセットするのを忘れないように注意。

Components/Pages/Home.razorpushNotifications.js内の関数を呼び出して、サーバー側に通知したりしている。

通知したい人が上の情報を使って通知する

本来はEndpoint、UserPublicKey、UserAuthTokenはDBなどに格納して利用すべきだと思うが、ここではsubscriptionフォルダにsubscription.jsonという名前で保存するようにしており、これを通知に利用するようにしている。 WebPushController.csに通知の関数などを定義しており、Swaggerで実行可能。

参考にしたサイト