SlideShare une entreprise Scribd logo
1  sur  39
Télécharger pour lire hors ligne
清⽔ 智⾏ (Tomoyuki SHIMIZU)
これからのHTML5の「つながる」

– Push API, …and so on
qiita.com/tomoyukilabs
@othersight
fb.me/othersight
IoT × HTML5
HTTP(S), WebSocket
HTTP(S), WebSocket
ブラウザ終了時 ⇒ 受信できない
HTTP(S)以外のプロトコル
Bluetooth Smart
NFC
+ プッシュ通知
+ HTTP(S)以外の通信⼿段
Push API
コードレベルの解説はQiitaを参照
qiita.com/tomoyukilabs
ブラウザが閉じていると

プッシュ通知を受けられない
Service Workerで

バックグラウンド受信
Service Worker
W3C Working Draft
HTTPS必須
Webサーバ
Service Worker
(JavaScript)
Webアプリ
プッシュ通知

サービス
register
Cache
fetch HTTP(S)
push
openWindow
focus
ブラウザが閉じていても

必要に応じて動作
navigator.serviceWorker.register(scriptUrl, options).then(!
function(registration) { … }!
);!
navigator.serviceWorker.ready.then(!
function(registration) { … })!
);
self.addEventListener(eventType, function(event) {!
event.waitUntil(promise);!
});
Webアプリ側
Service Worker側
Service Workerスクリプトの制約
n  Window配下のオブジェクトやメソッド等はほぼ利⽤不可
l  XMLHttpRequest, localStorage, document.cookie, etc.
n  IndexedDBは利⽤可能
l  受信したプッシュ通知を⼀時的に保存する等に利⽤可能
n  HTTP(S)通信にはXMLHttpRequestではなくFetch APIを利⽤
l  (self.)fetch(url).then(…)
Service Worker × Push API
W3C Working Draft
HTTPS必須
≧ 42 ≧ 44
Google APIサーバ Webサーバ
User Agent (ブラウザ)
1) 登録 4) プッシュ通知
2) registration_id登録
(HTTP POST等)
3) プッシュ通知
(HTTP POST)
Google Cloud

Messaging (GCM)
Webサーバ
User Agent (ブラウザ)
1) 登録
(HTTP/2)
4) プッシュ通知
(HTTP/2 Server Push)
2) endpoint登録

(HTTP POST等)
3) プッシュ通知
(HTTP POST)
プッシュ通知

サービス
Web Push Protocol
(Internet Draft)
実装中
現在は暫定的にGCMを利⽤
対応済み
Web Push Protocol
navigator.serviceWorker.ready.then(!
function(registration) {!
registration.pushManager.…!
});!
});
self.addEventListener(‘push’, function(event) {!
if(‘data’ in event) { var data = event.data.json(); … }!
else { … }!
event.waitUntil(promise);!
});
Webアプリ側
Service Worker側
PushManager
n  registration.pushManager.subscribe(options):

プッシュ通知の購読を登録
n  registration.pushManager.getSubscription():

プッシュ通知の登録情報を取得
いずれも、PromiseでPushSubscriptionオブジェクトを取得
PushSubscription
n  pushSubscription.endpoint:

プッシュサービスのエンドポイントのURL

(WebサーバからHTTP POSTする際に指定するURL)
n  pushSubscription.unsubscribe():

プッシュ通知の購読を解除(結果はPromiseで取得)
n  pushSubscription.getKey(encriptionName):

プッシュ通知の送信に必要な受信側の公開鍵を取得

(Web Pushに対応しているブラウザで利⽤可能)
GCMのURL + ‘/’ +
registration_id
https://android.googleapis.com/gcm/send/…
MozillaのPushサーバのURL
https://updates.push.services.mozilla.com/push/…
PushSubscription.endpoint
これらのURLにWebサーバからHTTP POSTで

プッシュ通知の内容を送信
Web Push Protocol:
メッセージの暗号化が必須
中間者攻撃を防ぐための対策
(受信者(ブラウザ)と送信者(サーバ)だけの秘密にする)
n  ECDH (楕円曲線ディフィー・ヘルマン)で暗号鍵を共有
n  128ビットAES-GCM⽅式でメッセージ本体を暗号化
Push APIでのGCM:
メッセージ本体の送信は⾮対応
鍵交換と暗号化の仕組みに対応していないため
(メッセージをService Workerのfetchで取得するか、

もしくは、Web Push対応まで待つか)
公開鍵
秘密鍵
公開鍵
秘密鍵
? ?
共通鍵
× ×
ECDHによる安全な鍵共有
ブラウザが⽣成
getKey(‘p256dh’)
Webサーバで作成
ブラウザに共有
共通鍵
AES-GCMによる暗号化
HMAC-SHA-256等
Salt 平⽂
128ビットAES-GCM
HTTPヘッダに
付与
暗号⽂
公開鍵
salt
プッシュサーバ
Web Push
(HTTP/2)
とりあえず試すには:
Node.jsで動作するWeb Pushデモ(by Mozilla)
github.com/chrisdavidmills/push-api-demo
詳細は後⽇Qiitaにて執筆予定
HTTP(S)以外の

