SlideShare a Scribd company logo
1 of 68
Download to read offline
Cordova: un viaggio di sola
andata
Suggerimenti e buone pratiche per lo sviluppo di app ibride con Apache Cordova
Prato
Front
End
12
Dicembre
2017
SOFTEC
Prato
Hello World!
Diego La Monica
https://diegolamonica.info
Hello World!
Full Stack Developer
Diego La Monica
https://diegolamonica.info
Hello World!
Full Stack Developer
Owner @ toSend.it
Diego La Monica
https://diegolamonica.info
Hello World!
Full Stack Developer
Owner @ toSend.it
Web/Mobile App Developer
Diego La Monica
https://diegolamonica.info
Hello World!
Full Stack Developer
Owner @ toSend.it
Web/Mobile App Developer
Parlo molto di tecnologia…Diego La Monica
https://diegolamonica.info
Hello World!
Full Stack Developer
Owner @ toSend.it
Web/Mobile App Developer
Parlo molto di tecnologia…
… ma solo di quello che so!
Diego La Monica
https://diegolamonica.info
Hello World!
Full Stack Developer
Owner @ toSend.it
Web/Mobile App Developer
Parlo molto di tecnologia…
… ma solo di quello che so!
Diego La Monica
Twitter: @jast
Incipt
[…] Il mondo è cambiato. Lo sento nell'acqua.
Lo sento nella terra. Lo avverto nell'aria. Molto
di ciò che era si è perduto, perché ora non vive
nessuno che lo ricorda. […]
A.D. 2011 Adobe.
acquisisce Nitobi.
Cloud Compiler
Acquisiti i diritti da Adobe con il
nome
PhoneGap
Codice Sorgente
Donato ad Apache Foundation e
viene battezzato infine
Apache Cordova
Tutto ebbe inizio con la forgiatura dei grandi Anelli.
[…] Tre furono dati agli elfi, gli
esseri immortali più saggi e leali
di tutti. […]
Ionic
Ionic
Built on top of Angular
Ionic is a front-end SDK for
building cross-platform mobile
apps.
Built on top of Angular, Ionic
also provides a platform for
integrating services like push
notifications and analytics.
Tutto ebbe inizio con la forgiatura dei grandi Anelli.
[…] Sette ai re dei nani, grandi
minatori e costruttori di città
nelle montagne. […]
Ionic
Cocoon
Cocoon
is focused on providing
the best webview
engines
Cocoon is a Cordova based
cloud service for building native
HTML5 apps and games.
Cocoon is focused on providing
the best webview engines and
features like Canvas+, JS
encryption or a custom
Developer App.
Tutto ebbe inizio con la forgiatura dei grandi Anelli.
[…] E nove, nove Anelli furono dati alla razza degli
uomini che più di qualunque cosa desiderano il
potere. Perché in questi anelli erano sigillati la
forza e la volontà di governare tutte le razze. […]
Ionic Adobe PhoneGap
Cocoon
Adobe PhoneGap
the original and most
popular distribution of
Apache Cordova
PhoneGap is the original and
most popular distribution of
Apache Cordova. Turn your
HTML, CSS and JavaScript into
an app on your device in minutes
using our simple desktop and
developer apps.
[…] Ma tutti loro furono ingannati, perché venne creato un altro
anello. Nella terra di Mordor, tra le fiamme del Monte Fato,
Sauron, l'Oscuro Signore, forgiò in segreto un Anello sovrano, per
controllare tutti gli altri e in questo anello riversò la sua crudeltà,
la sua malvagità e la sua volontà di dominare ogni forma di vita:
un Anello per domarli tutti.[…]
Ionic Adobe PhoneGap
Cocoon Cordova CLI
Apache Cordova
Le App sviluppate con Apache Cordova sono scritte
in HTML, CSS e Javascript e sono in grado di
accedere anche alle funzionalità native del device.
Stesso code-base per tutte le
piattaforme supportate
=
Esperimenti sociali
Qual è la risposta giusta?
a) 1 = Android - 2 = iPhone
b) 1 = iPhone - 2 = Android
c) Entrambe Android
d) Entrambe iPhone
21
Esperimenti sociali
Qual è la risposta giusta?
❌ 1 = Android - 2 = iPhone
✔ 1 = iPhone - 2 = Android
❌ Entrambe Android
❌ Entrambe iPhone
21
iPhone
Android
Qual è la risposta giusta?
a) 1 = Android - 2 = iPhone
b) 1 = iPhone - 2 = Android
c) Entrambe Android
d) Entrambe iPhone
Esperimenti sociali
21
Esperimenti sociali
Qual è la risposta giusta?
✔ 1 = Android - 2 = iPhone
❌ 1 = iPhone - 2 = Android
❌ Entrambe Android
❌ Entrambe iPhone
21
Android
iPhone
Regola #1.
Identificare il device
Questo giorno non appartiene a un uomo solo, ma a tutti. Insieme
ricostruiamo questo mondo, da poter condividere nei giorni di pace.
Aragorn - Il signore degli anelli - Il ritorno del re
Command Line
cordova plugin add cordova-plugin-device
Javascript
var deviceName = device
.platform
.toLowerCase()
.replace( '-', '' );
document
.querySelector('body')
.classList.add(deviceName);
…
<body class="android">
…
</body>
…
<body class="ios">
…
</body>
…
<body class="windows">
…
</body>
body.android a.back-button,
body.windows a.back-button{
display: none;
}
body.windows{
background-image:
url(images/windows.png);
}
body.android{
background-image:
url(images/android.png);
}
body.ios{
background-image:
url(images/apple.png);
}
Visualizzazione
esclusiva
Se si hanno elementi specifici
per un device si visualizzano
solo quando serve.
body:not(.ios) .ios-only,
body:not(.android) .android-only,
body:not(.windows) .windows-only{
display: none;
}
...
Regola #2.
Ottimizzare il DOM
Non posso portare l'anello per voi.. ma posso portare voi!
Sam - Il signore degli anelli - Le due torri
Document Object Model
https://giuseppetoto.it/sencha-touch-2-sviluppare-applicazioni-mobile-multipiattaforma-4a5a55eacae3
The HTML DOM is always tree-structured - which is
allowed by the structure of HTML document. This is
cool because we can traverse trees fairly easily.
Unfortunately, easily doesn’t mean quickly here.
http://reactkungfu.com/2015/10/the-difference-between-virtual-dom-and-dom/
DOM complesso
● Richiesta maggiore di
potenza computazionale
● Deterioramento delle
performance applicative
DOM leggero
● Minore necessità di potenza
computazionale
● Applicazione performante
Virtualizzazione
del DOM
● Rimuovere dalla pagina i
contenuti che non sono
visibili a schermo
DOM leggero
I contenuti sono comunque
disponibili ma non renderizzati.
Esempio:
https://github.com/sergi/virtual-list
Regola #3.
Razionalizzare le differenze
Possiamo soltanto decidere cosa fare con il tempo che ci è stato concesso…
Gandalf - Il signore degli anelli - La compagnia dell’anello
Uniformare il
codice
Per comportamenti differenti,
bisogna trovare il minimo
comune multiplo.
function base64toFile( buffer, file){
/*
* alcuni device forniscono il base64
* con il data-uri
* data:image/gif;base64,<contenuto>
*/
buffer = buffer.replace(/^[^,]*,/,'');
/*
* Codice comune a tutti i device
*/
}
Regola #4.
Essere comunicativi
Ti vedo!!!
Sauron - Il signore degli anelli - Il ritorno del re
Avvisare dei
tempi di attesa
Se l’applicazione richiede tempo
per svolgere un’operazione,
comunicarlo all’utente.
Avvisare dei
tempi di attesa
Se l’applicazione richiede tempo
per svolgere un’operazione,
comunicarlo all’utente.
Percezione di non
funzionamento
Potrebbe essere mostrata per
diversi secondi un’interfaccia
vuota oppure l’interfaccia
precedente con effetto freeze
zzz...
Percezione di non
funzionamento
L’utente si sente frustrato perché
non riesce a conseguire il
proprio obiettivo
zzz… zzz…
Percezione di non
funzionamento
L’utente si sente frustrato perché
non riesce a conseguire il
proprio obiettivo
zzz… zzz…
Percezione di non
funzionamento
L’utente si sente frustrato perché
non riesce a conseguire il
proprio obiettivo
zzz… zzz…
Percezione di non
funzionamento
L’utente si sente frustrato perché
non riesce a conseguire il
proprio obiettivo
zzz… zzz…
Percezione di non
funzionamento
L’utente si sente frustrato perché
non riesce a conseguire il
proprio obiettivo
zzz… zzz…
Percezione di non
funzionamento
L’utente si sente frustrato perché
non riesce a conseguire il
proprio obiettivo
zzz… zzz…
Percezione di non
funzionamento
L’utente si sente frustrato perché
non riesce a conseguire il
proprio obiettivo
zzz… zzz…
Percezione di non
funzionamento
Talvolta decide di non voler
continuare oltre nell’utilizzo
dell’app.
Un utente insoddisfatto è un
utente perso!
zzz… zzz… zzz…
Funziona… ma…
Finalmente un po’ di luce
Riavvolgiamo il nastro.
Regola #4.
Essere comunicativi
Avvisare dei
tempi di attesa
Se l’applicazione richiede tempo
per svolgere un’operazione,
comunicarlo all’utente.
Avvisare dei
tempi di attesa
L’utente è consapevole che l’app
non è bloccata.
È maggiormente
disponibile all’attesa
Gli stessi secondi di attesa
risulteranno più brevi.
È maggiormente
disponibile all’attesa
Tutte le trasmissioni verso il
server, avviate a seguito di
interazione tra l’utente e l’app,
devono essere evidenti per
l’utente.
Avviso su
richieste AJAX
<body>
…
<div id="ajax-loader">
Caricamento in corso…
</div>
</body>
$( document )
.ajaxStart( function () {
$( 'body' ).addClass( 'loading' );
} )
.ajaxStop( function () {
$( 'body' ).removeClass( 'loading' );
} );
Avviso su
richieste AJAX
<body class="loading">
…
<div id="ajax-loader">
Caricamento in corso…
</div>
</body>
#ajax-loader{
display: none;
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
}
body.loading #ajax-loader{
display: block;
opacity: 0.4;
}
Altri suggerimenti?.
Ritroviamoci al prossimo
meetup!
Grazie!
Il mio tessssoro…
Prato
Front
End
12
Dicembre
2017
SOFTEC
Prato
https://diegolamonica.info

