Service Workerとプッシュ通知

⇩  Webでもプッシュ通知を標準化していくような流れが来てるみたいですね。

https://www.w3.org/TR/push-api/

push通知とは?

プッシュ通知って? 

プッシュ通知は、App StoreGoogle Playから配信されるネイティブアプリでなければ使うことはできません。プッシュ通知は、米アップルの「APNs(Apple Push Notification service)」や米グーグルの「GCM(Google Cloud Messaging)」と呼ばれる通知サービスから送信されるためです。 

今さら聞けない!プッシュ通知サービスとは?

プッシュ通知の利用でよくあるのが、画面右上に出てくる

f:id:ts0818:20171015002550j:plain

お知らせの部分とかですかね。

f:id:ts0818:20171015003006j:plain


ネイティブアプリって?

ウェブアプリと比較する際によく用いられるワード「ネイティブアプリ」。現時点でも、その区分に当てはまるものは複数あります。

ただ、2014年1月時点では、ビジネス上は2強です。

ウェブアプリとネイティブアプリの違い|抑えておくべき7つの項目

もともと、ネイティブアプリでしか利用できなかったpush通知ですが、最近は、Webブラウザでも実装することが可能になってきたようです。(2017年10月15日現在、対応ブラウザは少ないようですが。)

Service Workerとは?

Service Worker はブラウザが Web ページとは別にバックグラウンドで実行するスクリプトで、Web ページやユーザのインタラクションを必要としない機能を Web にもたらします。すでに現在、プッシュ通知バックグラウンド同期が提供されています。さらに将来は定期的な同期、ジオフェンシングなども導入されるでしょう。

Service Worker の紹介  |  Web  |  Google Developers

つまり、プッシュ通知を利用するには無くてはならない存在みたいですね。 

Web Push、つまりWebでプッシュ通知

Web PushをFCMとVAPIDで認証してブラウザにプッシュ通知を送る - 平日インプット週末アウトプットぶろぐ

⇧  上記サイト様によると、

  • Firebase Cloud Messaging(FCM)を使い取得したサーバーキーを認証に使い送信する方法
  • Voluntary Application Server Identification for Web Push (VAPID)で認証をする方法

の2つの方法があるようです。 

2つの方法としたがWeb Pushが標準化する過程で整理された認証方法であり、VAPIDのほうが後発となりFirebaseのサーバーキーを必要としない認証方式である。 VAPIDはFirebaseのプロジェクト登録が不要となるだけでプッシュサーバはFirebase Cloud Messagingが担っている

Web PushをFCMとVAPIDで認証してブラウザにプッシュ通知を送る - 平日インプット週末アウトプットぶろぐ

プッシュ通知を実装する場合、プッシュサーバが必要になるようですが、

  • 自分で用意する
  • FireBase(Firebase Cloud Messaging)
    • Google Cloud PlatFormのFirebase Cloud Messaging(旧Google Cloud Messaging)で利用可
  • OneSignral
    • OneSignal, Inc.で提供
  • Push7
    • 株式会社GNEXで提供
  • APNs(Apple Push Notificationサービス)
    • iOS(および間接的にwatchOS)、tvOS、macOSの各デバイスに情報を配信
  • mBaaS(mobile backend as a Service)

自前で用意せずとも、利用できる環境を提供してくれてるようです。

 

OneSignal とかも初めて知りました。

Chromeブラウザへプッシュ通知を行うにはGoogle Cloud MessagingのAPIKeyが必要なので、まずはGoogle Developer Consoleでアプリケーションを作成し、API Keyとプロジェクト番号(プロジェクトIDではないことに注意!)を取得する必要があります。

OneSignalでWebサイトにpush通知機能を付ける - Qiita

 

VAPID(Voluntary Application Server Identification)

Googleの翻訳だと、「VAPID」=「自発的アプリケーションサーバーID」ということらしいです、何のこっちゃ?

VAPID is the cool new short name for "Voluntary Application Server Identification". This new spec essentially defines a handshake between your app server and the push service and allows the push service to confirm which site is sending messages. With VAPID you can avoid the FCM-specific steps for sending a push message. You no longer need a Firebase project, a gcm_sender_id, or an Authorization header.

The process is pretty simple:

  1. Your application server creates a public/private key pair. The public key is given to your web app.
  2. When the user elects to receive pushes, add the public key to the subscribe() call's options object.
  3. When your app server sends a push message, include a signed JSON Web Token along with the public key.

 

Web Push Interoperability Wins  |  Web  |  Google Developers

⇩  こちらのサイトで分かりやすく説明してくれていました。

  1. アプリケーションサーバはECDSAの鍵ペアを生成する。
  2. ブラウザ(UA; User Agent)はアプリケーションサーバからECDSA公開鍵を受け取る。
  3. ブラウザがプッシュサーバにプッシュ通知の購読を登録する際、アプリケーションサーバのECDSA公開鍵を渡す。
  4. アプリケーションサーバがプッシュサーバにプッシュ通知を送信する際、ECDSA秘密鍵を使ってSHA-256 with ECDSAによってJSON Web Token (JWT)形式の署名トークンを生成し、ECDSA公開鍵と合わせてプッシュサーバに渡す。
  5. プッシュサーバは、ECDSA公開鍵を使ってアプリケーションサーバから受け取ったJWTを検証し、内容に問題がなければプッシュ通知をブラウザに転送する。

GCMの登録が不要になったChromeのWeb Pushを試してみる - Qiita

 

今回は時間が取れず実装までできなかったですが、またの機会にpush通知を実装していきたいですね、まだ実装方法が全然理解できていないですが(涙)