Slide 1

Slide 1 text

PWA Update 2019 Modern Web APIs for even better Progressive Web Apps Christian Liebel @christianliebel Consultant

Slide 2

Slide 2 text

Hello, it’s me. Christian Liebel Follow me: @christianliebel Email: christian.liebel @thinktecture.com Cross-Platform Development & Serverless Cloud Architectures Modern Web APIs for even better Progressive Web Apps PWA Update 2019

Slide 3

Slide 3 text

PWA Update 2019 Modern Web APIs for even better Progressive Web Apps Responsive Linkable Discoverable Installable App-like Connectivity Independent Fresh Safe Re-engageable Progressive

Slide 4

Slide 4 text

PWA Update 2019 Modern Web APIs for even better Progressive Web Apps WebXR WebAuthn Payment Request API Badging API Wake Lock API Shape Detection API Async Clipboard API Native File System API

Slide 5

Slide 5 text

PWA Update 2019 Modern Web APIs for even better Progressive Web Apps WebXR WebAuthn Payment Request API Badging API Wake Lock API Shape Detection API Async Clipboard API Native File System API

Slide 6

Slide 6 text

PWA Update 2019 Modern Web APIs for even better Progressive Web Apps Reality–Virtuality Continuum (Milgram et al. 1994) Reality Virtuality Augmented Reality Augmented Virtuality.. HoloLens HTC Vive Mixed Reality ARKit Cardboard

Slide 7

Slide 7 text

API if ('xr' in navigator) { const supported = await navigator.xr.isSessionSupported('immersive-vr'); if (supported) { const session = navigator.xr.requestSession('immersive-vr'); const canvas = document.createElement('canvas'); const gl = canvas.getContext('webgl', { xrCompatible: true }); session.updateRenderState({ baseLayer: new XRWebGLLayer(session, gl) }); const refSpace = await session.requestReferenceSpace('local'); session.requestAnimationFrame(onXRFrame); } } PWA Update 2019 Modern Web APIs for even better Progressive Web Apps WebXR

Slide 8

Slide 8 text

https://liebel.io/webxr PWA Update 2019 Modern Web APIs for even better Progressive Web Apps WebXR DEMO Cardboard Asset: Apache 2.0, © Google 2017, https://github.com/immersive-web/webxr-polyfill/blob/master/build/webxr-polyfill.js#L4291

Slide 9

Slide 9 text

PWA Update 2019 Modern Web APIs for even better Progressive Web Apps WebXR WebAuthn Payment Request API Badging API Wake Lock API Shape Detection API Async Clipboard API Native File System API

Slide 10

Slide 10 text

Motivation - Cooperation with FIDO alliance - W3C Recommendation (official standard) - Alternative, passwordless authentication method - Authentication via internal authenticator (e.g. Touch ID, Win Hello) - Ideally backed by internal hardware module (TPM) - Scoped per origin - Eliminates password theft, phishing and replay attacks - User-friendly PWA Update 2019 Modern Web APIs for even better Progressive Web Apps WebAuthn

Slide 11

Slide 11 text

