際際滷

際際滷Share a Scribd company logo
Progressive web applications i praksis
Mens du venter,
hvis du har du internett i lomma, g奪 til
opensites.kantega.no/tdc
og ha den klar til senere
Progressive web applications i praksis
Trondheim Developer Conference 2017
H奪vard Wigtil
Kantega AS
@havardw
Innhold
1. Hva er progressive web applications?
2. Web app manifest
3. Service Workers
4. Offline
5. Web push
Hva er Progressive Web Applications?
 Webapplikasjoner som n脱rmer seg native applikasjoner i funksjonalitet
 Samlebetegnelse for et sett med APIer og praksiser
PWA sjekkliste
 Kj淡rer p奪 kryptert forbindelse (https)
 Responsivt design
 Virker i alle nettlesere
 Gir respons n奪r nettleser er offline
 Laste raskt ogs奪 p奪 treigt nett
 Web app manifest
 Mulighet for server push
Progressive web applications i praksis
Caniuse?
 God st淡tte i Firefox, Chrome og Opera
 St淡tte bak konfig-flagg i Edge
 St淡tte p奪 vei i Safari
Web app manifest
 Startpunkt for app
 Lar deg kj淡re fullscreen p奪 mobil
 Framst奪r som native app for det utrente 淡ye
Web app manifest eksempel
{
"name": "Trondheim Developer Conference PWA demo",
"short_name": "PWA demo",
"start_url": "index.html",
"display": "standalone",
"background_color": "#034961",
"description": "Demonstrasjon av en enkel PWA",
"icons": [
{
"src": "images/tdcdemo48.png",
"sizes": "48x48",
"type": "image/png"
},
{
"src": "images/tdcdemo192.png",
"sizes": "192x192",
"type": "image/png"
}
]
}
Service workers
 Fundamentet for mye av PWA
 En spesialisering av web workers
 Kj淡rer i bakgrunnen
 Har ikke direkte tilgang til DOM
 Bruker meldinger for 奪 kommunisere med webside
Livsl淡pet til en service worker
 Installeres ved f淡rste lasting
 Aktiv ved neste lasting
 Reinstalleres n奪r service worker script har endret seg
 Gammel versjon aktiv s奪 lenge den har 奪pne sider
Begrensninger p奪 service workers
 Kun 辿n service worker per kontekst
 M奪 serves fra rot-katalogen til det den skal kontrollere
 Kun HTTPS
 Ikke tilgang til dokument (DOM)
 Kun et subset av navigator API
Service workers som cache
 Har egen API for 奪 cache requests
 Service workers kan fange opp alle requests
 Kan svare med lagret ressurs eller annen side
 束Som en proxy-server i applikasjonen din損
Demo for offline
 Demo p奪 https://opensites.kantega.no/tdc/
 Pr淡v navigering med og uten nettkobling (束flight mode損 e.l.)
Kode for 奪 definere cache
const urlsToCache = [
"./",
"./index.html",
"./pages/offline.html",
"./pages/messages.html",
"./pages/program.html",
"./styles.css",
"./script/demo.js",
"./script/messages.js"
];
// Create cache on install
self.addEventListener("install", function(event) {
event.waitUntil(
caches.open(CACHE_NAME)
.then(function(cache) {
return cache.addAll(urlsToCache);
})
);
});
Kode for 奪 bruke cache
self.addEventListener("fetch", function(event) {
if (event.request.method !== "GET") {
return;
}
event.respondWith(
caches.match(event.request)
.then(function(response) {
if (response) {
return response;
} else {
return fetch(event.request);
}
}
)
.catch(function(error) {
return caches.match('./pages/offline.html');
})
);
});
Web Push
 Meldinger fra server til nettleser, ogs奪 n奪r side ikke er aktiv
 Mottas som event av service worker
 Hver nettleser har sin meldingsserver
 Mer komplisert enn de fleste JavaScript-APIer
