朝日ネット 技術者ブログ

朝日ネットのエンジニアによるリレーブログ。今、自分が一番気になるテーマで書きます。

PWAでwebプッシュ通知を作る (3) - ブラウザのデバッグ機能を使用してプッシュ通知を受け取る

はじめに

watanabeです。 前回の記事でWebページをPWA化しましたが、今回の記事ではプッシュ通知を受け取りその処理をする部分を実装します。

プッシュ通知のAPIについて

一番初めの記事で、バッググラウンドで動くService Workerによりwebページでプッシュ通知が実現できることに触れましたが、 Service Workerが提供している以下のAPIを使用します。

  • Push API…サーバからメッセージを受け取る
  • Notification API…プッシュ通知をユーザに対して表示する

※細かい仕様は以下のページで確認できます。

実装する

前回PWA化した招き猫のwebページで プッシュ通知を受け取れるように以下の手順で実装していきます。

  1. ユーザの許可を得る部分
  2. プッシュ通知を受け取って表示する部分
  3. プッシュ通知をクリックしたときの処理

1. ユーザの許可を得る部分

プッシュ通知を受け取るかどうかユーザの許可を得るポップアップを表示する部分をメインのjsに追加します。 こちらにはNotification APIを使用しています。

Notification.requestPermission(function(status) {
  console.log("通知の許可:", status);//コンソールに許可されたかどうかを表示
});

2. プッシュ通知を受け取る部分

実際に受け取ったときの処理はService Workerのjs内に記述します。 「push」イベントのリスナーとして登録します。 プッシュ通知で表示するメッセージやアイコンも定義します。

※定義できるデータの仕様は以下のページで確認できます。 ServiceWorkerRegistration.showNotification() - Web APIs | MDN

self.addEventListener("push", function(event) {
  console.log("Push Notification Recieved", event);
  if (Notification.permission == "granted") {
    event.waitUntil(
      self.registration
        .showNotification("受信しました", {
          body: "お知らせです。",
          icon: "iconV2.png"
        })
        .then(
          function(showEvent) {},
          function(error) {
            console.log(error);
          }
        )
    );
  }
});

3. プッシュ通知をクリックしたときの処理

通知をクリックしたときの処理もService Worker内に記述します。 「notificationclick」イベントのリスナーとして登録します。 今回はクリックするとデモページのURLを開くようにしました。

self.addEventListener("notificationclick", function(event) {
  event.notification.close();
  event.waitUntil(
    clients.openWindow("https://watanabe0601.github.io/sw.github.io/02/")
  );
});

ソースコード全体はこちらを参照して下さい。

デバッグ用のプッシュ通知を試す

プッシュ通知は送信するサーバが必要なのですが、今回まだ用意できていないため デバッグ用のプッシュ通知で動作するかを確認します。

Google Chromeブラウザにはデバッグ機能がありますが 2018年8月現在(バージョン: 68.0.3440.84 )プッシュ通知が使用できないようなので 今回、Firefoxのデバッグ機能を用いることにします。

参考)Worker をデバッグする about:debugging - 開発ツール | MDN

  1. まずデモ用のページを開きます。 通知を受け取るかどうかの確認メッセージが表示されるので「通知を許可する」を選択します。 f:id:watanabe06:20180806153121p:plain
  2. アドレスバーに「about:debugging#workers」の文字列を入力すると現在動いているServiceWorker 含むWorkerの一覧が表示されます。 (初回アクセス時は画面上部に警告が表示されるので「マルチコンテンツプロセスをオプトアウトする」をクリックして許可して下さい。) デモページのWorkerで「開始」をクリックするとデバッグ可能になります。 その状態で「プッシュ」をクリックすると設定したメッセージのプッシュ通知を受信します。 f:id:watanabe06:20180808153723p:plain

  3. 通知をクリックするとデモページを新しいタブで開きます。

次回予告

次回はプッシュ通知を送信するサーバを実装する予定です。

参考文献:プログレッシブウェブアプリ PWA開発入門 (NextPublishing)

採用情報

朝日ネットでは新卒採用・キャリア採用を行っております。