29
* Progressive Web Apps

* Progressive Web Apps - inovex · * Progressive Web Apps. Tim Web & Android Dev @ inovex Jonas Web & .NET Dev @ inovex Amsterdam, 2016 Just a week ago. PWATF? Progressive (Enhancement)

  • Upload
    others

  • View
    20

  • Download
    0

Embed Size (px)

Citation preview

Page 1: * Progressive Web Apps - inovex · * Progressive Web Apps. Tim Web & Android Dev @ inovex Jonas Web & .NET Dev @ inovex Amsterdam, 2016 Just a week ago. PWATF? Progressive (Enhancement)

* Progressive Web Apps

Page 2: * Progressive Web Apps - inovex · * Progressive Web Apps. Tim Web & Android Dev @ inovex Jonas Web & .NET Dev @ inovex Amsterdam, 2016 Just a week ago. PWATF? Progressive (Enhancement)

TimWeb & Android Dev @ inovex

JonasWeb & .NET Dev @ inovex

Amsterdam, 2016Just a week ago

Page 3: * Progressive Web Apps - inovex · * Progressive Web Apps. Tim Web & Android Dev @ inovex Jonas Web & .NET Dev @ inovex Amsterdam, 2016 Just a week ago. PWATF? Progressive (Enhancement)

PWATF?

Progressive (Enhancement)Responsive

Connectivity independentApp-like

Fresh (up-to-date)Secure (HTTPS)

Discoverable (Search-Engines)Installable

Linkable (Shareable)

https://goo.gl/GxtUkp

Page 4: * Progressive Web Apps - inovex · * Progressive Web Apps. Tim Web & Android Dev @ inovex Jonas Web & .NET Dev @ inovex Amsterdam, 2016 Just a week ago. PWATF? Progressive (Enhancement)
Page 5: * Progressive Web Apps - inovex · * Progressive Web Apps. Tim Web & Android Dev @ inovex Jonas Web & .NET Dev @ inovex Amsterdam, 2016 Just a week ago. PWATF? Progressive (Enhancement)

"The 3 pillars of the web are HTML, CSS & JavaScript. You can't expect to yank one out and have it still working."

- Nolan Lawson, Fronteers 2016

https://goo.gl/faHjtM

Page 6: * Progressive Web Apps - inovex · * Progressive Web Apps. Tim Web & Android Dev @ inovex Jonas Web & .NET Dev @ inovex Amsterdam, 2016 Just a week ago. PWATF? Progressive (Enhancement)

The Manifest

Page 7: * Progressive Web Apps - inovex · * Progressive Web Apps. Tim Web & Android Dev @ inovex Jonas Web & .NET Dev @ inovex Amsterdam, 2016 Just a week ago. PWATF? Progressive (Enhancement)

<link rel="manifest" href="/manifest.json">

{ "name": "DevFest Hamburg", "short_name": "DevFest", "icons": [ … ], "display": "standalone", "start_url": "/?utm_source=manifest", "theme_color": "#FF00FF", "background_color": "#FFFFFF" …}

Page 8: * Progressive Web Apps - inovex · * Progressive Web Apps. Tim Web & Android Dev @ inovex Jonas Web & .NET Dev @ inovex Amsterdam, 2016 Just a week ago. PWATF? Progressive (Enhancement)
Page 9: * Progressive Web Apps - inovex · * Progressive Web Apps. Tim Web & Android Dev @ inovex Jonas Web & .NET Dev @ inovex Amsterdam, 2016 Just a week ago. PWATF? Progressive (Enhancement)

All praise the

Service Workerand Jake Archibald (@jaffathecake)

Page 10: * Progressive Web Apps - inovex · * Progressive Web Apps. Tim Web & Android Dev @ inovex Jonas Web & .NET Dev @ inovex Amsterdam, 2016 Just a week ago. PWATF? Progressive (Enhancement)

Fetch

Push

Sync