Flyt for web push
Applikasjon
2
3
6
5
4
1. Nettleser f奪r servers offentlige
krypteringsn淡kkel
2. Nettleser registrerer n淡kkel hos
meldingsserver
3. Nettleser varsler
applikasjonsserver om
abonnement
4. Ny hendelse i applikasjonsserver
5. Varsel fra applikasjonsserver til
meldingsserver
6. Verifisert varsel til nettleser
1
 nei, sa han 束kryptering損?
 L脱r deg grunnprinsippene
 ... og bruk et bibliotek!
Web push og sikkerhet
 Kan du stole p奪 Google (eller Mozilla)?
 Asymmetrisk kryptering / offentlig n淡kkelkryptering brukes for 奪 bevare sikkerhet
 Meldinger signeres med applikasjonsservers n淡kkel for 奪 bekrefte opprinnelse
 Nettleser lager eget n淡kkelpar
 Meldinger krypteres med nettlesers offentlige n淡kkel s奪 den kun kan leses av
nettleser
Kode for registrering av abonnement
navigator.serviceWorker.getRegistration().then(function(serviceWorkerRegistration) {
var options = {
userVisibleOnly: true,
applicationServerKey: base64ToArrayBuffer(SERVER_PUBLIC_KEY)
};
serviceWorkerRegistration.pushManager.subscribe(options).then(function(pushSubscription) {
var params = new URLSearchParams();
params.append("endpoint", pushSubscription.endpoint);
params.append("clientKey", arrayBufferToBase64(pushSubscription.getKey("p256dh")));
params.append("sharedSecret", arrayBufferToBase64(pushSubscription.getKey("auth")));
fetch("../api/subscribe", {
method: "POST",
body: params
}).then(function(response) {
if (response.ok) {
console.log("Subscription sent to server");
}
});
});
});
Kode for 奪 sende melding til meldingsserver
private void notifyClients(String message) {
byte[] encodedMessage = message.getBytes(Charset.forName("UTF-8"));
for (Subscription subscription : SubscriptionStore.getSubscriptions()) {
Notification notification = new Notification(subscription.getEndpoint(),
subscription.getClientKey(),
subscription.getSharedSecret(),
encodedMessage);
executorService.execute(() -> {
try {
HttpResponse response = pushService.send(notification);
} catch (Exception e) {
log.warn("Notify for {} threw execption {}: {}",
subscription.getEndpoint(), e.getClass().getName(), e.getMessage());
}
});
}
}
Demo for push
 Ta opp demo p奪 https://opensites.kantega.no/tdc/ og g奪 til 束Meldinger損
 Huk av sjekkboks for 奪 starte abonnement p奪 push-meldinger
Sp淡rsm奪l?
Kode p奪 https://github.com/kantega/tdc-pwa-demo
Bonus
 Service worker gotchas
 Fetch API
 PostMessage

More Related Content

Similar to Progressive web applications i praksis (20)