More Related Content

Similar to Cordova: un viaggio di sola andata

Federico Massi.it - Intro alle app mobile Cordova
Federico Massi.it - Intro alle app mobile CordovaFederico Massi.it - Intro alle app mobile Cordova
Federico Massi.it - Intro alle app mobile CordovaFederico Massi
 
Applicazioni mobili: dall'ideazione alla pubblicazione
Applicazioni mobili: dall'ideazione alla pubblicazioneApplicazioni mobili: dall'ideazione alla pubblicazione
Applicazioni mobili: dall'ideazione alla pubblicazioneDiego La Monica
 
Non Conventional Android Programming (Italiano)
Non Conventional Android Programming (Italiano)Non Conventional Android Programming (Italiano)
Non Conventional Android Programming (Italiano)Davide Cerbo
 
Blomming Lean Startup @ Better Software 2011
Blomming Lean Startup @ Better Software 2011Blomming Lean Startup @ Better Software 2011
Blomming Lean Startup @ Better Software 2011Nicola Junior Vitto
 
Android App Development - Unimore
Android App Development - UnimoreAndroid App Development - Unimore
Android App Development - UnimoreNicola Corti
 
Introduzione ad ubuntu core - Qt day 2017
Introduzione ad ubuntu core  - Qt day 2017Introduzione ad ubuntu core  - Qt day 2017
Introduzione ad ubuntu core - Qt day 2017Marco Trevisan
 
