Top Banner
Chris Wilson @cwilso Google Progressive Web Apps
91

Chris Wilson: Progressive Web Apps

Apr 11, 2017

Download

Technology

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Chris Wilson: Progressive Web Apps

Chris Wilson@cwilso

Google

Progressive Web Apps

Page 2: Chris Wilson: Progressive Web Apps
Page 3: Chris Wilson: Progressive Web Apps
Page 4: Chris Wilson: Progressive Web Apps
Page 5: Chris Wilson: Progressive Web Apps
Page 6: Chris Wilson: Progressive Web Apps

vs.

Source: comScore Mobile Metrix, U.S., Age 18+, June 2015

13% 87%

Mobile web Apps

Page 7: Chris Wilson: Progressive Web Apps

80%OF TIME SPENT IS IN USERS’ TOP 3 APPS

Source: comScore Mobile Metrix, U.S., Age 18+, June 2015

Page 8: Chris Wilson: Progressive Web Apps

ZERONUMBER OF APPS

AVERAGE USER INSTALLS PER MONTH

Source: comScore Mobile Metrix, U.S., Age 18+, June 2015

Page 9: Chris Wilson: Progressive Web Apps

Capa

bilit

y

Reach

Page 10: Chris Wilson: Progressive Web Apps

Capa

bilit

y

Reach

Page 11: Chris Wilson: Progressive Web Apps

Capa

bilit

y

Reach

Page 12: Chris Wilson: Progressive Web Apps

are (a new level of) caring about the quality of your user experience

Progressive Web Apps

Page 13: Chris Wilson: Progressive Web Apps

Reliable

User experiences need to be...

Page 14: Chris Wilson: Progressive Web Apps
Page 15: Chris Wilson: Progressive Web Apps

Lie-Fi

Page 16: Chris Wilson: Progressive Web Apps

Reliability means never showing the Downasaur

Page 17: Chris Wilson: Progressive Web Apps

Reliable Fast

User experiences need to be...

Page 18: Chris Wilson: Progressive Web Apps

of users abandon sites that take longer than 3 seconds to load40%

Page 19: Chris Wilson: Progressive Web Apps

Reliable Fast Engaging

User experiences need to be...

Page 20: Chris Wilson: Progressive Web Apps

Full screen, theming,

orientation, etc.

Push notifications

Immersive Notifications

Engaging

Auto-adding to Home Screen

Home Screen

Page 21: Chris Wilson: Progressive Web Apps

https://wapo.com/pwahttps://wapo.com/pwa

Page 22: Chris Wilson: Progressive Web Apps
Page 23: Chris Wilson: Progressive Web Apps
Page 24: Chris Wilson: Progressive Web Apps
Page 25: Chris Wilson: Progressive Web Apps
Page 26: Chris Wilson: Progressive Web Apps
Page 27: Chris Wilson: Progressive Web Apps
Page 29: Chris Wilson: Progressive Web Apps

Reliable Fast Engaging

Progressive Web Apps are…

Page 30: Chris Wilson: Progressive Web Apps

How do you get started?

Page 31: Chris Wilson: Progressive Web Apps

Focus on the User

Page 32: Chris Wilson: Progressive Web Apps

Stay Secure

Page 33: Chris Wilson: Progressive Web Apps

