際際滷

際際滷Share a Scribd company logo
PWA & Angular
...e la tua SPA diventa PWA
in pochi secondi!
Francesco Sciuti
Google Certi鍖ed Developer
https://www.acadevmy.it/intro
Chi sono?
Developer per scelta e per passione,
amante di nerdaggini di ogni tipo
ed amante della condivisione del sapere!
Da non troppo anche (quasi)
imprenditore!
Francesco Sciuti
Google Certi鍖ed Developer
https://www.acadevmy.it/intro
Software & Learning Factory
Francesco Sciuti
Google Certi鍖ed Developer
https://www.acadevmy.it/intro
Learning Factory
Francesco Sciuti
Google Certi鍖ed Developer
https://www.acadevmy.it/intro
Le tecnologie che prediligiamo
Francesco Sciuti
Google Certi鍖ed Developer
https://www.acadevmy.it/intro
Francesco Sciuti
Google Certi鍖ed Developer
https://www.acadevmy.it/intro
https://www.youtube.com/c/acadevmy
Francesco Sciuti
Google Certi鍖ed Developer
https://www.acadevmy.it/intro
+
ma basta presentazioni e parliamo di...
Francesco Sciuti
Google Certi鍖ed Developer
https://www.acadevmy.it/intro
Progressive Web App
Francesco Sciuti
Google Certi鍖ed Developer
https://www.acadevmy.it/intro
Cosa sono le PWA?
Progressive Web App 竪 un termine che si riferisce ad applicazioni
web che vengono sviluppate e caricate come normali pagine web,
ma che si comportano in modo simile alle applicazioni native
quando utilizzate su un dispositivo mobile
Wikipedia
Francesco Sciuti
Google Certi鍖ed Developer
https://www.acadevmy.it/intro
Cosa sono le PWA?
Progressive Web App sono delle comuni web application che
sfruttano delle tecnologie (alcune neanche cos狸 nuove) che
consentono allutente di vivere unesperienza molto simile a quella
nativa, che sia essa mobile o desktop
Me medesimo
Ciccio Sciuti 1 - 0 Wikipedia
Ti竪! Francesco Sciuti
Google Certi鍖ed Developer
https://www.acadevmy.it/intro
 Affidabilit
Funzionano anche in caso di instabilit di rete
 Rapidit
Si caricano istantaneamente e rispondono rapidamente alle interazioni
dell'utente
 Coinvolgimento
Sembrano applicazioni native sul dispositivo e offrono un'esperienza utente
ottimale
Cosa distingue una PWA?
Francesco Sciuti
Google Certi鍖ed Developer
https://www.acadevmy.it/intro
 Progressive
Grazie al Progressive Enhancement da cui
ereditano parte del nome
 Responsive
Si adattano quindi ai dispositivi che le ospitano
 Network Independent
Possono lavorare offline!
 App-like
Possono essere esteticamente uguali alle app
native, quindi ad esempio a tutto schermo
 Continuous Update
Hanno un processo di aggiornamento molto pi湛
semplice in quanto web application
Quali caratteristiche hanno?
 Safe (HTTPS)
Viaggiano su protocollo sicuro
 Discoverable
Facilmente identi鍖cabili come applicazioni ma
rintracciabili dai motori di ricerca
 Re-engageable
Possono richiamare linteresse degli utenti
tramite le Push Noti鍖cation
 Installable
Possiamo installarle sui nostri dispositivi come
app native
 Linkable
Ci basta un url per raggiungerle
Francesco Sciuti
Google Certi鍖ed Developer
https://www.acadevmy.it/intro
 Add to Home Screen
(o A2HS perch辿 gli acronimi fanno sempre 鍖go!)
 Cache Management
 Push Noti鍖cation
 App Shell
 Devices Interaction
 Persistance
 ...
Come fanno a fare tutto ci嘆?
Francesco Sciuti
Google Certi鍖ed Developer
https://www.acadevmy.it/intro
 Web Manifest
 Service Workers
 Server Side Rendering
 Web API Push API, Noti鍖cation API, Cache API, Intersection Observer, etc...
 Client-side Storage IndexedDB
 Native App Integration Trusted Web Activities/WebAPK/APPX
 HTTPS
Con quali tecnologie?
Francesco Sciuti
Google Certi鍖ed Developer
https://www.acadevmy.it/intro
Ripassiamo rapidamente le principali...
Francesco Sciuti
Google Certi鍖ed Developer
https://www.acadevmy.it/intro
Manifest
Un semplice 鍖le JSON che consente di descrivere il
comportamento della nostra PWA
Il 鍖le manifest contiene tutte le informazioni necessarie allambiente che dovr
eseguire la nostra app, consentendo quindi allenvironment ospitante di sapere
quali sono il titolo o le icone da utilizzare per installare lapplicazione, lo scope di
esecuzione, alcuni aspetti estetici, etc...
Francesco Sciuti
Google Certi鍖ed Developer
https://www.acadevmy.it/intro
ManifestComunemente il 鍖le ha estensione .webmanifest
 Nome
 Icone
 Url di avvio
 Colore di fondo e del tema
 Modalit di visualizzazione
 Scope di esecuzione
 Orientamento
 Splash Screen
MDN Manifest Francesco Sciuti
Google Certi鍖ed Developer
https://www.acadevmy.it/intro
Service Workers
Sposando alcune API consentono di gestire funzionalit quali le noti鍖che push, la
gestione offline e la sincronizzazione in background.
Il cuore delle nostre PWA

Francesco Sciuti
Google Certi鍖ed Developer
https://www.acadevmy.it/intro
Service Workers
Sono degli script che vengono eseguiti dal browser in processi
separati rispetto alla pagina che li registra e che lavorano quindi in
background.
I SW lavorano come dei proxy ed
intercettano tutte le richieste HTTP
dellapplicazione e decidono come
rispondere secondo la logica che
svilupperemo.
Francesco Sciuti
Google Certi鍖ed Developer
https://www.acadevmy.it/intro
Service Workers
 Gestione della Cache
 Gestione Push Noti鍖cation
 Sync dei dati in background
 Lifecycle programmabile
 Processo separato e con un
proprio scope di esecuzione
MDN - Service Workers Overview
MDN - Service Workers Offline Implementation
Francesco Sciuti
Google Certi鍖ed Developer
https://www.acadevmy.it/intro
App Shell
Il minimo indispensabile per un rendering veloce
Per App Shell intendiamo tutto lHTML, CSS e JS minimo ed indispensabile utile per
essere renderizzato immediatamente dal browser in modo da offrire allutente un
immediato feedback visivo ed evitare labbandono della nostra PWA.
Francesco Sciuti
Google Certi鍖ed Developer
https://www.acadevmy.it/intro
App Shell
I Service Worker (sempre loro!)
memorizzano l'interfaccia di base (la
shell) della web application in modalit
Responsive Web Design.
Questa shell fornisce un layout statico
iniziale,nella quale il contenuto pu嘆
essere caricato sia progressivamente
che dinamicamente immediatamente.
Francesco Sciuti
Google Certi鍖ed Developer
https://www.acadevmy.it/intro
Push Noti鍖cation
Sebbene non siano ancora supportati su iOS, le nostre PWA
possono inviare noti鍖che push al browser con l'API Push.
L'API Push viene utilizzata insieme alle
Noti鍖cation API per visualizzare il
messaggio.
Il vantaggio 竪 che l'API Push consente la
consegna della noti鍖ca anche quando
l'utente non naviga sulla PWA, poich辿
sono build on top sui Service Workers. Francesco Sciuti
Google Certi鍖ed Developer
https://www.acadevmy.it/intro
Push Noti鍖cation
 Un utente visita la PWA (quindi protetta tramite HTTPS);
 Viene richiesta l'autorizzazione per visualizzare le noti鍖che push;
 Se l'utente ha concesso l'autorizzazione, il token del dispositivo (endpoint)