Augmented Reality: guardare il mondo da un altro punto di vista
Augmented Reality: guardare il mondo da un altro punto di vistaAugmented Reality: guardare il mondo da un altro punto di vista
Augmented Reality: guardare il mondo da un altro punto di vistaCodemotion
 
Presentarsi sul mercato globale con app di successo
Presentarsi sul mercato globale con app di successoPresentarsi sul mercato globale con app di successo
Presentarsi sul mercato globale con app di successoDiego La Monica
 
Ecco gli strumenti necessari per sviluppare la tua App Android
Ecco gli strumenti necessari per sviluppare la tua App AndroidEcco gli strumenti necessari per sviluppare la tua App Android
Ecco gli strumenti necessari per sviluppare la tua App AndroidFlavius-Florin Harabor
 
Gam03 facciamo volare il nosro drone
Gam03   facciamo volare il nosro droneGam03   facciamo volare il nosro drone
Gam03 facciamo volare il nosro droneDotNetCampus
 
App di successo quali strumenti? e le performance?
App di successo quali strumenti? e le performance?App di successo quali strumenti? e le performance?
App di successo quali strumenti? e le performance?Diego La Monica
 
Android programming (ita)
Android programming (ita)Android programming (ita)
Android programming (ita)Vinu Iaconissi
 