`

HTTPS: Secure connection between site and users

Page 34: Chris Wilson: Progressive Web Apps

The Cost of HTTPS

Certificate Search Ranking

Page 35: Chris Wilson: Progressive Web Apps
Page 36: Chris Wilson: Progressive Web Apps

Let’s Encrypt is a trademark of the Internet Security Research Group.

Page 37: Chris Wilson: Progressive Web Apps

The Cost of HTTPS

Certificate Search Ranking

Page 38: Chris Wilson: Progressive Web Apps

Search Ranking Guidance

bit.ly/https-migration

Page 39: Chris Wilson: Progressive Web Apps

Build a Service Worker

Page 40: Chris Wilson: Progressive Web Apps

Web server

Page 41: Chris Wilson: Progressive Web Apps

Service worker

Client side proxy (written in JavaScript)

Cache

Web server

Page 42: Chris Wilson: Progressive Web Apps

Service Worker Life Cycle

• Adds app-like lifecycle to a page• Wakes up only when the OS says• Only responds to system events

Activated Error

Idle

Active Terminated

Install

Register

Page 43: Chris Wilson: Progressive Web Apps

Service Worker Life Cycle

• Adds app-like lifecycle to a page• Wakes up only when the OS says• Only responds to system events

Activated Error

Idle

Active Terminated

Install

Register

Page 44: Chris Wilson: Progressive Web Apps

Service Worker Life Cycle

• Adds app-like lifecycle to a page• Wakes up only when the OS says• Only responds to system events

Activated Error

Idle

Active Terminated

Install

Register

Page 45: Chris Wilson: Progressive Web Apps
Page 46: Chris Wilson: Progressive Web Apps

Service Worker Life Cycle

• Adds app-like lifecycle to a page• Wakes up only when the OS says• Only responds to system events

Activated Error

Idle

Active Terminated

Install

Register

Page 47: Chris Wilson: Progressive Web Apps

is for the SECOND load.Service Worker

Page 48: Chris Wilson: Progressive Web Apps

Implementing a simple Service Worker

Page 49: Chris Wilson: Progressive Web Apps

Register the Service Worker

if ('serviceWorker' in navigator) { navigator.serviceWorker.register('/service-worker.js') .then(function(reg) { console.log('Service Worker Registered', reg); }) .catch(function(err) { console.log('Error registering Service Worker', err); });}

Page 50: Chris Wilson: Progressive Web Apps

Register the Service Worker

if ('serviceWorker' in navigator) { navigator.serviceWorker.register('/service-worker.js') .then(function(reg) { console.log('Service Worker Registered', reg); }) .catch(function(err) { console.log('Error registering Service Worker', err); });}

Page 51: Chris Wilson: Progressive Web Apps

Activated Error

Idle

Active Terminated

Install

Register

Pre-fetch the App Resources

Page 52: Chris Wilson: Progressive Web Apps

Pre-fetch the App Resourcesvar cacheName = 'app-shell-cache-v1';var filesToCache = ['/', '/index.html', ...];

self.addEventListener('install', function(event) { event.waitUntil( caches.open(cacheName).then(function(cache) { return cache.addAll(filesToCache); }).then(function() { return self.skipWaiting(); }) );});

Page 53: Chris Wilson: Progressive Web Apps

Pre-fetch the App Resourcesvar cacheName = 'app-shell-cache-v1';var filesToCache = ['/', '/index.html', ...];

self.addEventListener('install', function(event) { event.waitUntil( caches.open(cacheName).then(function(cache) { return cache.addAll(filesToCache); }).then(function() { return self.skipWaiting(); }) );});

Page 54: Chris Wilson: Progressive Web Apps

Activated Error

Idle

Active Terminated

Install

Register

Not Done Yet...

Page 55: Chris Wilson: Progressive Web Apps
Page 56: Chris Wilson: Progressive Web Apps

Add a fetch Event Handler

self.addEventListener('fetch', function(e) { e.respondWith( caches.match(e.request).then(function(response) { return response || fetch(e.request); }) );});

Page 57: Chris Wilson: Progressive Web Apps

Add a fetch Event Handler

self.addEventListener('fetch', function(e) { e.respondWith( caches.match(e.request).then(function(response) { return response || fetch(e.request); }) );});

Page 58: Chris Wilson: Progressive Web Apps

Add a fetch Event Handler

self.addEventListener('fetch', function(e) { e.respondWith( caches.match(e.request).then(function(response) { return response || fetch(e.request); }) );});

Page 59: Chris Wilson: Progressive Web Apps

Add a fetch Event Handler

self.addEventListener('fetch', function(e) { e.respondWith( caches.match(e.request).then(function(response) { return response || fetch(e.request); }) );});

Page 60: Chris Wilson: Progressive Web Apps

Activated Error

Idle

Active Terminated

Install

Register

Ready to Go!

Page 61: Chris Wilson: Progressive Web Apps

controlYOU ARE IN

Page 62: Chris Wilson: Progressive Web Apps

Caching strategies galore!

Page 63: Chris Wilson: Progressive Web Apps

Engage Your Users

Page 64: Chris Wilson: Progressive Web Apps

Add to Home Screen

Page 65: Chris Wilson: Progressive Web Apps

Add To Home ScreenWas Broken

Page 66: Chris Wilson: Progressive Web Apps

Add To Home ScreenWas Broken

Required user interaction Buried deep in menus

Page 67: Chris Wilson: Progressive Web Apps

Add To Home ScreenWas Broken

Required user interaction Buried deep in menus

Where would it start?Dependent on bookmark

Page 68: Chris Wilson: Progressive Web Apps

Add To Home ScreenWas Broken

Required user interaction Buried deep in menus

Where would it start?Dependent on bookmark

Would it work offline?Users didn't expect offline

Page 69: Chris Wilson: Progressive Web Apps

Add To Home ScreenWas Broken

Page 70: Chris Wilson: Progressive Web Apps

<link rel="manifest" href="/manifest.json">{ "name": "The Washington Post", "short_name": "Wash Post", "icons": [{ "src": "icon-48x48.png", "sizes": "48x48", "type": "image/png" }, {...}], "start_url": "/index.html", "display": "standalone", "orientation": "portrait", "background_color": "#000000", "theme_color": "#000000"}

Page 71: Chris Wilson: Progressive Web Apps

manifest.json{ "name": "The Washington Post", "short_name": "Wash Post", "icons": [{ "src": "icon-48x48.png", "sizes": "48x48", "type": "image/png" }, {...}], "start_url": "/index.html", "display": "standalone", "orientation": "portrait", "background_color": "#000000", "theme_color": "#000000"}

Page 72: Chris Wilson: Progressive Web Apps

manifest.json{ "name": "The Washington Post", "short_name": "Wash Post", "icons": [{ "src": "icon-48x48.png", "sizes": "48x48", "type": "image/png" }, {...}], "start_url": "/index.html", "display": "standalone", "orientation": "portrait", "background_color": "#000000", "theme_color": "#000000"}

Page 73: Chris Wilson: Progressive Web Apps

manifest.json{ "name": "The Washington Post", "short_name": "Wash Post", "icons": [{ "src": "icon-48x48.png", "sizes": "48x48", "type": "image/png" }, {...}], "start_url": "/index.html", "display": "standalone", "orientation": "portrait", "background_color": "#000000", "theme_color": "#000000"}

Page 74: Chris Wilson: Progressive Web Apps

manifest.json{ "name": "The Washington Post", "short_name": "Wash Post", "icons": [{ "src": "icon-48x48.png", "sizes": "48x48", "type": "image/png" }, {...}], "start_url": "/index.html", "display": "standalone", "orientation": "portrait", "background_color": "#000000", "theme_color": "#000000"}

Page 75: Chris Wilson: Progressive Web Apps

`