viene inviato al Server e archiviato;
 Il Service Worker tiene docchio la ricezione di una noti鍖ca push;
 Il Server invia una richiesta POST HTTP all'endpoint
(che 竪 un URL che contiene il token del dispositivo);
 Quando il Service Worker riceve una noti鍖ca esegue si prende carico
della gestione dell'evento, del recupero dei dati di noti鍖ca dal server e
della visualizzazione della noti鍖ca all'utente. Francesco Sciuti
Google Certi鍖ed Developer
https://www.acadevmy.it/intro
Push Noti鍖cation
Francesco Sciuti
Google Certi鍖ed Developer
https://www.acadevmy.it/intro
Push Noti鍖cation
Francesco Sciuti
Google Certi鍖ed Developer
https://www.acadevmy.it/intro
Push Noti鍖cation
Francesco Sciuti
Google Certi鍖ed Developer
https://www.acadevmy.it/intro
Web API
Gli ingredienti indispensabili per unottima ricetta
Le Web API sono ormai molteplici e supportate rapidamente da tutti i browser sul
mercato, e molte di esse sono fondamentali per creare PWA e far si che siano
appunto progressive.
Francesco Sciuti
Google Certi鍖ed Developer
https://www.acadevmy.it/intro
 Service Worker API
Utili per la gestione proxy dello stato del network e della
comunicazione server.
 Noti鍖cation/Push API
Due API usate per con鍖gurare e mostrare le noti鍖che
allutente, ed iscriversi a un servizio push e ricevere messaggi
push
 Cache API
Possiamo installarle sui nostri dispositivi come app native
 Fetch API
Un modo 鍖essibile e potente per ottenere risorse locali o
remote.
 Intersection Observer
Consente di con鍖gurare un callback che viene triggerato ogni
volta che un elemento, chiamato target, interseca il viewport
o un ulteriore elemento speci鍖cato.
Qualche API da usare
 FormData API
Fornisce un modo per costruire facilmente un insieme di
coppie chiave / valore che rappresentano i campi modulo
e i loro valori, da utilizzare con il metodo
XMLHttpRequest.send ()
 Channel Messaging API
Consente l'esecuzione di due script separati in contesti di
navigazione diversi allegati allo stesso documento.
 Background Sync
Consente di rimandare le azioni 鍖no a quando l'utente non
ha una connettivit stabile.
 Payment Request API
Standard aperto che sostituisce i 鍖ussi di pagamento
tradizionali consentendo ai commercianti di richiedere e
accettare qualsiasi pagamento in una singola chiamata
API.
 Streams API
Francesco Sciuti
Google Certi鍖ed Developer
https://www.acadevmy.it/intro
Angular
Francesco Sciuti
Google Certi鍖ed Developer
https://www.acadevmy.it/intro
Angular
One framework. Mobile & desktop.
 Cross Platform
(PWA, Native, Desktop)
 Veloce e Performante
(Code Generation, Universal, Code Splitting)
 Produttivit
(Templates, Angular CLI, IDEs)
 Pensato per la Full Dev Story
(Testing, Animation, Accessibility)
Francesco Sciuti
Google Certi鍖ed Developer
https://www.acadevmy.it/intro
Angular
 SEMPLIFICA lo sviluppo di applicazioni web dinamiche
 PRODUTTIVIT numerose funzionalit e utility incluse
 MANUTENIBILIT codice leggibile e ben organizzato
 RIDUCE i tempi di inserimento di nuovi membri in team e progetti
 EFFICIENZA, PERFORMANCE E GESTIONE MEMORIA
 ECOSISTEMA ricco di tools, librerie, componenti ready-to-use,
addons
 COMMUNITY open source, supporto/forum/articoli, 鍖x/PR
frequenti
Francesco Sciuti
Google Certi鍖ed Developer
https://www.acadevmy.it/intro
Angular
Dalla versione 5 del Framework 竪 stato
aggiunto il supporto ai Service Workers, che
hanno aperto quindi le porte alla creazione
di PWA su Angular in maniera semplice e
rapida.
Il logo 鍖go invece 竪 arrivato dopo :D
Francesco Sciuti
Google Certi鍖ed Developer
https://www.acadevmy.it/intro
Angular
Come creare una PWA
 ng new pwa-test
 ng add @angular/pwa [--project pwa-test]
Durante questo processo vengono creati e modi鍖cati alcuni 鍖les di progetto come
index.html, package.json, angular.json, ngsw-con鍖g.json, etc
(il tutto grazie a Schematics).
 ng build --prod
 http-server -p 8080 -c-1 dist/pwa-test
N.B. Il pacchetto http-server va installato separatamente con il comando:
npm install -g http-server.
 Navigare col browser su http://localhost:8080/
N.B.  consigliata la incognito mode Francesco Sciuti
Google Certi鍖ed Developer
https://www.acadevmy.it/intro
La PWA 竪 stata creata
ed ha gi tutti i requisiti
richiesti!
Per veri鍖carlo usiamo
Lighthouse
ad esempio dai Chrome Dev Tools
Angular
Francesco Sciuti
Google Certi鍖ed Developer
https://www.acadevmy.it/intro
Angular
Come con鍖gurare una PWA
La con鍖gurazione dellapplicazione PWA 竪 presente nel 鍖le di
progetto manifest.webmanifest
Il 鍖le 竪 un 鍖le manifest standard a tutti gli effetti e quindi ha tutte le chiavi utili per le PWA
La con鍖gurazione per la gestione di tutti i comportamenti dei SW
竪 presente nel 鍖le di progetto ngsw-con鍖g.json
Il 鍖le in fase di build viene poi lavorato dalla CLI per produrre i comportamenti necessari del SW.
Francesco Sciuti
Google Certi鍖ed Developer
https://www.acadevmy.it/intro
Angular
Come con鍖gurare una PWA (ngsw-con鍖g.json)
La chiave assetGroups 竪 utilizzata per
le richieste HTTP vengono memorizzate
nella cache dal SW.
 utilizzata per:
 鍖les di progetto (html, css, js)
 gli assets (come ad esempio le
immagini)
Ogni gruppo pu嘆 avere strategie di caching differenti
(prefetch | lazy).
interface AssetGroup {
name: string;
installMode?: 'prefetch' | 'lazy';
updateMode?: 'prefetch' | 'lazy';
resources: {
鍖les?: string[];
urls?: string[];
};
cacheQueryOptions?: { ignoreSearch?: boolean; };
}
Francesco Sciuti
Google Certi鍖ed Developer
https://www.acadevmy.it/intro
Angular
Come con鍖gurare una PWA (ngsw-con鍖g.json)
export interface DataGroup {
name: string;
urls: string[];
version?: number;
cacheCon鍖g: {
maxSize: number;
maxAge: string;
timeout?: string;
strategy?: 'freshness' | 'performance';
};
cacheQueryOptions?: { ignoreSearch?: boolean; };
}
La chiave dataGroups 竪 utilizzata per le
richieste HTTP che non sono sottoposte a
versione insieme all'app.
 utilizzata per:
 Chiamate API
 Risorse non versionate
Ogni gruppo pu嘆 avere strategie di caching differenti
(freshness | performance).
Per simulare la strategia staleWhileRevalidate imposta
strategy a freshness e timeout a 0u in cacheCon鍖g.
Francesco Sciuti
Google Certi鍖ed Developer
https://www.acadevmy.it/intro
Angular
Cosa viene prodotto dal processo di build
ngsw-worker.js
 il vero e proprio SW ed 竪 istanziato (su un processo separato) da Angular