Basta problemi-con-tensorflow-usando-docker-nvidia-docker
Basta problemi-con-tensorflow-usando-docker-nvidia-dockerBasta problemi-con-tensorflow-usando-docker-nvidia-docker
Basta problemi-con-tensorflow-usando-docker-nvidia-dockerNicola Landro
 
Responsive Web Design & Single Page Application
Responsive Web Design & Single Page ApplicationResponsive Web Design & Single Page Application
Responsive Web Design & Single Page ApplicationAlessandro Colla
 

Similar to Cordova: un viaggio di sola andata (20)

Federico Massi.it - Intro alle app mobile Cordova
Federico Massi.it - Intro alle app mobile CordovaFederico Massi.it - Intro alle app mobile Cordova
Federico Massi.it - Intro alle app mobile Cordova
 
HTML5, il lato client della forza...
HTML5, il lato client della forza... HTML5, il lato client della forza...
HTML5, il lato client della forza...
 
Io, Android
Io, AndroidIo, Android
Io, Android
 
Applicazioni mobili: dall'ideazione alla pubblicazione
Applicazioni mobili: dall'ideazione alla pubblicazioneApplicazioni mobili: dall'ideazione alla pubblicazione
Applicazioni mobili: dall'ideazione alla pubblicazione
 
Sviluppare applicazioni Domino Web per dispositivi Mobili
Sviluppare applicazioni Domino Web per dispositivi MobiliSviluppare applicazioni Domino Web per dispositivi Mobili
Sviluppare applicazioni Domino Web per dispositivi Mobili
 
Non Conventional Android Programming (Italiano)
Non Conventional Android Programming (Italiano)Non Conventional Android Programming (Italiano)
Non Conventional Android Programming (Italiano)
 
Blomming Lean Startup @ Better Software 2011
Blomming Lean Startup @ Better Software 2011Blomming Lean Startup @ Better Software 2011
Blomming Lean Startup @ Better Software 2011
 
Android App Development - Unimore
Android App Development - UnimoreAndroid App Development - Unimore
Android App Development - Unimore
 
Introduzione ad ubuntu core - Qt day 2017
Introduzione ad ubuntu core  - Qt day 2017Introduzione ad ubuntu core  - Qt day 2017
Introduzione ad ubuntu core - Qt day 2017
 
Augmented Reality: guardare il mondo da un altro punto di vista
Augmented Reality: guardare il mondo da un altro punto di vistaAugmented Reality: guardare il mondo da un altro punto di vista
Augmented Reality: guardare il mondo da un altro punto di vista
 
Presentarsi sul mercato globale con app di successo
Presentarsi sul mercato globale con app di successoPresentarsi sul mercato globale con app di successo
Presentarsi sul mercato globale con app di successo
 
Workshop SME 09
Workshop SME 09Workshop SME 09
Workshop SME 09
 
Ecco gli strumenti necessari per sviluppare la tua App Android
Ecco gli strumenti necessari per sviluppare la tua App AndroidEcco gli strumenti necessari per sviluppare la tua App Android
Ecco gli strumenti necessari per sviluppare la tua App Android
 
Cloud computing 101
Cloud computing 101Cloud computing 101
Cloud computing 101
 