PDF
Audun Ytterdal: Bruk av fri programvare hos VG Nett
Friprogsenteret
PDF
IBM Connections med sikker, moderne sky-autentisering - isbg varseminar 2016
Robert Farstad
PPTX
Distribuert utvikling p奪 net platformen
Rune Sundling
PDF
Slik kan du prototype enkelt med node red
Simen Sommerfeldt
PDF
2014-09-09 - Frokostseminar Redpill Linpro - St淡tteverkt淡y for agil drift
H奪kon Eriksen Drange
PPTX
Mellom bedriftens nettverk og skyen
MVP Dagen
PDF
Tips og triks for enklere administrasjon av ArcGIS for Server
Geodata AS
PDF
Presentasjon av Newsfront. Case study med Drupal, Angular og Solr
Frontkom
PDF
Presentation of Newsfront. Case study using Drupal, Angular and Solr
Henrik Akselsen
PDF
Dell Solutions Tour 2015 - Neste generasjons Windows Server og System Center,...
Kenneth de Brucq
PDF
IT-tjenester som str淡m i veggen
ErgoGroup
PPTX
Nokios 2012 v0.6
Anne Kristine N脱ss
PDF
Innlegg 27. oktober 2015
frankfardal
PPTX
Introduksjon til Spring Boot
Henrik Schwarz
PPTX
TYVE TING
ermi2
PPTX
10 ting
ermi2
PPTX
Kryssplatform mobilutvikling
Runegri
PDF
Dataporten for grunnoppl脱ringa - Workshop September 2017
Andreas kre Solberg
PDF
GoOpen 2010: H奪vard Haug Hanssen
Friprogsenteret
PPTX
eCampus status til IT-lederm淡tet
Ingrid Melve
Audun Ytterdal: Bruk av fri programvare hos VG Nett
Friprogsenteret
IBM Connections med sikker, moderne sky-autentisering - isbg varseminar 2016
Robert Farstad
Distribuert utvikling p奪 net platformen
Rune Sundling
Slik kan du prototype enkelt med node red
Simen Sommerfeldt
2014-09-09 - Frokostseminar Redpill Linpro - St淡tteverkt淡y for agil drift
H奪kon Eriksen Drange
Mellom bedriftens nettverk og skyen
MVP Dagen
Tips og triks for enklere administrasjon av ArcGIS for Server
Geodata AS
Presentasjon av Newsfront. Case study med Drupal, Angular og Solr
Frontkom
Presentation of Newsfront. Case study using Drupal, Angular and Solr
Henrik Akselsen
Dell Solutions Tour 2015 - Neste generasjons Windows Server og System Center,...
Kenneth de Brucq
IT-tjenester som str淡m i veggen
ErgoGroup
Nokios 2012 v0.6
Anne Kristine N脱ss
Innlegg 27. oktober 2015
frankfardal
Introduksjon til Spring Boot
Henrik Schwarz
TYVE TING
ermi2
10 ting
ermi2
Kryssplatform mobilutvikling
Runegri
Dataporten for grunnoppl脱ringa - Workshop September 2017
Andreas kre Solberg
GoOpen 2010: H奪vard Haug Hanssen
Friprogsenteret
eCampus status til IT-lederm淡tet
Ingrid Melve