Page 11: * Progressive Web Apps - inovex · * Progressive Web Apps. Tim Web & Android Dev @ inovex Jonas Web & .NET Dev @ inovex Amsterdam, 2016 Just a week ago. PWATF? Progressive (Enhancement)

Installing

Waiting

Activating

Activated

navigator.serviceWorker.register('/sw.js')

sw.js

self.addEventListener('install', (ev) => { const wait = caches.open('v1').then(cache => { return cache.addAll([ 'app.min.js', 'app.min.css', // ... ]); }); ev.waitUntil(wait);});

Page 12: * Progressive Web Apps - inovex · * Progressive Web Apps. Tim Web & Android Dev @ inovex Jonas Web & .NET Dev @ inovex Amsterdam, 2016 Just a week ago. PWATF? Progressive (Enhancement)

Installing

Waiting

Activating

Activated

navigator.serviceWorker.register('/sw.js')

sw.js

Page 13: * Progressive Web Apps - inovex · * Progressive Web Apps. Tim Web & Android Dev @ inovex Jonas Web & .NET Dev @ inovex Amsterdam, 2016 Just a week ago. PWATF? Progressive (Enhancement)

Installing

Waiting

Activating

Activated

navigator.serviceWorker.register('/sw.js')

sw.js

self.addEventListener('activate', (ev) => { // old SW has been deleted; // this is about to take over; // clean up old caches;});

Page 14: * Progressive Web Apps - inovex · * Progressive Web Apps. Tim Web & Android Dev @ inovex Jonas Web & .NET Dev @ inovex Amsterdam, 2016 Just a week ago. PWATF? Progressive (Enhancement)

Installing

Waiting

Activating

Activated

navigator.serviceWorker.register('/sw.js')

sw.js

self.addEventListener('fetch', (ev) => { ev.respondWith( caches.match(ev.request).then(resp => {

return resp || fetch(ev.request);})

);});

Page 15: * Progressive Web Apps - inovex · * Progressive Web Apps. Tim Web & Android Dev @ inovex Jonas Web & .NET Dev @ inovex Amsterdam, 2016 Just a week ago. PWATF? Progressive (Enhancement)

GoogleChrome/sw-toolbox

toolbox.precache(['app.min.js','app.min.css']);

toolbox.router.get('/news/(.*)', toolbox.networkFirst); toolbox.cacheFirst toolbox.fastest toolbox.cacheOnly toolbox.networkOnly

importScripts('libs/sw-toolbox.js');

and more ...

Page 16: * Progressive Web Apps - inovex · * Progressive Web Apps. Tim Web & Android Dev @ inovex Jonas Web & .NET Dev @ inovex Amsterdam, 2016 Just a week ago. PWATF? Progressive (Enhancement)

GoogleChrome/sw-precache

require('sw-precache').write('sw.js', {

staticFileGlobs: ['build/**/*.{js,html,css,png,jpg,svg,woff}'],

stripPrefix: 'build'

});

Page 17: * Progressive Web Apps - inovex · * Progressive Web Apps. Tim Web & Android Dev @ inovex Jonas Web & .NET Dev @ inovex Amsterdam, 2016 Just a week ago. PWATF? Progressive (Enhancement)

Demo Time

Page 18: * Progressive Web Apps - inovex · * Progressive Web Apps. Tim Web & Android Dev @ inovex Jonas Web & .NET Dev @ inovex Amsterdam, 2016 Just a week ago. PWATF? Progressive (Enhancement)
Page 19: * Progressive Web Apps - inovex · * Progressive Web Apps. Tim Web & Android Dev @ inovex Jonas Web & .NET Dev @ inovex Amsterdam, 2016 Just a week ago. PWATF? Progressive (Enhancement)

W3C Push API

IETF webpush-protocol

IETF webpush-encryption

IETF webpush-vapid

Web Push Standards

Page 20: * Progressive Web Apps - inovex · * Progressive Web Apps. Tim Web & Android Dev @ inovex Jonas Web & .NET Dev @ inovex Amsterdam, 2016 Just a week ago. PWATF? Progressive (Enhancement)

navigator.serviceWorker.ready.then(registration => { return registration.pushManager.subscribe({ userVisibleOnly: true });})

.then(pushSubscription => { // send pushSubscription to application server});

Push Service

Application Server

{ "endpoint": "https:// ", "keys": { "p256dh": " ", "auth": " " }}

Page 21: * Progressive Web Apps - inovex · * Progressive Web Apps. Tim Web & Android Dev @ inovex Jonas Web & .NET Dev @ inovex Amsterdam, 2016 Just a week ago. PWATF? Progressive (Enhancement)

self.addEventListener('push', ev => { new Notification(...);});

Push Service

Application Server

POST → endpoint Payload

Payload

Page 22: * Progressive Web Apps - inovex · * Progressive Web Apps. Tim Web & Android Dev @ inovex Jonas Web & .NET Dev @ inovex Amsterdam, 2016 Just a week ago. PWATF? Progressive (Enhancement)

navigator.sericeWorker.ready.then(registration => { registration.pushManager.subscribe({ applicationServerKey: });});

Push Service

Application ServerPrivate

Public

POST Header- Authorization: WebPush [@]

Page 23: * Progressive Web Apps - inovex · * Progressive Web Apps. Tim Web & Android Dev @ inovex Jonas Web & .NET Dev @ inovex Amsterdam, 2016 Just a week ago. PWATF? Progressive (Enhancement)

And since we all crypto:

web-push-libs/web-push

Page 24: * Progressive Web Apps - inovex · * Progressive Web Apps. Tim Web & Android Dev @ inovex Jonas Web & .NET Dev @ inovex Amsterdam, 2016 Just a week ago. PWATF? Progressive (Enhancement)

Demo Time

Page 25: * Progressive Web Apps - inovex · * Progressive Web Apps. Tim Web & Android Dev @ inovex Jonas Web & .NET Dev @ inovex Amsterdam, 2016 Just a week ago. PWATF? Progressive (Enhancement)

Background Sync

navigator.serviceWorker.ready.then(sw => {sw.sync.register('send-msgs');

});

self.addEventListener('sync', ev => { if (ev.tag === 'send-msgs') { const promise = sendSomeCachedData(); ev.waitUntil(promise); }});

IndexedDB

Page 26: * Progressive Web Apps - inovex · * Progressive Web Apps. Tim Web & Android Dev @ inovex Jonas Web & .NET Dev @ inovex Amsterdam, 2016 Just a week ago. PWATF? Progressive (Enhancement)

Demo TimePhoto by Frances Berriman (CC-BY-NC-ND 2.0)

Page 27: * Progressive Web Apps - inovex · * Progressive Web Apps. Tim Web & Android Dev @ inovex Jonas Web & .NET Dev @ inovex Amsterdam, 2016 Just a week ago. PWATF? Progressive (Enhancement)

27

Browser Support

Web App Manifest

Service Workers

Push API

Background Sync

*

Page 28: * Progressive Web Apps - inovex · * Progressive Web Apps. Tim Web & Android Dev @ inovex Jonas Web & .NET Dev @ inovex Amsterdam, 2016 Just a week ago. PWATF? Progressive (Enhancement)

Better Browser Support

More Sync Options

More and more APIs

The Future

Page 29: * Progressive Web Apps - inovex · * Progressive Web Apps. Tim Web & Android Dev @ inovex Jonas Web & .NET Dev @ inovex Amsterdam, 2016 Just a week ago. PWATF? Progressive (Enhancement)

</talk>

Tim & Jonas

inovex GmbH – www.inovex.de

Karlsruhe / Hamburg / München / Köln /

Pforzheim

@tim_roes – www.timroes.de

@JonasMoosmann