per mezzo di navigation.serviceWorker.register()
N.B. Il 鍖le ngsw-worker.js sar sempre lo stesso per ogni build e rimarr quindi lo stesso 鍖no all'aggiornamento a
una nuova versione di Angular.
ngsw.json
Questo 竪 il 鍖le di con鍖gurazione che verr utilizzato dal SW.
Questo 鍖le 竪 basato sulle con鍖gurazioni indicate sul 鍖le ngsw-con鍖g.json
La versione dellapp 竪 determinata dal contenuto del 鍖le ngsw.json, che include hash per tutto il contenuto
monitorato. Se anche uno dei 鍖les memorizzati nella cache cambia, l'hash del 鍖le cambier in ngsw.json, facendo s狸
che il SW si accorga di una nuova versione disponibile. Francesco Sciuti
Google Certi鍖ed Developer
https://www.acadevmy.it/intro
Angular
Il ServiceWorkerModule
Il ServiceWorkerModule 竪 il modulo che gestisce e che ci
consente di dialogare con il SW ed offre due interessantissimi
servizi:
 SwUpdate per la gestione degli updates delle versioni
della nostra applicazione
 SwPush per la gestione delle Push Noti鍖cation
Francesco Sciuti
Google Certi鍖ed Developer
https://www.acadevmy.it/intro
Francesco Sciuti
Google Certi鍖ed Developer
https://www.acadevmy.it/intro
Analizziamo il progetto!
(in caso di allarme usare il Piano B)
Angular
Creare una App Shell
Angular consente la generazione di una App Shell per mezzo
della CLI, utile per la renderizzazione del contenuto iniziale.
 ng generate app-shell [--client-project
my-app --universal-project server-app]
 ng run my-app:app-shell:production
Francesco Sciuti
Google Certi鍖ed Developer
https://www.acadevmy.it/intro
 Il Caching dei 鍖les dellapplicazione viene valutato come una
singola unit, e difatti i 鍖les sono aggiornati tutti insieme.
Un'applicazione in esecuzione continua a essere eseguita con la stessa versione di tutti i
鍖le. Non inizia improvvisamente a ricevere 鍖le memorizzati nella cache da una versione
pi湛 recente, dato che potrebbero essere potenzialmente incompatibili.
 Quando gli utenti aggiornano l'applicazione, vedono l'ultima
versione completamente memorizzata nella cache.
Gli aggiornamenti avvengono in background, relativamente rapidamente dopo la
pubblicazione delle modi鍖che. La versione precedente dell'applicazione viene
pubblicata 鍖no a quando un aggiornamento 竪 pronto dopo essere stato installato.
Angular
Come funziona il caching del Service Worker
Francesco Sciuti
Google Certi鍖ed Developer
https://www.acadevmy.it/intro
 Ogni volta che viene distribuita una nuova build dell'app, anche
se viene aggiornato solo un singolo 鍖le, il SW tratta tale build
come una nuova versione dell'app.
 Il SW fornisce una garanzia: un'app in esecuzione continuer a
eseguire la stessa versione dell'app. Se viene aperta un'altra
istanza dell'app in una nuova tab del browser Web, verr invece
offerta la versione pi湛 recente dell'app.
Di conseguenza, quella nuova scheda pu嘆 eseguire una versione diversa dell'app
rispetto alla scheda originale.
Angular
Come funziona il caching del Service Worker
Francesco Sciuti
Google Certi鍖ed Developer
https://www.acadevmy.it/intro
 Ogni volta che l'utente ricarica l'applicazione, il SW veri鍖cher se
sul server 竪 disponibile un nuovo 鍖le ngsw.json.
La precedente e la nuova versione del 鍖le ngsw.json verranno
confrontate e il nuovo bundle verr scaricato e installato in
background.
 pertanto essenziale veri鍖care frequentemente se sul server 竪 disponibile una nuova
versione dell'applicazione.
 Se viene trovato un aggiornamento, questo viene scaricato e
memorizzato nella cache automaticamente e viene pubblicato al
successivo caricamento dell'applicazione.
Angular
Come vengono installate le versioni dellapp
Francesco Sciuti
Google Certi鍖ed Developer
https://www.acadevmy.it/intro
 Il SW viene scaricato quando l'app viene aperta per la prima
volta e quando si accede all'app dopo un periodo di inattivit.
Se il SW 竪 stato modi鍖cato, verr aggiornato in background.
  possibile ignorare il SW per alcune richieste ed 竪 sufficiente
impostare ngsw-bypass come header della richiesta o come
parametro di query.
Angular
Come funziona il caching del Service Worker
Francesco Sciuti
Google Certi鍖ed Developer
https://www.acadevmy.it/intro
Angular
Debug e Disattivazione del Service Worker
Debug
Il SW espone sotto un path virtuale le informazioni di debug
ed attualmente il path 竪 ngsw/state.
Disattivazione del SW
 possibile farlo seguendo due strategie distinte:
Fail-safe o Safety Worker
Francesco Sciuti
Google Certi鍖ed Developer
https://www.acadevmy.it/intro
Angular & Workbox
In alcune occasioni, le comunque in鍖nite
possibilit offerte dal NgSW non sono
sufficienti per le nostre esigenze e serve
qualche arma ancora pi湛 potente e
鍖essibile.
Qui entra in gioco Workbox!
The JavaScript Libraries for adding offline support to web apps
https://developers.google.com/web/tools/workbox
Francesco Sciuti
Google Certi鍖ed Developer
https://www.acadevmy.it/intro
Workbox
Integrare WB in Angular
 Creare un 鍖le manifest, icone ed aggiungere il tutto al progetto Angular