Gam03 facciamo volare il nosro drone
Gam03   facciamo volare il nosro droneGam03   facciamo volare il nosro drone
Gam03 facciamo volare il nosro drone
 
platforms
platformsplatforms
platforms
 
App di successo quali strumenti? e le performance?
App di successo quali strumenti? e le performance?App di successo quali strumenti? e le performance?
App di successo quali strumenti? e le performance?
 
Android programming (ita)
Android programming (ita)Android programming (ita)
Android programming (ita)
 
Basta problemi-con-tensorflow-usando-docker-nvidia-docker
Basta problemi-con-tensorflow-usando-docker-nvidia-dockerBasta problemi-con-tensorflow-usando-docker-nvidia-docker
Basta problemi-con-tensorflow-usando-docker-nvidia-docker
 
Responsive Web Design & Single Page Application
Responsive Web Design & Single Page ApplicationResponsive Web Design & Single Page Application
Responsive Web Design & Single Page Application
 

More from Diego La Monica

E se non avessi davvero bisogno di un app?
E se non avessi davvero bisogno di un app?E se non avessi davvero bisogno di un app?
E se non avessi davvero bisogno di un app?Diego La Monica
 
Analisi comportamentale nelle app: pensare agli introiti contrasta con l'util...
Analisi comportamentale nelle app: pensare agli introiti contrasta con l'util...Analisi comportamentale nelle app: pensare agli introiti contrasta con l'util...
Analisi comportamentale nelle app: pensare agli introiti contrasta con l'util...Diego La Monica
 
Ideare un app e farla fruttare: quanti modi? Quale scegliere?
Ideare un app e farla fruttare: quanti modi? Quale scegliere?Ideare un app e farla fruttare: quanti modi? Quale scegliere?
Ideare un app e farla fruttare: quanti modi? Quale scegliere?Diego La Monica
 
App di successo - quali strumenti? e le performance?
App di successo - quali strumenti? e le performance?App di successo - quali strumenti? e le performance?
App di successo - quali strumenti? e le performance?Diego La Monica
 
Presentarsi sul mercato globale con app di successo
Presentarsi sul mercato globale con app di successoPresentarsi sul mercato globale con app di successo
Presentarsi sul mercato globale con app di successoDiego La Monica
 
Strategie per applicazioni web prima o meglio dell'app nativa
Strategie per applicazioni web prima o meglio dell'app nativaStrategie per applicazioni web prima o meglio dell'app nativa
Strategie per applicazioni web prima o meglio dell'app nativaDiego La Monica
 
Competenze per lo sviluppo software nellera del web
Competenze per lo sviluppo software nellera del webCompetenze per lo sviluppo software nellera del web
Competenze per lo sviluppo software nellera del webDiego La Monica
 
Siti web, Portali, Rich Internet Application: tendenze e controtendenze
Siti web, Portali, Rich Internet Application: tendenze e controtendenzeSiti web, Portali, Rich Internet Application: tendenze e controtendenze
Siti web, Portali, Rich Internet Application: tendenze e controtendenzeDiego La Monica
 
I linguaggi del web - seconda edizione (3° giornata)
I linguaggi del web - seconda edizione (3° giornata)I linguaggi del web - seconda edizione (3° giornata)
I linguaggi del web - seconda edizione (3° giornata)Diego La Monica
 
I linguaggi del web - seconda edizione (2° giornata)
I linguaggi del web - seconda edizione (2° giornata)I linguaggi del web - seconda edizione (2° giornata)
I linguaggi del web - seconda edizione (2° giornata)Diego La Monica
 
I linguaggi del web - seconda edizione (1° giornata)
I linguaggi del web - seconda edizione (1° giornata)I linguaggi del web - seconda edizione (1° giornata)
I linguaggi del web - seconda edizione (1° giornata)Diego La Monica
 
ALPHA Architectural Overview
ALPHA Architectural OverviewALPHA Architectural Overview
ALPHA Architectural OverviewDiego La Monica
 
Giochi on line: soluzione per il marketing virale!
Giochi on line: soluzione per il marketing virale!Giochi on line: soluzione per il marketing virale!
Giochi on line: soluzione per il marketing virale!Diego La Monica
 
