⇩ Webでもプッシュ通知を標準化していくような流れが来てるみたいですね。
・https://www.w3.org/TR/push-api/
push通知とは?
プッシュ通知って?
プッシュ通知は、App StoreやGoogle Playから配信されるネイティブアプリでなければ使うことはできません。プッシュ通知は、米アップルの「APNs(Apple Push Notification service)」や米グーグルの「GCM(Google Cloud Messaging)」と呼ばれる通知サービスから送信されるためです。
プッシュ通知の利用でよくあるのが、画面右上に出てくる
お知らせの部分とかですかね。
ネイティブアプリって?
ウェブアプリと比較する際によく用いられるワード「ネイティブアプリ」。現時点でも、その区分に当てはまるものは複数あります。
- Androidアプリ
- iOSアプリ
- Windowsアプリ
- Amazonモバイルアプリ
- Firefox OSアプリ
- など、など
ただ、2014年1月時点では、ビジネス上は2強です。
もともと、ネイティブアプリでしか利用できなかったpush通知ですが、最近は、Webブラウザでも実装することが可能になってきたようです。(2017年10月15日現在、対応ブラウザは少ないようですが。)
Service Workerとは?
Service Worker はブラウザが Web ページとは別にバックグラウンドで実行するスクリプトで、Web ページやユーザのインタラクションを必要としない機能を Web にもたらします。すでに現在、プッシュ通知やバックグラウンド同期が提供されています。さらに将来は定期的な同期、ジオフェンシングなども導入されるでしょう。
つまり、プッシュ通知を利用するには無くてはならない存在みたいですね。
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が担っている。
プッシュ通知を実装する場合、プッシュサーバが必要になるようですが、
- 自分で用意する
- FireBase(Firebase Cloud Messaging)
- OneSignral
- OneSignal, Inc.で提供
- Push7
- 株式会社GNEXで提供
- APNs(Apple Push Notificationサービス)
- mBaaS(mobile backend as a Service)
自前で用意せずとも、利用できる環境を提供してくれてるようです。
OneSignal とかも初めて知りました。
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:
- Your application server creates a public/private key pair. The public key is given to your web app.
- When the user elects to receive pushes, add the public key to the subscribe() call's options object.
- When your app server sends a push message, include a signed JSON Web Token along with the public key.
⇩ こちらのサイトで分かりやすく説明してくれていました。
- アプリケーションサーバはECDSAの鍵ペアを生成する。
- ブラウザ(UA; User Agent)はアプリケーションサーバからECDSA公開鍵を受け取る。
- ブラウザがプッシュサーバにプッシュ通知の購読を登録する際、アプリケーションサーバのECDSA公開鍵を渡す。
- アプリケーションサーバがプッシュサーバにプッシュ通知を送信する際、ECDSA秘密鍵を使ってSHA-256 with ECDSAによってJSON Web Token (JWT)形式の署名トークンを生成し、ECDSA公開鍵と合わせてプッシュサーバに渡す。
- プッシュサーバは、ECDSA公開鍵を使ってアプリケーションサーバから受け取ったJWTを検証し、内容に問題がなければプッシュ通知をブラウザに転送する。
今回は時間が取れず実装までできなかったですが、またの機会にpush通知を実装していきたいですね、まだ実装方法が全然理解できていないですが(涙)