Progressive Web Apps
Ryan Hayes
TriJS
6/13/2017
Make an app checklist
- Buy a Mac (ok, fine, or rent one in the cloud)
- Get an Apple Developer License
- Get an Android/Google Play Developer License
- Get a Windows Store Developer License
- Write your Apple App
- Write your Android App
- React Native? Your existing stuff React/Redux?
- Xamarin?
- NativeScript?
- Cordova?
Why a web app?
- Hardware acceleration and GPU access
- It's the tech stack your team knows
- Likely already an investment/snowball
- Install base
- Wide range of devices
- Web Standars feature rate
- Browsers are Evergreen*
Graceful
Degradation
vs
Progressive Enhancement
Progressive
Web ==> Apps
App-like Web Features
- Location
- Camera/Audio
- Push Notifications
- Bluetooth, Motion, Vibration
- Payments
- Battery and Wifi
- Offline capabilities
- More...
3 PWA Requirements
- Service Workers
- Manifest
- HTTPS
Service Workers
- Evolution of AppCache Manifest
- Event-Driven worker .JS file
- Registered against origin and path
- Controls web site/page by intercepting and modifying network requests
- Runs in a worker context (separate thread)
- Can't use syncronous APIs (XHR, localStorage, etc)
Register a Service Worker
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('/sw-test/sw.js', {scope: '/sw-test/'})
.then(function(reg) {
// registration worked
console.log('Registration succeeded. Scope is ' + reg.scope);
}).catch(function(error) {
// registration failed
console.log('Registration failed with ' + error);
});
}
The Service Worker will intercept requests under scope only
<link rel="manifest" href="/manifest.json">
{
"name": "HackerWeb",
"short_name": "HackerWeb",
"start_url": ".",
"display": "standalone",
"background_color": "#fff",
"description": "A simply readable Hacker News app.",
"icons": [{
"src": "images/touch/homescreen48.png",
"sizes": "48x48",
"type": "image/png"
}, {
"src": "images/touch/homescreen72.png",
"sizes": "72x72",
"type": "image/png"
}, {
"src": "images/touch/homescreen96.png",
"sizes": "96x96",
"type": "image/png"
}, {
"src": "images/touch/homescreen144.png",
"sizes": "144x144",
"type": "image/png"
}, {
"src": "images/touch/homescreen168.png",
"sizes": "168x168",
"type": "image/png"
}, {
"src": "images/touch/homescreen192.png",
"sizes": "192x192",
"type": "image/png"
}],
"related_applications": [{
"platform": "web"
}, {
"platform": "play",
"url": "https://play.google.com/store/apps/details?id=cheeaun.hackerweb"
}]
}
PWA App-like Features
- Granular Offline Capabilities and Control
- Unified App Manifest
- Unified Icons and chrome
- Installable (as opposed to pinnable)
Let's look at some PWAs!
Questions?
Ask!
@RyannosaurusRex on Twitter, Insta
https://ryanhayes.net
slides.com/ryanhayes