I Linguaggi Del Web (2° Giornata)
I Linguaggi Del  Web (2°  Giornata)I Linguaggi Del  Web (2°  Giornata)
I Linguaggi Del Web (2° Giornata)Diego La Monica
 

More from Diego La Monica (20)

E se non avessi davvero bisogno di un app?
E se non avessi davvero bisogno di un app?E se non avessi davvero bisogno di un app?
E se non avessi davvero bisogno di un app?
 
Analisi comportamentale nelle app: pensare agli introiti contrasta con l'util...
Analisi comportamentale nelle app: pensare agli introiti contrasta con l'util...Analisi comportamentale nelle app: pensare agli introiti contrasta con l'util...
Analisi comportamentale nelle app: pensare agli introiti contrasta con l'util...
 
Ideare un app e farla fruttare: quanti modi? Quale scegliere?
Ideare un app e farla fruttare: quanti modi? Quale scegliere?Ideare un app e farla fruttare: quanti modi? Quale scegliere?
Ideare un app e farla fruttare: quanti modi? Quale scegliere?
 
Css stuffs #3
Css   stuffs #3Css   stuffs #3
Css stuffs #3
 
App di successo - quali strumenti? e le performance?
App di successo - quali strumenti? e le performance?App di successo - quali strumenti? e le performance?
App di successo - quali strumenti? e le performance?
 
Css stuffs #2
Css   stuffs #2Css   stuffs #2
Css stuffs #2
 
Css stuffs #1
Css   stuffs #1Css   stuffs #1
Css stuffs #1
 
Presentarsi sul mercato globale con app di successo
Presentarsi sul mercato globale con app di successoPresentarsi sul mercato globale con app di successo
Presentarsi sul mercato globale con app di successo
 
Strategie per applicazioni web prima o meglio dell'app nativa
Strategie per applicazioni web prima o meglio dell'app nativaStrategie per applicazioni web prima o meglio dell'app nativa
Strategie per applicazioni web prima o meglio dell'app nativa
 
Competenze per lo sviluppo software nellera del web
Competenze per lo sviluppo software nellera del webCompetenze per lo sviluppo software nellera del web
Competenze per lo sviluppo software nellera del web
 
SVN/TRAC
SVN/TRACSVN/TRAC
SVN/TRAC
 
Siti web, Portali, Rich Internet Application: tendenze e controtendenze
Siti web, Portali, Rich Internet Application: tendenze e controtendenzeSiti web, Portali, Rich Internet Application: tendenze e controtendenze
Siti web, Portali, Rich Internet Application: tendenze e controtendenze
 
I linguaggi del web - seconda edizione (3° giornata)
I linguaggi del web - seconda edizione (3° giornata)I linguaggi del web - seconda edizione (3° giornata)
I linguaggi del web - seconda edizione (3° giornata)
 
I linguaggi del web - seconda edizione (2° giornata)
I linguaggi del web - seconda edizione (2° giornata)I linguaggi del web - seconda edizione (2° giornata)
I linguaggi del web - seconda edizione (2° giornata)
 
I linguaggi del web - seconda edizione (1° giornata)
I linguaggi del web - seconda edizione (1° giornata)I linguaggi del web - seconda edizione (1° giornata)
I linguaggi del web - seconda edizione (1° giornata)
 
ALPHA Architectural Overview
ALPHA Architectural OverviewALPHA Architectural Overview
ALPHA Architectural Overview
 
Giochi on line: soluzione per il marketing virale!
Giochi on line: soluzione per il marketing virale!Giochi on line: soluzione per il marketing virale!
Giochi on line: soluzione per il marketing virale!
 
Pikno
PiknoPikno
Pikno
 
I Linguaggi Del Web (2° Giornata)
I Linguaggi Del  Web (2°  Giornata)I Linguaggi Del  Web (2°  Giornata)
I Linguaggi Del Web (2° Giornata)
 
Office & VBA - Giorno 8
Office & VBA - Giorno 8Office & VBA - Giorno 8
Office & VBA - Giorno 8
 

Cordova: un viaggio di sola andata