Aggiungere il manifest generato (https://app-manifest.鍖rebaseapp.com/) come asset nel 鍖le angular.json
 Aggiungere il tag link del manifest al 鍖le index.html
<link href="manifest.json" rel="manifest">
 Installare pacchetti workbox necessari da npm
npm install workbox-core workbox-precaching workbox-routing workbox-strategies
 Creare il 鍖le per il Service Worker ed utilizzare le API di Workbox per
gestire tutto ci嘆 che si desidera!
 Creare un 鍖le per la con鍖gurazione Workbox per iniettare
dinamicamente ci嘆 che si desidera mettere in cache
 Creare un 鍖le per la con鍖gurazione Webpack
 Aggiungere le chiavi script in package.json
Francesco Sciuti
Google Certi鍖ed Developer
https://www.acadevmy.it/intro
Francesco Sciuti
Google Certi鍖ed Developer
https://www.acadevmy.it/intro
Analizziamo il progetto!
(per questo non ho Piano B)
Mobile e Desktop
Le PWA offrono unesperienza native-like sia su
mobile che su desktop.
Attualmente il supporto 竪 offerto dai browser Chromium based
ma ci si sta lavorando anche da altri fronti!
Francesco Sciuti
Google Certi鍖ed Developer
https://www.acadevmy.it/intro
Mobile e Desktop
Francesco Sciuti
Google Certi鍖ed Developer
https://www.acadevmy.it/intro
Mobile e Desktop
Francesco Sciuti
Google Certi鍖ed Developer
https://www.acadevmy.it/intro
Gli store
La pubblicazione sugli store di applicazioni sono
ufficialmente supportate su
Google Play Store e Windows Store
In queste occasioni sar necessario lavorare su tecnologie
come TWA (Trusted Web Activity) o APPX
Per Apple 竪 necessario invece continuare a lavorare come avremmo fatto con unapp Cordova
con tutte le limitazioni che impone lApp Store.
Francesco Sciuti
Google Certi鍖ed Developer
https://www.acadevmy.it/intro
La compatibilit
I browser sono molto avanti nellimplementazione delle
tecnologie utili per le PWA ma ancora la compatibilit non 竪
completa (soprattutto su IOS).
 Supporto parziale alle gesture
 Supporto parziale al Manifest
 Web API disponibili
 Tags speci鍖ci per IOS
 Add to Home Screen
 Splash Screen
 Supporto alle Push Noti鍖cation
 Ciclo di Vita della PWA
 Orientation
Francesco Sciuti
Google Certi鍖ed Developer
https://www.acadevmy.it/intro
I tools
COMPAT
Francesco Sciuti
Google Certi鍖ed Developer
https://www.acadevmy.it/intro
Qualche Links
Docs
 Google Developer PWA Docs
 MDN PWA Docs
 ServiceWorkers Cookbook
 PWA Checklist
 IsServiceWorkerReady?
 IOS 13 | 12.2 | 11.3
 Vaadin Handbook
 PWA 2020 Status
Tools
 Lighthouse Report Viewer
 PWABuilder | PWA Starter Kit
 Workbox | Workbox in NG
 Web-Push | WhatWebCanDo
Case Studies
 Pinterest PWA
 Maps Go
 Tinder PWA
 Twitter Lite
Examples / Labs
 Your First PWA
 Google PWA Training
 HNPWA
Directory
 PWA Stats
 AppScope
Francesco Sciuti
https://www.acadevmy.it/intro
Francesco Sciuti
Google Certi鍖ed Developer
https://www.acadevmy.it/intro
https://www.youtube.com/c/acadevmy
Francesco Sciuti
Google Certi鍖ed Developer
https://www.acadevmy.it/intro
Grazie a tutti!
Se avete voglia di dare
unopinione, di contattarmi
o di vincere un premio
(scherzo...non c竪 alcun premio
ma faceva molto 鍖go! :D)
Francesco Sciuti
Google Certi鍖ed Developer
https://www.acadevmy.it/intro
https://bit.ly/2CVtITW

More Related Content

What's hot (20)

Html 1
Html 1Html 1
Html 1
pavishkumarsingh
Introduction to php
Introduction to phpIntroduction to php
Introduction to php
Anjan Banda
Vi Cheat Sheet v 1 00
Vi Cheat Sheet v 1 00Vi Cheat Sheet v 1 00
Vi Cheat Sheet v 1 00
Nicole Cordes
Html audio video
Html audio videoHtml audio video
Html audio video
Muhammad Ehtisham Siddiqui
PHP Tutorials
PHP TutorialsPHP Tutorials
PHP Tutorials
Yuriy Krapivko
Grep
GrepGrep
Grep
Dr.M.Karthika parthasarathy
Intro to HTML and CSS basics
Intro to HTML and CSS basicsIntro to HTML and CSS basics
Intro to HTML and CSS basics
Eliran Eliassy
Css3
Css3Css3
Css3
Deepak Mangal
27 iframe
27 iframe27 iframe
27 iframe
SatyakiDas12
Git
GitGit
Git
Shinu Suresh
Intro to Javascript
Intro to JavascriptIntro to Javascript
Intro to Javascript
Anjan Banda
Registry forensics
Registry forensicsRegistry forensics
Registry forensics
Prince Boonlia
Wireshark
WiresharkWireshark
Wireshark
ashiesh0007
Docker: automation for the rest of us
Docker: automation for the rest of usDocker: automation for the rest of us
Docker: automation for the rest of us
J辿r担me Petazzoni
Logging with log4j v1.2
Logging with log4j v1.2Logging with log4j v1.2
Logging with log4j v1.2
Kamal Mettananda
Web Development with Python and Django
Web Development with Python and DjangoWeb Development with Python and Django
Web Development with Python and Django
Michael Pirnat
Sessions and cookies in php
Sessions and cookies in phpSessions and cookies in php
Sessions and cookies in php
Pavan b
YAGNI Principle and Clean Code
YAGNI Principle and Clean CodeYAGNI Principle and Clean Code
YAGNI Principle and Clean Code
Luan Reffatti
Write microservice in golang
Write microservice in golangWrite microservice in golang
Write microservice in golang
Bo-Yi Wu
Php cookies
Php cookiesPhp cookies
Php cookies
JIGAR MAKHIJA

Similar to Creare PWA con Angular (20)

Acadevmy - PWA Overview
Acadevmy - PWA OverviewAcadevmy - PWA Overview
Acadevmy - PWA Overview
Francesco Sciuti
Acadevmy - PWA & Angular
Acadevmy - PWA & AngularAcadevmy - PWA & Angular
Acadevmy - PWA & Angular
Francesco Sciuti
Meetup Fluent Design e Progressive Web App
Meetup Fluent Design e Progressive Web AppMeetup Fluent Design e Progressive Web App
Meetup Fluent Design e Progressive Web App
dotnetcode
Meetup Progressive Web App
Meetup Progressive Web AppMeetup Progressive Web App
Meetup Progressive Web App
dotnetcode
Win02 bing e windows store apps
Win02   bing e windows store appsWin02   bing e windows store apps
Win02 bing e windows store apps
DotNetCampus
Integrazione con Visual Studio Online
Integrazione con Visual Studio OnlineIntegrazione con Visual Studio Online
Integrazione con Visual Studio Online
Davide Benvegn湛
Swagger per tutti
Swagger per tuttiSwagger per tutti
Swagger per tutti
Nicol嘆 Carandini
DotNetCampus 2014 - BING e Windows Store App
DotNetCampus 2014 - BING e Windows Store AppDotNetCampus 2014 - BING e Windows Store App
DotNetCampus 2014 - BING e Windows Store App
Massimo Bonanni
WordCamp Catania 2019 PWA e TWA
WordCamp Catania 2019 PWA e TWAWordCamp Catania 2019 PWA e TWA
WordCamp Catania 2019 PWA e TWA
FrancescoGiammanco1
Gae piattaforma su cloud
Gae piattaforma su cloudGae piattaforma su cloud
Gae piattaforma su cloud
masci
Microsoft Fast - Overview
Microsoft Fast - OverviewMicrosoft Fast - Overview
Microsoft Fast - Overview
Francesco Sciuti
Un backend per tutte le stagioni con Spring
Un backend per tutte le stagioni con SpringUn backend per tutte le stagioni con Spring
Un backend per tutte le stagioni con Spring
Marcello Teodori
際際滷 Mulesoft Meetup Milano #10.pdf
際際滷 Mulesoft Meetup Milano #10.pdf際際滷 Mulesoft Meetup Milano #10.pdf
際際滷 Mulesoft Meetup Milano #10.pdf
Florence Consulting
Come creare una PWA Progressive Web App @ Inbound Strategies 2018
Come creare una PWA Progressive Web App @ Inbound Strategies 2018Come creare una PWA Progressive Web App @ Inbound Strategies 2018
Come creare una PWA Progressive Web App @ Inbound Strategies 2018
Giovanni Sacheli
Stanco delle solite Web App? Passa al Prgressive
Stanco delle solite Web App? Passa al PrgressiveStanco delle solite Web App? Passa al Prgressive
Stanco delle solite Web App? Passa al Prgressive
Commit University
GAE python GDG Milano - L01
GAE python GDG Milano - L01GAE python GDG Milano - L01
GAE python GDG Milano - L01
Paolo Dadda
SMAU Milano 2014 GAE 24/10/2014 - IWA Italy
SMAU Milano 2014 GAE 24/10/2014 - IWA ItalySMAU Milano 2014 GAE 24/10/2014 - IWA Italy
SMAU Milano 2014 GAE 24/10/2014 - IWA Italy
Paolo Dadda
Angular js o React? Spunti e idee per la scelta di un framework
Angular js o React? Spunti e idee per la scelta di un frameworkAngular js o React? Spunti e idee per la scelta di un framework
Angular js o React? Spunti e idee per la scelta di un framework
Giovanni Buffa
WordPress REST API
WordPress REST APIWordPress REST API
WordPress REST API
Francesco Carlucci
Modi innovativi per costruire App
Modi innovativi per costruire AppModi innovativi per costruire App
Modi innovativi per costruire App
Commit University
Acadevmy - PWA Overview
Acadevmy - PWA OverviewAcadevmy - PWA Overview
Acadevmy - PWA Overview
Francesco Sciuti
Acadevmy - PWA & Angular
Acadevmy - PWA & AngularAcadevmy - PWA & Angular
Acadevmy - PWA & Angular
Francesco Sciuti
Meetup Fluent Design e Progressive Web App
Meetup Fluent Design e Progressive Web AppMeetup Fluent Design e Progressive Web App
Meetup Fluent Design e Progressive Web App
dotnetcode
Meetup Progressive Web App
Meetup Progressive Web AppMeetup Progressive Web App
Meetup Progressive Web App
dotnetcode
Win02 bing e windows store apps
Win02   bing e windows store appsWin02   bing e windows store apps
Win02 bing e windows store apps
DotNetCampus
Integrazione con Visual Studio Online
Integrazione con Visual Studio OnlineIntegrazione con Visual Studio Online
Integrazione con Visual Studio Online
Davide Benvegn湛
DotNetCampus 2014 - BING e Windows Store App
DotNetCampus 2014 - BING e Windows Store AppDotNetCampus 2014 - BING e Windows Store App
DotNetCampus 2014 - BING e Windows Store App
Massimo Bonanni
WordCamp Catania 2019 PWA e TWA
WordCamp Catania 2019 PWA e TWAWordCamp Catania 2019 PWA e TWA
WordCamp Catania 2019 PWA e TWA
FrancescoGiammanco1
Gae piattaforma su cloud
Gae piattaforma su cloudGae piattaforma su cloud
Gae piattaforma su cloud
masci
Microsoft Fast - Overview
Microsoft Fast - OverviewMicrosoft Fast - Overview
Microsoft Fast - Overview
Francesco Sciuti
Un backend per tutte le stagioni con Spring
Un backend per tutte le stagioni con SpringUn backend per tutte le stagioni con Spring
Un backend per tutte le stagioni con Spring
Marcello Teodori
際際滷 Mulesoft Meetup Milano #10.pdf
際際滷 Mulesoft Meetup Milano #10.pdf際際滷 Mulesoft Meetup Milano #10.pdf
際際滷 Mulesoft Meetup Milano #10.pdf
Florence Consulting
Come creare una PWA Progressive Web App @ Inbound Strategies 2018
Come creare una PWA Progressive Web App @ Inbound Strategies 2018Come creare una PWA Progressive Web App @ Inbound Strategies 2018
Come creare una PWA Progressive Web App @ Inbound Strategies 2018
Giovanni Sacheli
Stanco delle solite Web App? Passa al Prgressive
Stanco delle solite Web App? Passa al PrgressiveStanco delle solite Web App? Passa al Prgressive
Stanco delle solite Web App? Passa al Prgressive
Commit University
GAE python GDG Milano - L01
GAE python GDG Milano - L01GAE python GDG Milano - L01
GAE python GDG Milano - L01
Paolo Dadda
SMAU Milano 2014 GAE 24/10/2014 - IWA Italy
SMAU Milano 2014 GAE 24/10/2014 - IWA ItalySMAU Milano 2014 GAE 24/10/2014 - IWA Italy
SMAU Milano 2014 GAE 24/10/2014 - IWA Italy
Paolo Dadda
Angular js o React? Spunti e idee per la scelta di un framework
Angular js o React? Spunti e idee per la scelta di un frameworkAngular js o React? Spunti e idee per la scelta di un framework
Angular js o React? Spunti e idee per la scelta di un framework
Giovanni Buffa
Modi innovativi per costruire App
Modi innovativi per costruire AppModi innovativi per costruire App
Modi innovativi per costruire App
Commit University

More from Francesco Sciuti (9)

Siamo tutti bravi con il browser degli altri!
Siamo tutti bravi con il browser degli altri!Siamo tutti bravi con il browser degli altri!
Siamo tutti bravi con il browser degli altri!
Francesco Sciuti
Deno - L'anagramma di node
Deno - L'anagramma di nodeDeno - L'anagramma di node
Deno - L'anagramma di node
Francesco Sciuti
Acadevmy - ES6 Modern JS Today
Acadevmy - ES6 Modern JS TodayAcadevmy - ES6 Modern JS Today
Acadevmy - ES6 Modern JS Today
Francesco Sciuti
Acadevmy - Visual Studio Code Overview
Acadevmy - Visual Studio Code OverviewAcadevmy - Visual Studio Code Overview
Acadevmy - Visual Studio Code Overview
Francesco Sciuti
Acadevmy - AngularDay 2018 - Change Detection, Zone.js ed altri mostri
Acadevmy - AngularDay 2018 - Change Detection, Zone.js ed altri mostriAcadevmy - AngularDay 2018 - Change Detection, Zone.js ed altri mostri
Acadevmy - AngularDay 2018 - Change Detection, Zone.js ed altri mostri
Francesco Sciuti
Acadevmy - TypeScript Overview
Acadevmy - TypeScript OverviewAcadevmy - TypeScript Overview
Acadevmy - TypeScript Overview
Francesco Sciuti
Acadevmy - Angular Overview
Acadevmy - Angular OverviewAcadevmy - Angular Overview
Acadevmy - Angular Overview
Francesco Sciuti
Acadevmy - Google Conversation design
Acadevmy - Google Conversation designAcadevmy - Google Conversation design
Acadevmy - Google Conversation design
Francesco Sciuti
Acadevmy - GraphQL & Angular: Tutto il REST 竪 noia!
Acadevmy - GraphQL & Angular: Tutto il REST 竪 noia!Acadevmy - GraphQL & Angular: Tutto il REST 竪 noia!
Acadevmy - GraphQL & Angular: Tutto il REST 竪 noia!
Francesco Sciuti
Siamo tutti bravi con il browser degli altri!
Siamo tutti bravi con il browser degli altri!Siamo tutti bravi con il browser degli altri!
Siamo tutti bravi con il browser degli altri!
Francesco Sciuti
Deno - L'anagramma di node
Deno - L'anagramma di nodeDeno - L'anagramma di node
Deno - L'anagramma di node
Francesco Sciuti
Acadevmy - ES6 Modern JS Today
Acadevmy - ES6 Modern JS TodayAcadevmy - ES6 Modern JS Today
Acadevmy - ES6 Modern JS Today
Francesco Sciuti
Acadevmy - Visual Studio Code Overview
Acadevmy - Visual Studio Code OverviewAcadevmy - Visual Studio Code Overview
Acadevmy - Visual Studio Code Overview
Francesco Sciuti
Acadevmy - AngularDay 2018 - Change Detection, Zone.js ed altri mostri
Acadevmy - AngularDay 2018 - Change Detection, Zone.js ed altri mostriAcadevmy - AngularDay 2018 - Change Detection, Zone.js ed altri mostri
Acadevmy - AngularDay 2018 - Change Detection, Zone.js ed altri mostri
Francesco Sciuti
Acadevmy - TypeScript Overview
Acadevmy - TypeScript OverviewAcadevmy - TypeScript Overview
Acadevmy - TypeScript Overview
Francesco Sciuti
Acadevmy - Angular Overview
Acadevmy - Angular OverviewAcadevmy - Angular Overview
Acadevmy - Angular Overview
Francesco Sciuti
Acadevmy - Google Conversation design
Acadevmy - Google Conversation designAcadevmy - Google Conversation design
Acadevmy - Google Conversation design
Francesco Sciuti
Acadevmy - GraphQL & Angular: Tutto il REST 竪 noia!
Acadevmy - GraphQL & Angular: Tutto il REST 竪 noia!Acadevmy - GraphQL & Angular: Tutto il REST 竪 noia!
Acadevmy - GraphQL & Angular: Tutto il REST 竪 noia!
Francesco Sciuti

Creare PWA con Angular

  • 1. PWA & Angular ...e la tua SPA diventa PWA in pochi secondi! Francesco Sciuti Google Certi鍖ed Developer https://www.acadevmy.it/intro
  • 2. Chi sono? Developer per scelta e per passione, amante di nerdaggini di ogni tipo ed amante della condivisione del sapere! Da non troppo anche (quasi) imprenditore! Francesco Sciuti Google Certi鍖ed Developer https://www.acadevmy.it/intro
  • 3. Software & Learning Factory Francesco Sciuti Google Certi鍖ed Developer https://www.acadevmy.it/intro
  • 4. Learning Factory Francesco Sciuti Google Certi鍖ed Developer https://www.acadevmy.it/intro
  • 5. Le tecnologie che prediligiamo Francesco Sciuti Google Certi鍖ed Developer https://www.acadevmy.it/intro
  • 6. Francesco Sciuti Google Certi鍖ed Developer https://www.acadevmy.it/intro
  • 8. + ma basta presentazioni e parliamo di... Francesco Sciuti Google Certi鍖ed Developer https://www.acadevmy.it/intro
  • 9. Progressive Web App Francesco Sciuti Google Certi鍖ed Developer https://www.acadevmy.it/intro
  • 10. Cosa sono le PWA? Progressive Web App 竪 un termine che si riferisce ad applicazioni web che vengono sviluppate e caricate come normali pagine web, ma che si comportano in modo simile alle applicazioni native quando utilizzate su un dispositivo mobile Wikipedia Francesco Sciuti Google Certi鍖ed Developer https://www.acadevmy.it/intro
  • 11. Cosa sono le PWA? Progressive Web App sono delle comuni web application che sfruttano delle tecnologie (alcune neanche cos狸 nuove) che consentono allutente di vivere unesperienza molto simile a quella nativa, che sia essa mobile o desktop Me medesimo Ciccio Sciuti 1 - 0 Wikipedia Ti竪! Francesco Sciuti Google Certi鍖ed Developer https://www.acadevmy.it/intro
  • 12. Affidabilit Funzionano anche in caso di instabilit di rete Rapidit Si caricano istantaneamente e rispondono rapidamente alle interazioni dell'utente Coinvolgimento Sembrano applicazioni native sul dispositivo e offrono un'esperienza utente ottimale Cosa distingue una PWA? Francesco Sciuti Google Certi鍖ed Developer https://www.acadevmy.it/intro
  • 13. Progressive Grazie al Progressive Enhancement da cui ereditano parte del nome Responsive Si adattano quindi ai dispositivi che le ospitano Network Independent Possono lavorare offline! App-like Possono essere esteticamente uguali alle app native, quindi ad esempio a tutto schermo Continuous Update Hanno un processo di aggiornamento molto pi湛 semplice in quanto web application Quali caratteristiche hanno? Safe (HTTPS) Viaggiano su protocollo sicuro Discoverable Facilmente identi鍖cabili come applicazioni ma rintracciabili dai motori di ricerca Re-engageable Possono richiamare linteresse degli utenti tramite le Push Noti鍖cation Installable Possiamo installarle sui nostri dispositivi come app native Linkable Ci basta un url per raggiungerle Francesco Sciuti Google Certi鍖ed Developer https://www.acadevmy.it/intro
  • 14. Add to Home Screen (o A2HS perch辿 gli acronimi fanno sempre 鍖go!) Cache Management Push Noti鍖cation App Shell Devices Interaction Persistance ... Come fanno a fare tutto ci嘆? Francesco Sciuti Google Certi鍖ed Developer https://www.acadevmy.it/intro
  • 15. Web Manifest Service Workers Server Side Rendering Web API Push API, Noti鍖cation API, Cache API, Intersection Observer, etc... Client-side Storage IndexedDB Native App Integration Trusted Web Activities/WebAPK/APPX HTTPS Con quali tecnologie? Francesco Sciuti Google Certi鍖ed Developer https://www.acadevmy.it/intro
  • 16. Ripassiamo rapidamente le principali... Francesco Sciuti Google Certi鍖ed Developer https://www.acadevmy.it/intro
  • 17. Manifest Un semplice 鍖le JSON che consente di descrivere il comportamento della nostra PWA Il 鍖le manifest contiene tutte le informazioni necessarie allambiente che dovr eseguire la nostra app, consentendo quindi allenvironment ospitante di sapere quali sono il titolo o le icone da utilizzare per installare lapplicazione, lo scope di esecuzione, alcuni aspetti estetici, etc... Francesco Sciuti Google Certi鍖ed Developer https://www.acadevmy.it/intro
  • 18. ManifestComunemente il 鍖le ha estensione .webmanifest Nome Icone Url di avvio Colore di fondo e del tema Modalit di visualizzazione Scope di esecuzione Orientamento Splash Screen MDN Manifest Francesco Sciuti Google Certi鍖ed Developer https://www.acadevmy.it/intro
  • 19. Service Workers Sposando alcune API consentono di gestire funzionalit quali le noti鍖che push, la gestione offline e la sincronizzazione in background. Il cuore delle nostre PWA Francesco Sciuti Google Certi鍖ed Developer https://www.acadevmy.it/intro
  • 20. Service Workers Sono degli script che vengono eseguiti dal browser in processi separati rispetto alla pagina che li registra e che lavorano quindi in background. I SW lavorano come dei proxy ed intercettano tutte le richieste HTTP dellapplicazione e decidono come rispondere secondo la logica che svilupperemo. Francesco Sciuti Google Certi鍖ed Developer https://www.acadevmy.it/intro
  • 21. Service Workers Gestione della Cache Gestione Push Noti鍖cation Sync dei dati in background Lifecycle programmabile Processo separato e con un proprio scope di esecuzione MDN - Service Workers Overview MDN - Service Workers Offline Implementation Francesco Sciuti Google Certi鍖ed Developer https://www.acadevmy.it/intro
  • 22. App Shell Il minimo indispensabile per un rendering veloce Per App Shell intendiamo tutto lHTML, CSS e JS minimo ed indispensabile utile per essere renderizzato immediatamente dal browser in modo da offrire allutente un immediato feedback visivo ed evitare labbandono della nostra PWA. Francesco Sciuti Google Certi鍖ed Developer https://www.acadevmy.it/intro
  • 23. App Shell I Service Worker (sempre loro!) memorizzano l'interfaccia di base (la shell) della web application in modalit Responsive Web Design. Questa shell fornisce un layout statico iniziale,nella quale il contenuto pu嘆 essere caricato sia progressivamente che dinamicamente immediatamente. Francesco Sciuti Google Certi鍖ed Developer https://www.acadevmy.it/intro
  • 24. Push Noti鍖cation Sebbene non siano ancora supportati su iOS, le nostre PWA possono inviare noti鍖che push al browser con l'API Push. L'API Push viene utilizzata insieme alle Noti鍖cation API per visualizzare il messaggio. Il vantaggio 竪 che l'API Push consente la consegna della noti鍖ca anche quando l'utente non naviga sulla PWA, poich辿 sono build on top sui Service Workers. Francesco Sciuti Google Certi鍖ed Developer https://www.acadevmy.it/intro
  • 25. Push Noti鍖cation Un utente visita la PWA (quindi protetta tramite HTTPS); Viene richiesta l'autorizzazione per visualizzare le noti鍖che push; Se l'utente ha concesso l'autorizzazione, il token del dispositivo (endpoint) viene inviato al Server e archiviato; Il Service Worker tiene docchio la ricezione di una noti鍖ca push; Il Server invia una richiesta POST HTTP all'endpoint (che 竪 un URL che contiene il token del dispositivo); Quando il Service Worker riceve una noti鍖ca esegue si prende carico della gestione dell'evento, del recupero dei dati di noti鍖ca dal server e della visualizzazione della noti鍖ca all'utente. Francesco Sciuti Google Certi鍖ed Developer https://www.acadevmy.it/intro
  • 26. Push Noti鍖cation Francesco Sciuti Google Certi鍖ed Developer https://www.acadevmy.it/intro
  • 27. Push Noti鍖cation Francesco Sciuti Google Certi鍖ed Developer https://www.acadevmy.it/intro
  • 28. Push Noti鍖cation Francesco Sciuti Google Certi鍖ed Developer https://www.acadevmy.it/intro
  • 29. Web API Gli ingredienti indispensabili per unottima ricetta Le Web API sono ormai molteplici e supportate rapidamente da tutti i browser sul mercato, e molte di esse sono fondamentali per creare PWA e far si che siano appunto progressive. Francesco Sciuti Google Certi鍖ed Developer https://www.acadevmy.it/intro
  • 30. Service Worker API Utili per la gestione proxy dello stato del network e della comunicazione server. Noti鍖cation/Push API Due API usate per con鍖gurare e mostrare le noti鍖che allutente, ed iscriversi a un servizio push e ricevere messaggi push Cache API Possiamo installarle sui nostri dispositivi come app native Fetch API Un modo 鍖essibile e potente per ottenere risorse locali o remote. Intersection Observer Consente di con鍖gurare un callback che viene triggerato ogni volta che un elemento, chiamato target, interseca il viewport o un ulteriore elemento speci鍖cato. Qualche API da usare FormData API Fornisce un modo per costruire facilmente un insieme di coppie chiave / valore che rappresentano i campi modulo e i loro valori, da utilizzare con il metodo XMLHttpRequest.send () Channel Messaging API Consente l'esecuzione di due script separati in contesti di navigazione diversi allegati allo stesso documento. Background Sync Consente di rimandare le azioni 鍖no a quando l'utente non ha una connettivit stabile. Payment Request API Standard aperto che sostituisce i 鍖ussi di pagamento tradizionali consentendo ai commercianti di richiedere e accettare qualsiasi pagamento in una singola chiamata API. Streams API Francesco Sciuti Google Certi鍖ed Developer https://www.acadevmy.it/intro
  • 31. Angular Francesco Sciuti Google Certi鍖ed Developer https://www.acadevmy.it/intro
  • 32. Angular One framework. Mobile & desktop. Cross Platform (PWA, Native, Desktop) Veloce e Performante (Code Generation, Universal, Code Splitting) Produttivit (Templates, Angular CLI, IDEs) Pensato per la Full Dev Story (Testing, Animation, Accessibility) Francesco Sciuti Google Certi鍖ed Developer https://www.acadevmy.it/intro
  • 33. Angular SEMPLIFICA lo sviluppo di applicazioni web dinamiche PRODUTTIVIT numerose funzionalit e utility incluse MANUTENIBILIT codice leggibile e ben organizzato RIDUCE i tempi di inserimento di nuovi membri in team e progetti EFFICIENZA, PERFORMANCE E GESTIONE MEMORIA ECOSISTEMA ricco di tools, librerie, componenti ready-to-use, addons COMMUNITY open source, supporto/forum/articoli, 鍖x/PR frequenti Francesco Sciuti Google Certi鍖ed Developer https://www.acadevmy.it/intro
  • 34. Angular Dalla versione 5 del Framework 竪 stato aggiunto il supporto ai Service Workers, che hanno aperto quindi le porte alla creazione di PWA su Angular in maniera semplice e rapida. Il logo 鍖go invece 竪 arrivato dopo :D Francesco Sciuti Google Certi鍖ed Developer https://www.acadevmy.it/intro
  • 35. Angular Come creare una PWA ng new pwa-test ng add @angular/pwa [--project pwa-test] Durante questo processo vengono creati e modi鍖cati alcuni 鍖les di progetto come index.html, package.json, angular.json, ngsw-con鍖g.json, etc (il tutto grazie a Schematics). ng build --prod http-server -p 8080 -c-1 dist/pwa-test N.B. Il pacchetto http-server va installato separatamente con il comando: npm install -g http-server. Navigare col browser su http://localhost:8080/ N.B. consigliata la incognito mode Francesco Sciuti Google Certi鍖ed Developer https://www.acadevmy.it/intro
  • 36. La PWA 竪 stata creata ed ha gi tutti i requisiti richiesti! Per veri鍖carlo usiamo Lighthouse ad esempio dai Chrome Dev Tools Angular Francesco Sciuti Google Certi鍖ed Developer https://www.acadevmy.it/intro
  • 37. Angular Come con鍖gurare una PWA La con鍖gurazione dellapplicazione PWA 竪 presente nel 鍖le di progetto manifest.webmanifest Il 鍖le 竪 un 鍖le manifest standard a tutti gli effetti e quindi ha tutte le chiavi utili per le PWA La con鍖gurazione per la gestione di tutti i comportamenti dei SW 竪 presente nel 鍖le di progetto ngsw-con鍖g.json Il 鍖le in fase di build viene poi lavorato dalla CLI per produrre i comportamenti necessari del SW. Francesco Sciuti Google Certi鍖ed Developer https://www.acadevmy.it/intro
  • 38. Angular Come con鍖gurare una PWA (ngsw-con鍖g.json) La chiave assetGroups 竪 utilizzata per le richieste HTTP vengono memorizzate nella cache dal SW. utilizzata per: 鍖les di progetto (html, css, js) gli assets (come ad esempio le immagini) Ogni gruppo pu嘆 avere strategie di caching differenti (prefetch | lazy). interface AssetGroup { name: string; installMode?: 'prefetch' | 'lazy'; updateMode?: 'prefetch' | 'lazy'; resources: { 鍖les?: string[]; urls?: string[]; }; cacheQueryOptions?: { ignoreSearch?: boolean; }; } Francesco Sciuti Google Certi鍖ed Developer https://www.acadevmy.it/intro
  • 39. Angular Come con鍖gurare una PWA (ngsw-con鍖g.json) export interface DataGroup { name: string; urls: string[]; version?: number; cacheCon鍖g: { maxSize: number; maxAge: string; timeout?: string; strategy?: 'freshness' | 'performance'; }; cacheQueryOptions?: { ignoreSearch?: boolean; }; } La chiave dataGroups 竪 utilizzata per le richieste HTTP che non sono sottoposte a versione insieme all'app. utilizzata per: Chiamate API Risorse non versionate Ogni gruppo pu嘆 avere strategie di caching differenti (freshness | performance). Per simulare la strategia staleWhileRevalidate imposta strategy a freshness e timeout a 0u in cacheCon鍖g. Francesco Sciuti Google Certi鍖ed Developer https://www.acadevmy.it/intro
  • 40. Angular Cosa viene prodotto dal processo di build ngsw-worker.js il vero e proprio SW ed 竪 istanziato (su un processo separato) da Angular per mezzo di navigation.serviceWorker.register() N.B. Il 鍖le ngsw-worker.js sar sempre lo stesso per ogni build e rimarr quindi lo stesso 鍖no all'aggiornamento a una nuova versione di Angular. ngsw.json Questo 竪 il 鍖le di con鍖gurazione che verr utilizzato dal SW. Questo 鍖le 竪 basato sulle con鍖gurazioni indicate sul 鍖le ngsw-con鍖g.json La versione dellapp 竪 determinata dal contenuto del 鍖le ngsw.json, che include hash per tutto il contenuto monitorato. Se anche uno dei 鍖les memorizzati nella cache cambia, l'hash del 鍖le cambier in ngsw.json, facendo s狸 che il SW si accorga di una nuova versione disponibile. Francesco Sciuti Google Certi鍖ed Developer https://www.acadevmy.it/intro
  • 41. Angular Il ServiceWorkerModule Il ServiceWorkerModule 竪 il modulo che gestisce e che ci consente di dialogare con il SW ed offre due interessantissimi servizi: SwUpdate per la gestione degli updates delle versioni della nostra applicazione SwPush per la gestione delle Push Noti鍖cation Francesco Sciuti Google Certi鍖ed Developer https://www.acadevmy.it/intro
  • 42. Francesco Sciuti Google Certi鍖ed Developer https://www.acadevmy.it/intro Analizziamo il progetto! (in caso di allarme usare il Piano B)
  • 43. Angular Creare una App Shell Angular consente la generazione di una App Shell per mezzo della CLI, utile per la renderizzazione del contenuto iniziale. ng generate app-shell [--client-project my-app --universal-project server-app] ng run my-app:app-shell:production Francesco Sciuti Google Certi鍖ed Developer https://www.acadevmy.it/intro
  • 44. Il Caching dei 鍖les dellapplicazione viene valutato come una singola unit, e difatti i 鍖les sono aggiornati tutti insieme. Un'applicazione in esecuzione continua a essere eseguita con la stessa versione di tutti i 鍖le. Non inizia improvvisamente a ricevere 鍖le memorizzati nella cache da una versione pi湛 recente, dato che potrebbero essere potenzialmente incompatibili. Quando gli utenti aggiornano l'applicazione, vedono l'ultima versione completamente memorizzata nella cache. Gli aggiornamenti avvengono in background, relativamente rapidamente dopo la pubblicazione delle modi鍖che. La versione precedente dell'applicazione viene pubblicata 鍖no a quando un aggiornamento 竪 pronto dopo essere stato installato. Angular Come funziona il caching del Service Worker Francesco Sciuti Google Certi鍖ed Developer https://www.acadevmy.it/intro
  • 45. Ogni volta che viene distribuita una nuova build dell'app, anche se viene aggiornato solo un singolo 鍖le, il SW tratta tale build come una nuova versione dell'app. Il SW fornisce una garanzia: un'app in esecuzione continuer a eseguire la stessa versione dell'app. Se viene aperta un'altra istanza dell'app in una nuova tab del browser Web, verr invece offerta la versione pi湛 recente dell'app. Di conseguenza, quella nuova scheda pu嘆 eseguire una versione diversa dell'app rispetto alla scheda originale. Angular Come funziona il caching del Service Worker Francesco Sciuti Google Certi鍖ed Developer https://www.acadevmy.it/intro
  • 46. Ogni volta che l'utente ricarica l'applicazione, il SW veri鍖cher se sul server 竪 disponibile un nuovo 鍖le ngsw.json. La precedente e la nuova versione del 鍖le ngsw.json verranno confrontate e il nuovo bundle verr scaricato e installato in background. pertanto essenziale veri鍖care frequentemente se sul server 竪 disponibile una nuova versione dell'applicazione. Se viene trovato un aggiornamento, questo viene scaricato e memorizzato nella cache automaticamente e viene pubblicato al successivo caricamento dell'applicazione. Angular Come vengono installate le versioni dellapp Francesco Sciuti Google Certi鍖ed Developer https://www.acadevmy.it/intro
  • 47. Il SW viene scaricato quando l'app viene aperta per la prima volta e quando si accede all'app dopo un periodo di inattivit. Se il SW 竪 stato modi鍖cato, verr aggiornato in background. possibile ignorare il SW per alcune richieste ed 竪 sufficiente impostare ngsw-bypass come header della richiesta o come parametro di query. Angular Come funziona il caching del Service Worker Francesco Sciuti Google Certi鍖ed Developer https://www.acadevmy.it/intro
  • 48. Angular Debug e Disattivazione del Service Worker Debug Il SW espone sotto un path virtuale le informazioni di debug ed attualmente il path 竪 ngsw/state. Disattivazione del SW possibile farlo seguendo due strategie distinte: Fail-safe o Safety Worker Francesco Sciuti Google Certi鍖ed Developer https://www.acadevmy.it/intro
  • 49. Angular & Workbox In alcune occasioni, le comunque in鍖nite possibilit offerte dal NgSW non sono sufficienti per le nostre esigenze e serve qualche arma ancora pi湛 potente e 鍖essibile. Qui entra in gioco Workbox! The JavaScript Libraries for adding offline support to web apps https://developers.google.com/web/tools/workbox Francesco Sciuti Google Certi鍖ed Developer https://www.acadevmy.it/intro
  • 50. Workbox Integrare WB in Angular Creare un 鍖le manifest, icone ed aggiungere il tutto al progetto Angular Aggiungere il manifest generato (https://app-manifest.鍖rebaseapp.com/) come asset nel 鍖le angular.json Aggiungere il tag link del manifest al 鍖le index.html <link href="manifest.json" rel="manifest"> Installare pacchetti workbox necessari da npm npm install workbox-core workbox-precaching workbox-routing workbox-strategies Creare il 鍖le per il Service Worker ed utilizzare le API di Workbox per gestire tutto ci嘆 che si desidera! Creare un 鍖le per la con鍖gurazione Workbox per iniettare dinamicamente ci嘆 che si desidera mettere in cache Creare un 鍖le per la con鍖gurazione Webpack Aggiungere le chiavi script in package.json Francesco Sciuti Google Certi鍖ed Developer https://www.acadevmy.it/intro
  • 51. Francesco Sciuti Google Certi鍖ed Developer https://www.acadevmy.it/intro Analizziamo il progetto! (per questo non ho Piano B)
  • 52. Mobile e Desktop Le PWA offrono unesperienza native-like sia su mobile che su desktop. Attualmente il supporto 竪 offerto dai browser Chromium based ma ci si sta lavorando anche da altri fronti! Francesco Sciuti Google Certi鍖ed Developer https://www.acadevmy.it/intro
  • 53. Mobile e Desktop Francesco Sciuti Google Certi鍖ed Developer https://www.acadevmy.it/intro
  • 54. Mobile e Desktop Francesco Sciuti Google Certi鍖ed Developer https://www.acadevmy.it/intro
  • 55. Gli store La pubblicazione sugli store di applicazioni sono ufficialmente supportate su Google Play Store e Windows Store In queste occasioni sar necessario lavorare su tecnologie come TWA (Trusted Web Activity) o APPX Per Apple 竪 necessario invece continuare a lavorare come avremmo fatto con unapp Cordova con tutte le limitazioni che impone lApp Store. Francesco Sciuti Google Certi鍖ed Developer https://www.acadevmy.it/intro
  • 56. La compatibilit I browser sono molto avanti nellimplementazione delle tecnologie utili per le PWA ma ancora la compatibilit non 竪 completa (soprattutto su IOS). Supporto parziale alle gesture Supporto parziale al Manifest Web API disponibili Tags speci鍖ci per IOS Add to Home Screen Splash Screen Supporto alle Push Noti鍖cation Ciclo di Vita della PWA Orientation Francesco Sciuti Google Certi鍖ed Developer https://www.acadevmy.it/intro
  • 57. I tools COMPAT Francesco Sciuti Google Certi鍖ed Developer https://www.acadevmy.it/intro
  • 58. Qualche Links Docs Google Developer PWA Docs MDN PWA Docs ServiceWorkers Cookbook PWA Checklist IsServiceWorkerReady? IOS 13 | 12.2 | 11.3 Vaadin Handbook PWA 2020 Status Tools Lighthouse Report Viewer PWABuilder | PWA Starter Kit Workbox | Workbox in NG Web-Push | WhatWebCanDo Case Studies Pinterest PWA Maps Go Tinder PWA Twitter Lite Examples / Labs Your First PWA Google PWA Training HNPWA Directory PWA Stats AppScope Francesco Sciuti https://www.acadevmy.it/intro
  • 59. Francesco Sciuti Google Certi鍖ed Developer https://www.acadevmy.it/intro
  • 61. Grazie a tutti! Se avete voglia di dare unopinione, di contattarmi o di vincere un premio (scherzo...non c竪 alcun premio ma faceva molto 鍖go! :D) Francesco Sciuti Google Certi鍖ed Developer https://www.acadevmy.it/intro https://bit.ly/2CVtITW