API if ('PublicKeyCredential' in window) { const credential = await navigator.credentials.create({ publicKey }); // OR const credential = await navigator.credentials.get({ publicKey }); } PWA Update 2019 Modern Web APIs for even better Progressive Web Apps WebAuthn

Slide 12

Slide 12 text

https://webauthn.io PWA Update 2019 Modern Web APIs for even better Progressive Web Apps WebAuthn DEMO

Slide 13

Slide 13 text

PWA Update 2019 Modern Web APIs for even better Progressive Web Apps WebXR WebAuthn Payment Request API Badging API Wake Lock API Shape Detection API Async Clipboard API Native File System API

Slide 14

Slide 14 text

Traditional checkout forms are… PWA Update 2019 Modern Web APIs for even better Progressive Web Apps Payment Request API repetitive tedious (sometimes) not touch-friendly

Slide 15

Slide 15 text

API if ('PaymentRequest' in window) { const request = new PaymentRequest(methodData, details, options); // Configure request } PWA Update 2019 Modern Web APIs for even better Progressive Web Apps Payment Request API

Slide 16

Slide 16 text

UI PWA Update 2019 Modern Web APIs for even better Progressive Web Apps Payment Request API

Slide 17

Slide 17 text

https://pwapraxis.liebel.io PWA Update 2019 Modern Web APIs for even better Progressive Web Apps Payment Request API DEMO

Slide 18

Slide 18 text

Next Steps Payment Request Handler API is in the works Goal: Progressive Web Apps can register as a payment handler Extension point for third-party payment service providers PWA Update 2019 Modern Web APIs for even better Progressive Web Apps Payment Request API

Slide 19

Slide 19 text

PWA Update 2019 Modern Web APIs for even better Progressive Web Apps WebXR WebAuthn Payment Request API Badging API Wake Lock API Shape Detection API Async Clipboard API Native File System API

Slide 20

Slide 20 text

PWA Update 2019 Modern Web APIs for even better Progressive Web Apps

Slide 21

Slide 21 text

Cross-Vendor Initiative Led By… PWA Update 2019 Modern Web APIs for even better Progressive Web Apps Project Fugu – A More Capable Web »Let’s bring the web back – API by API« Thomas Steiner, Google

Slide 22

Slide 22 text

PWA Update 2019 Modern Web APIs for even better Progressive Web Apps Project Fugu https://goo.gle/fugu-api-tracker

Slide 23

Slide 23 text

PWA Update 2019 Modern Web APIs for even better Progressive Web Apps Project Fugu navigator.share({ url: 'http://example.com' }); ShareIntent DataTransferManager … NSSharingServicePicker

Slide 24

Slide 24 text

Motivation - Communicate updates without distracting the user (in constrast to push notifications) - Typically displays a badge on the home screen, task bar or dock - Appearance varies from platform to platform PWA Update 2019 Modern Web APIs for even better Progressive Web Apps Badging API

Slide 25

Slide 25 text

API Set the badge navigator.setAppBadge(5); Clear the badge navigator.clearAppBadge(); PWA Update 2019 Modern Web APIs for even better Progressive Web Apps Badging API

Slide 26

Slide 26 text

Demo • Install (link: http://Airhorner.com) Airhorner.com (Windows / macOS, not Android). • Paste this code in the @ChromeDevTools console: ``` let c = 0; const h = document.querySelector('.horn'); h.addEventListener('click', _ => { navigator.setExperimentalAppBadge(++c); }); ``` • Honk. • T̶h̶a̶n̶k̶ Hate me. PWA Update 2019 Modern Web APIs for even better Progressive Web Apps Badging API 9 DEMO https://twitter.com/tomayac/status/1114131251181555714

Slide 27

Slide 27 text

PWA Update 2019 Modern Web APIs for even better Progressive Web Apps WebXR WebAuthn Payment Request API Badging API Wake Lock API Shape Detection API Async Clipboard API Native File System API

Slide 28

Slide 28 text

Motivation - Devices can go to sleep in order to reduce energy consumption - Different types of sleep: - Turn off the display (screen sleep) - Turn off the CPU (system sleep) - However, this can get bothersome in some situations (e.g. while watching a movie etc.) - The Wake Lock API prevents the device from going to sleep for a given period of time PWA Update 2019 Modern Web APIs for even better Progressive Web Apps Wake Lock API

Slide 29

Slide 29 text

API let wakeLock = null; if ('wakeLock' in navigator) { try { wakeLock = await navigator.wakeLock.request('screen'); console.log('Wake lock active'); } catch (err) { console.error(`${err.name}, ${err.message}`); } } PWA Update 2019 Modern Web APIs for even better Progressive Web Apps Wake Lock API

Slide 30

Slide 30 text

PWA Update 2019 Modern Web APIs for even better Progressive Web Apps WebXR WebAuthn Payment Request API Badging API Wake Lock API Shape Detection API Async Clipboard API Native File System API

Slide 31

Slide 31 text

Faces Barcodes Text Use Cases PWA Update 2019 Modern Web APIs for even better Progressive Web Apps Shape Detection API

Slide 32

Slide 32 text

Face Detection API if ('FaceDetector' in window) { const img = document.querySelector('img'); const faceDetector = new FaceDetector(); const faces = await faceDetector.detect(img) faces.forEach(face => { console.log('Face found!', face.boundingBox); }); } PWA Update 2019 Modern Web APIs for even better Progressive Web Apps Shape Detection API

Slide 33

Slide 33 text

https://liebel.io/facedet PWA Update 2019 Modern Web APIs for even better Progressive Web Apps Shape Detection API DEMO

Slide 34

Slide 34 text

Related: WebML Machine Learning for the Web (WebML) Goal: Low-level Web API for machine learning (Web Neural Network API) Microsoft, Google, Apple, Mozilla on board PWA Update 2019 Modern Web APIs for even better Progressive Web Apps Shape Detection API

Slide 35

Slide 35 text

PWA Update 2019 Modern Web APIs for even better Progressive Web Apps WebXR WebAuthn Payment Request API Badging API Wake Lock API Shape Detection API Async Clipboard API Native File System API

Slide 36

Slide 36 text

API Copy Content await navigator.clipboard.writeText('foo'); await navigator.clipboard.write(/* data */); Paste Content const content = await navigator.clipboard.readText(); const content = await navigator.clipboard.read(); PWA Update 2019 Modern Web APIs for even better Progressive Web Apps Async Clipboard API

Slide 37

Slide 37 text

PWA Update 2019 Modern Web APIs for even better Progressive Web Apps WebXR WebAuthn Payment Request API Badging API Wake Lock API Shape Detection API Async Clipboard API Native File System API

Slide 38

Slide 38 text

Motivation - Currently, websites only have very limited access to the file system - Some applications heavily rely on working with files (e.g. Visual Studio Code) - Wouldn’t it be great if your web application could open files or folders from the native file system? PWA Update 2019 Modern Web APIs for even better Progressive Web Apps Native File System API

Slide 39

Slide 39 text

API (may change!) if ('chooseFileSystemEntries' in window) { const handle = await window.chooseFileSystemEntries(); const file = await handle.getFile(); // do something with the file } else { // use fallback API or disable feature in app } PWA Update 2019 Modern Web APIs for even better Progressive Web Apps Native File System API

Slide 40

Slide 40 text

API (may change!) const handle = await self.chooseFileSystemEntries({ type: 'openFile', multiple: false, readOnly: false, accepts: [{ description: 'Images', extensions: ['jpg', 'gif', 'png'] }] }); PWA Update 2019 Modern Web APIs for even better Progressive Web Apps Native File System API

Slide 41

Slide 41 text

https://liebel.io/paint DEMO PWA Update 2019 Modern Web APIs for even better Progressive Web Apps Async Clipboard & NativeFS

Slide 42

Slide 42 text

PWA Update 2019 Modern Web APIs for even better Progressive Web Apps Where’s the Web Heading to?

Slide 43

Slide 43 text

- Web is getting more and more capable - The Web is establishing itself as an application platform - But: Web is threatened by alternative approaches and platforms, support for modern Web API varies from platform to platform - You can make a difference! - File bugs in browser engine bugtrackers - File Fugu requests: http://bit.ly/new-fugu-request PWA Update 2019 Modern Web APIs for even better Progressive Web Apps What’s in for Progressive Web Apps?

Slide 44

Slide 44 text

Thank you for your kind attention! Christian Liebel @christianliebel [email protected]