Good, but what about prompt to

install?

Page 76: Chris Wilson: Progressive Web Apps

A Promise to the User

Consistent Experience

Works Offline

The User is Engaged

Page 77: Chris Wilson: Progressive Web Apps

`

Web Push Notifications

Page 78: Chris Wilson: Progressive Web Apps

`

Web Push Notifications

The browser doesn’t need to be open!

Page 79: Chris Wilson: Progressive Web Apps

`

Page 80: Chris Wilson: Progressive Web Apps

`

38% open rate

9xmore conversions on

previously abandoned carts

Page 81: Chris Wilson: Progressive Web Apps

Built on Service Workers

example.com

/* ServiceWorker.js */

onfetch = function(e) { if(e.request.url == "app.html") { e.respondWith( caches.match(e.request) ); }

if(e.request.url == "content.json") { // go to the network for updates, // meanwhile, use cached content fetch(...).then(function(r) { r.asJSON().then(function(json) { e.client.postMessage(json); }); }); }};

GET /content.json HTTP/1.1HOST example.com

GET /content.json HTTP/1.1HOST example.com

GET /app.html HTTP/1.1HOST example.com

Page 82: Chris Wilson: Progressive Web Apps

Built on Service Workers

/* ServiceWorker.js */

onpush = function(event) { var data = event.data.json(); var t = data.title; var opt = { body: data.body, icon: data.icon, tag: data.tag }; self.registration .showNotification(t, opt);};

End Point

example.com

Page 83: Chris Wilson: Progressive Web Apps

Stay Secure

Page 84: Chris Wilson: Progressive Web Apps

Use a Service Worker

Page 85: Chris Wilson: Progressive Web Apps

Engage Your Users

Page 86: Chris Wilson: Progressive Web Apps

`

Page 87: Chris Wilson: Progressive Web Apps

`

2x more

page views

74% increase in time spent

Page 88: Chris Wilson: Progressive Web Apps

`

2x more

page views

74% increase in time spent

82% more conversions on iOS

Page 89: Chris Wilson: Progressive Web Apps

is progressive.Progressive Web App

Page 90: Chris Wilson: Progressive Web Apps

not the tech.Focus on the user

Page 91: Chris Wilson: Progressive Web Apps

Go build!

meow