Progressive web applications i praksis

  • 1. Progressive web applications i praksis Mens du venter, hvis du har du internett i lomma, g奪 til opensites.kantega.no/tdc og ha den klar til senere
  • 2. Progressive web applications i praksis Trondheim Developer Conference 2017 H奪vard Wigtil Kantega AS @havardw
  • 3. Innhold 1. Hva er progressive web applications? 2. Web app manifest 3. Service Workers 4. Offline 5. Web push
  • 4. Hva er Progressive Web Applications? Webapplikasjoner som n脱rmer seg native applikasjoner i funksjonalitet Samlebetegnelse for et sett med APIer og praksiser
  • 5. PWA sjekkliste Kj淡rer p奪 kryptert forbindelse (https) Responsivt design Virker i alle nettlesere Gir respons n奪r nettleser er offline Laste raskt ogs奪 p奪 treigt nett Web app manifest Mulighet for server push
  • 7. Caniuse? God st淡tte i Firefox, Chrome og Opera St淡tte bak konfig-flagg i Edge St淡tte p奪 vei i Safari
  • 8. Web app manifest Startpunkt for app Lar deg kj淡re fullscreen p奪 mobil Framst奪r som native app for det utrente 淡ye
  • 9. Web app manifest eksempel { "name": "Trondheim Developer Conference PWA demo", "short_name": "PWA demo", "start_url": "index.html", "display": "standalone", "background_color": "#034961", "description": "Demonstrasjon av en enkel PWA", "icons": [ { "src": "images/tdcdemo48.png", "sizes": "48x48", "type": "image/png" }, { "src": "images/tdcdemo192.png", "sizes": "192x192", "type": "image/png" } ] }
  • 10. Service workers Fundamentet for mye av PWA En spesialisering av web workers Kj淡rer i bakgrunnen Har ikke direkte tilgang til DOM Bruker meldinger for 奪 kommunisere med webside
  • 11. Livsl淡pet til en service worker Installeres ved f淡rste lasting Aktiv ved neste lasting Reinstalleres n奪r service worker script har endret seg Gammel versjon aktiv s奪 lenge den har 奪pne sider
  • 12. Begrensninger p奪 service workers Kun 辿n service worker per kontekst M奪 serves fra rot-katalogen til det den skal kontrollere Kun HTTPS Ikke tilgang til dokument (DOM) Kun et subset av navigator API
  • 13. Service workers som cache Har egen API for 奪 cache requests Service workers kan fange opp alle requests Kan svare med lagret ressurs eller annen side 束Som en proxy-server i applikasjonen din損
  • 14. Demo for offline Demo p奪 https://opensites.kantega.no/tdc/ Pr淡v navigering med og uten nettkobling (束flight mode損 e.l.)
  • 15. Kode for 奪 definere cache const urlsToCache = [ "./", "./index.html", "./pages/offline.html", "./pages/messages.html", "./pages/program.html", "./styles.css", "./script/demo.js", "./script/messages.js" ]; // Create cache on install self.addEventListener("install", function(event) { event.waitUntil( caches.open(CACHE_NAME) .then(function(cache) { return cache.addAll(urlsToCache); }) ); });
  • 16. Kode for 奪 bruke cache self.addEventListener("fetch", function(event) { if (event.request.method !== "GET") { return; } event.respondWith( caches.match(event.request) .then(function(response) { if (response) { return response; } else { return fetch(event.request); } } ) .catch(function(error) { return caches.match('./pages/offline.html'); }) ); });
  • 17. Web Push Meldinger fra server til nettleser, ogs奪 n奪r side ikke er aktiv Mottas som event av service worker Hver nettleser har sin meldingsserver Mer komplisert enn de fleste JavaScript-APIer
  • 18. Flyt for web push Applikasjon 2 3 6 5 4 1. Nettleser f奪r servers offentlige krypteringsn淡kkel 2. Nettleser registrerer n淡kkel hos meldingsserver 3. Nettleser varsler applikasjonsserver om abonnement 4. Ny hendelse i applikasjonsserver 5. Varsel fra applikasjonsserver til meldingsserver 6. Verifisert varsel til nettleser 1
  • 19. nei, sa han 束kryptering損? L脱r deg grunnprinsippene ... og bruk et bibliotek!
  • 20. Web push og sikkerhet Kan du stole p奪 Google (eller Mozilla)? Asymmetrisk kryptering / offentlig n淡kkelkryptering brukes for 奪 bevare sikkerhet Meldinger signeres med applikasjonsservers n淡kkel for 奪 bekrefte opprinnelse Nettleser lager eget n淡kkelpar Meldinger krypteres med nettlesers offentlige n淡kkel s奪 den kun kan leses av nettleser
  • 21. Kode for registrering av abonnement navigator.serviceWorker.getRegistration().then(function(serviceWorkerRegistration) { var options = { userVisibleOnly: true, applicationServerKey: base64ToArrayBuffer(SERVER_PUBLIC_KEY) }; serviceWorkerRegistration.pushManager.subscribe(options).then(function(pushSubscription) { var params = new URLSearchParams(); params.append("endpoint", pushSubscription.endpoint); params.append("clientKey", arrayBufferToBase64(pushSubscription.getKey("p256dh"))); params.append("sharedSecret", arrayBufferToBase64(pushSubscription.getKey("auth"))); fetch("../api/subscribe", { method: "POST", body: params }).then(function(response) { if (response.ok) { console.log("Subscription sent to server"); } }); }); });
  • 22. Kode for 奪 sende melding til meldingsserver private void notifyClients(String message) { byte[] encodedMessage = message.getBytes(Charset.forName("UTF-8")); for (Subscription subscription : SubscriptionStore.getSubscriptions()) { Notification notification = new Notification(subscription.getEndpoint(), subscription.getClientKey(), subscription.getSharedSecret(), encodedMessage); executorService.execute(() -> { try { HttpResponse response = pushService.send(notification); } catch (Exception e) { log.warn("Notify for {} threw execption {}: {}", subscription.getEndpoint(), e.getClass().getName(), e.getMessage()); } }); } }
  • 23. Demo for push Ta opp demo p奪 https://opensites.kantega.no/tdc/ og g奪 til 束Meldinger損 Huk av sjekkboks for 奪 starte abonnement p奪 push-meldinger
  • 25. Bonus Service worker gotchas Fetch API PostMessage