通信⼿段
Web Bluetooth
W3C Community Group Report
navigator.bluetooth.requestDevice({!
filters: [{ services: [ … ] }]!
}).then(function(device) { device.connectGATT(); })!
.then(function(server) { server.getPrimaryService( … ); })!
.then( … );!
Bluetooth SmartのGATTサーバとの通信に対応
部分サポート
≧ 45 (Chrome OS)
≧ 48 (Chrome for Android)
実装中
Web Bluetooth
HTTPS必須
Web NFC API
W3C Community Group Report
navigator.nfc.push(message).then( … );!
!
navigator.nfc.watch(function(message) {!
…!
});!
NFCのタグ読取りやpeer-to-peerデータ交換に対応
実装中
対応検討中
Web NFC API
HTTPS必須
本⽇のまとめ
n  ブラウザを開いていなくてもWebアプリがバックグ
ラウンドで通信・連携できる時代に
l Service Worker, Push API, …
n  Webアプリが通信できる相⼿デバイスが今後⼤幅に
拡⼤する⽅向に
l Web Bluetooth, Web NFC API, …
n  ⼀⽅で、セキュリティやプライバシーに対する要件
が今後さらに強化される⽅向に
l  HTTPS必須化, 鍵共有と暗号化, パーミッション管理の強化, …
Thank you!

Contenu connexe

Similaire à これからのHTML5の「つながる」

GoAzure 2015:IoTなどの大量データをStream Analyticsでリアルタイムデータ分析してみよう
GoAzure 2015:IoTなどの大量データをStream Analyticsでリアルタイムデータ分析してみようGoAzure 2015:IoTなどの大量データをStream Analyticsでリアルタイムデータ分析してみよう
GoAzure 2015:IoTなどの大量データをStream Analyticsでリアルタイムデータ分析してみようHidemasa Togashi
 
最新Web 通信系API総まくり!WebRTC, Streams, Push api etc.
最新Web 通信系API総まくり!WebRTC, Streams, Push api etc.最新Web 通信系API総まくり!WebRTC, Streams, Push api etc.
最新Web 通信系API総まくり!WebRTC, Streams, Push api etc.Kensaku Komatsu
 
Concentrated HTML5 & Attractive HTML5
Concentrated HTML5 & Attractive HTML5Concentrated HTML5 & Attractive HTML5
Concentrated HTML5 & Attractive HTML5Sho Ito
 
AWS IoTを使った双方向通信システムの実装と注意点
AWS IoTを使った双方向通信システムの実装と注意点AWS IoTを使った双方向通信システムの実装と注意点
AWS IoTを使った双方向通信システムの実装と注意点Kohei MATSUSHITA
 
詳説 Data api mtddc 拡張版 v3対応
詳説 Data api mtddc 拡張版   v3対応詳説 Data api mtddc 拡張版   v3対応
詳説 Data api mtddc 拡張版 v3対応Yuji Takayama
 
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力ThinReports
 
Attractive HTML5
Attractive HTML5Attractive HTML5
Attractive HTML5Sho Ito
 
WebSocket + Node.jsでつくるチャットアプリ
WebSocket + Node.jsでつくるチャットアプリWebSocket + Node.jsでつくるチャットアプリ
WebSocket + Node.jsでつくるチャットアプリKohei Kadowaki
 
いまさら聞けないHTML5概要
いまさら聞けないHTML5概要いまさら聞けないHTML5概要
いまさら聞けないHTML5概要yoshikawa_t
 
HTML5とOSSで作るブラウザで簡単顔認識
HTML5とOSSで作るブラウザで簡単顔認識HTML5とOSSで作るブラウザで簡単顔認識
HTML5とOSSで作るブラウザで簡単顔認識Mitsuru Ogawa
 
Spring Boot + Netflix Eureka
Spring Boot + Netflix EurekaSpring Boot + Netflix Eureka
Spring Boot + Netflix Eureka心 谷本
 
Prometheus meetup tokyo#3 slide
Prometheus meetup tokyo#3 slidePrometheus meetup tokyo#3 slide
Prometheus meetup tokyo#3 slidecosmo0920
 
IBM Developer Dojo Online 2019 #11 OpenShift
IBM Developer Dojo Online 2019 #11 OpenShift IBM Developer Dojo Online 2019 #11 OpenShift
IBM Developer Dojo Online 2019 #11 OpenShift Daisuke Hiraoka
 
Azure Function GAした!Visual Studio Tools for Azure Functions もプレビューだ!
Azure Function GAした!Visual Studio Tools for Azure Functions もプレビューだ!Azure Function GAした!Visual Studio Tools for Azure Functions もプレビューだ!
Azure Function GAした!Visual Studio Tools for Azure Functions もプレビューだ!Yasuaki Matsuda
 
Html5, Web Applications 2
Html5, Web Applications 2Html5, Web Applications 2
Html5, Web Applications 2totty jp
 
Ibm cloud and watson iot 20160616
Ibm cloud and watson iot 20160616Ibm cloud and watson iot 20160616
Ibm cloud and watson iot 20160616Tsuyoshi Hirayama
 

Similaire à これからのHTML5の「つながる」 (20)

GoAzure 2015:IoTなどの大量データをStream Analyticsでリアルタイムデータ分析してみよう
GoAzure 2015:IoTなどの大量データをStream Analyticsでリアルタイムデータ分析してみようGoAzure 2015:IoTなどの大量データをStream Analyticsでリアルタイムデータ分析してみよう
GoAzure 2015:IoTなどの大量データをStream Analyticsでリアルタイムデータ分析してみよう
 
最新Web 通信系API総まくり!WebRTC, Streams, Push api etc.
最新Web 通信系API総まくり!WebRTC, Streams, Push api etc.最新Web 通信系API総まくり!WebRTC, Streams, Push api etc.
最新Web 通信系API総まくり!WebRTC, Streams, Push api etc.
 
Keycloakの最近のトピック
Keycloakの最近のトピックKeycloakの最近のトピック
Keycloakの最近のトピック
 
LogicFlow 概要
LogicFlow 概要LogicFlow 概要
LogicFlow 概要
 
Concentrated HTML5 & Attractive HTML5
Concentrated HTML5 & Attractive HTML5Concentrated HTML5 & Attractive HTML5
Concentrated HTML5 & Attractive HTML5
 
AWS IoTを使った双方向通信システムの実装と注意点
AWS IoTを使った双方向通信システムの実装と注意点AWS IoTを使った双方向通信システムの実装と注意点
AWS IoTを使った双方向通信システムの実装と注意点
 
詳説 Data api mtddc 拡張版 v3対応
詳説 Data api mtddc 拡張版   v3対応詳説 Data api mtddc 拡張版   v3対応
詳説 Data api mtddc 拡張版 v3対応
 
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
 
Attractive HTML5
Attractive HTML5Attractive HTML5
Attractive HTML5
 
20120525 mt websocket
20120525 mt websocket20120525 mt websocket
20120525 mt websocket
 
WebSocket + Node.jsでつくるチャットアプリ
WebSocket + Node.jsでつくるチャットアプリWebSocket + Node.jsでつくるチャットアプリ
WebSocket + Node.jsでつくるチャットアプリ
 
いまさら聞けないHTML5概要
いまさら聞けないHTML5概要いまさら聞けないHTML5概要
いまさら聞けないHTML5概要
 
HTML5とOSSで作るブラウザで簡単顔認識
HTML5とOSSで作るブラウザで簡単顔認識HTML5とOSSで作るブラウザで簡単顔認識
HTML5とOSSで作るブラウザで簡単顔認識
 
Spring Boot + Netflix Eureka
Spring Boot + Netflix EurekaSpring Boot + Netflix Eureka
Spring Boot + Netflix Eureka
 
Prometheus meetup tokyo#3 slide
Prometheus meetup tokyo#3 slidePrometheus meetup tokyo#3 slide
Prometheus meetup tokyo#3 slide
 
IBM Developer Dojo Online 2019 #11 OpenShift
IBM Developer Dojo Online 2019 #11 OpenShift IBM Developer Dojo Online 2019 #11 OpenShift
IBM Developer Dojo Online 2019 #11 OpenShift
 
Azure Function GAした!Visual Studio Tools for Azure Functions もプレビューだ!
Azure Function GAした!Visual Studio Tools for Azure Functions もプレビューだ!Azure Function GAした!Visual Studio Tools for Azure Functions もプレビューだ!
Azure Function GAした!Visual Studio Tools for Azure Functions もプレビューだ!
 
Gaeja20121130
Gaeja20121130Gaeja20121130
Gaeja20121130
 
Html5, Web Applications 2
Html5, Web Applications 2Html5, Web Applications 2
Html5, Web Applications 2
 
Ibm cloud and watson iot 20160616
Ibm cloud and watson iot 20160616Ibm cloud and watson iot 20160616
Ibm cloud and watson iot 20160616
 

これからのHTML5の「つながる」