Académique Documents
Professionnel Documents
Culture Documents
This is a Leanpub book. Leanpub empowers authors and publishers with the Lean Publishing
process. Lean Publishing is the act of publishing an in-progress ebook using lightweight tools and
many iterations to get reader feedback, pivot until you have the right book and build traction once
you do.
Indice
Ringraziamenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Questo testo in beta perenne . . . . . . . . . . . . . . . . . . . . . .
Me, me stesso e io. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Com nato questo testo . . . . . . . . . . . . . . . . . . . . . . . . .
Rimanere aggiornati . . . . . . . . . . . . . . . . . . . . . . . . . . .
Donazioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Come contattare lautore . . . . . . . . . . . . . . . . . . . . . . . . .
Illustrazione della copertina . . . . . . . . . . . . . . . . . . . . . . .
Chi dovrebbe leggere questo testo . . . . . . . . . . . . . . . . . . . .
Migliori tecniche di programmazione VS introduzione per principianti
Commenti e Pull Requests . . . . . . . . . . . . . . . . . . . . . . . .
Traduzioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Storico delle versioni . . . . . . . . . . . . . . . . . . . . . . . . . . .
Introduzione . . . . . . . . . . . . . . .
Firefox OS . . . . . . . . . . . . . . .
La piattaforma che HTML5 merita . .
Accesso Hardware tramite le WebAPI
Libert di sviluppare e di distribuire .
Riassunto . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
i
i
i
i
i
ii
ii
ii
ii
iii
iii
iii
iv
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
1
2
3
3
4
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
5
5
5
5
8
9
Concetti Base . . . . . . . . . . .
File manifesto dellapplicazione
Tipi di Applicazioni . . . . . . .
Livelli di accesso per la sicurezza
WebAPI di Mozilla . . . . . . .
Riassunto . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
10
10
17
18
19
23
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
INDICE
La prima app . . . . . . . . . . . . . . .
Creare il manifesto dellapp . . . . .
Scriviamo il codice HTML . . . . . .
Manipoliamo il codice JavaScript . . .
Provare lapplicazione col simulatore
Riassunto . . . . . . . . . . . . . . .
Firefox OS Boilerplate App . . . . . .
Multilingua . . . . . . . . . . . . . .
Riassunto . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
24
27
28
32
40
46
46
50
51
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
52
52
55
57
WebIde . . . . . . . . . . . . . . . . . . . . . . .
Aggiungere Applicazioni . . . . . . . . . . . .
Avviare il simulatore . . . . . . . . . . . . . .
Avviare lapplicazione . . . . . . . . . . . . .
Aggiornare lapplicazione . . . . . . . . . . . .
Debug . . . . . . . . . . . . . . . . . . . . . .
Provare le applicazioni su un dispositivo reale .
Connettere un dispostivo Firefox OS . . . . . .
Riassunto . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
58
58
63
64
65
65
66
67
68
Il Simulatore Firefox OS . . . . . . . . . . . .
Aggiungere Applicazioni . . . . . . . . . . .
Debug . . . . . . . . . . . . . . . . . . . . .
Provare lapplicazione su un dispositivo reale
Connessione con un dispositivo Firefox OS .
Riassunto . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
69
70
72
74
74
77
Distribuire le app . .
App hosted . . . .
App pacchettizzate
Riassunto . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
78
78
79
80
Firefox Marketplace . . . . . . . . . . . . . .
Passi che precedono lideazione di unapp .
Passi preliminari prima della pubblicazione
Pubblicazione dellapp sul Marketplace . .
Le informazioni sulla nostra app . . . . . .
Guide linea per il marketplace . . . . . . .
Privacy . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
81
82
82
83
89
90
90
INDICE
Contenuto . . .
Funzionalit . .
Usabilit . . . .
Alcuni consigli
Riassunto . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
91
91
91
91
91
Altro . . . . . . . . . . .
Gaia Building Blocks .
Web Components . . .
Hosting App su Github
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
93
93
94
95
INDICE
Ringraziamenti
A mia moglie Lili, la miglior moglie nel mondo.
A Mozilla per aver sempre creduto in noi, per il suo sforzo di mantenere il web aperto e libero e
perch mette sempre lutente al primo posto.
Alla comunit brasiliana di Mozilla per avermi accolto e per essere cos incredibili.
Al mio mentore GSoC Marcos Caceres, al Mozilla WebAPI Team, al Mozilla Tech Evangelist Team
e il Dev Engagement Team per essere cos eccezionali.
A Google per aver ideato Google Summer of Code 2013. Questo programma spettacolare.
Rimanere aggiornati
Questo testo distribuito gratuitamente tramite Leanpub.
http://leanpub.com
INDICE
ii
Scaricando il testo dalla pagina ufficiale su Leanpub possibile registrarsi per ricevere gli
aggiornamenti automatici. Lauspicio di aggiornare il testo qualche volta al mese. Se si ottenuto
questo testo da un amico o da qualche altro sito, si vada alla pagina su Leanpub per scaricare e
registrarsi in modo da ricevere le notifiche sugli aggiornamenti.
Donazioni
Scrivere un testo richiede molto lavoro e, dopo lesperienza del Google Summer of Code 2013, vorrei
dedicare pi tempo a questa attivit. Quelli che pensano che questo testo sia utile (o intrigante)
possono effettuare una donazione scegliendo una cifra a piacere diversa dai 0 euro sulla pagina
di download su Leanpub. Per coloro che preferiscono donare utilizzando PayPal, posso ricevere
donazioni utilizzando laccount agarzia@mac.com.
Indipendentemente dalle donazioni, importante inserire il proprio indirizzo email nel modulo di
download per rimanere aggiornati sulle future modifiche apportate al testo.
INDICE
iii
Traduzioni
Questo testo stato scritto inizialmente in portoghese e successivamente tradotto in inglese da me.
In un secondo tempo, Daniele lo ha tradotto in italiano. La traduzione italiana stata aggiornata da
@gialloporpora e controllata da @Sara_t e @miki64.
La versione italiana ha del materiale inedito ma per maggiori informazioni fare riferimento allo
storico versioni. Entrambe le versioni sono disponibili gratuitamente su internet:
http://shop.oreilly.com/product/9780596517748.do
http://shop.oreilly.com/product/9780596806767.do
http://shop.oreilly.com/product/0636920027713.do
http://shop.oreilly.com/product/0636920027713.do
https://github.com/soapdog/firefoxos-quick-guide
https://github.com/soapdog/firefoxos-quick-guide
https://github.com/MozillaItalia/firefoxos-quick-guide
INDICE
iv
Versione 0.2
Testo rivisitato e corretto da Marcos Caceres, membro del Mozilla WebAPI team. Il contenuto di ogni
capitolo stato controllato per correzioni tecniche e molti errori grammaticali ed errori di battitura.
Versione 0.1
Questa la prima versione di questo testo. Non ho ancora verificato con un editor gli errori di
battitura, errori grammaticali e altre cose sbagliate. Linglese non la mia lingua principale quindi
correggetemi per eventuali errori. La versione che il lettore sta leggendo ha avuto inizio il 20 agosto
del 2013, una guida veloce distribuita alla BrazilJS Conference tenutasi tra il 22 e il 23 dello stesso
mese. In pratica questo testo stato scritto in soli due giorni.
Sto utilizzando Leanpub per scrivere il testo. Questo sistema mi permette di scrivere velocemente
e di gestire il progetto in modo facile rimanendo sano di mente. Questa versione la traduzione
letterale delloriginale in portoghese.
http://leanpub.com/guiarapidofirefoxos
https://github.com/soapdog/firefoxos-quick-guide
https://github.com/MozillaItalia/firefoxos-quick-guide
http://braziljs.com.br/
http://leanpub.com
Introduzione
Firefox OS
Firefox OS
Firefox OS una nuova piattaforma mobile sviluppata da Mozilla e dai suoi partner. Dispositivi
con Firefox OS sono gi disponibili in molti paesi e molti altri ne sono previsti entro la fine dellanno.
Finalizzata per i mercati emergenti, la missione di Firefox OS quella di portare il prossimo miliardo
di persone online. Per raggiungere questo obiettivo, i dispositivi con Firefox OS sono costruiti per
fornire un ottimo primo smartphone a prezzi competitivi. I dispositivi con Firefox OS non devono
essere confrontati con smartphone di fascia alta come Apple iPhone 5S e Samsung Galaxy S4; sono
realizzati per essere unalternativa ai telefoni avanzati in modo che gli utenti di questi dispositivi
possano compiere il passaggio a Firefox OS con un costo accessibile e ricevere una esperienza
smartphone completa.
http://mozilla.org/firefox/os/
http://mozilla.org
Introduzione
Nei mercati in via di sviluppo come il Brasile o la Colombia, smartphone con prestazioni decenti
sono solitamente troppo costosi per il consumatore medio. Le persone sono in grado di acquistare
telefoni a basso costo, le piattaforme di questi telefoni per sono progettate per dispositivi di fascia
alta - questo porta lhardware del telefono ad avere problemi nelle prestazioni, tutto ci ha come
risultato una pessima esperienza mobile per lutente finale. Firefox OS progettato specificatamente
per funzionare su hardware limitato fornendo una discreta esperienza utente.
Un altro fattore distintivo di Firefox OS lessere un ecosistema aperto. Si tenga presente che i sistemi
operativi mobile attuali sono paragonabili a dei silos proprietari, dove ogni produttore ha il privilegio
di obbligare gli sviluppatori e utenti a seguire i propri desideri a prescindere dalla loro volont (si
ricordi a proposito quando la Apple ha vietato luso dei linguaggi diversi da Objective-C nel suo app
Store). In questi ecosistemi proprietari possibile distribuire le applicazioni solo su canali autorizzati
- e il venditore ottiene una commessa sugli acquisti effettuati dal dispositivo.
Oltre a costringere gli sviluppatori su canali di distribuzione proprietari, questi sistemi li obbligano a
utilizzare i loro Software Development Kit ( abbreviato in SDK). Per realizzare unapp nativa sia per
iOS che Android utilizzando i sistemi ufficiali, sar necessario programmare unapp in Objective-C
ed unaltra in Java rispettivamente. Dal punto di vista di uno sviluppatore questo significa non poter
riutilizzare codice tra i vari progetti (magari pure le risorse multimediali non saranno riutilizzabili).
In altre parole uno sviluppatore dovrebbe imparare due linguaggi e realizzare lo stesso software due
volte.
Firefox OS si differenzia grazie allutilizzo di HTML5 come piattaforma di sviluppo. HTML5
un termine di marketing utilizzato per indicare le tecnologie web in continua evoluzione, ovvero:
HTML, JavaScript e CSS. Questi standard privi di brevetti sono supportati dai principali browser
web, rendendo in questo modo possibili le app web. Sfruttando le tecnologie che includono HTML5,
milioni di sviluppatori possono programmare per Firefox OS. Le applicazioni create per Firefox OS
sono facili da migrare su altre piattaforme utilizzando dei framework come Phonegap.
Introduzione
di browser che supportano HTML5 nei loro telefoni, Firefox OS va oltre, offrendo una famiglia di
API per accedere allhardware e al sistema utilizzando JavaScript. Queste API sono conosciute come
WebAPI.
Introduzione
per uso interno alla propria azienda, se si vogliono distribuire le proprie creazioni esclusivamente
sul proprio sito, ci possibile. Solitamente nelle altre piattaforme si bloccati dallo store ufficiale,
che lunico canale di distribuzione per le applicazioni. Firefox OS ha un market ufficiale chiamato
Firefox Marketplace che ha un processo di approvazione, ma si liberi di distribuire le proprie app
fuori dal negozio. Analogamente a quanto accade sul web dove possibile scegliere qualunque host
per il proprio sito, con Firefox OS possibile distribuire la propria app utilizzando qualunque host.
Purtroppo esiste una piccola controindicazione: per ragioni di sicurezza, lutilizzo di alcune WebAPI
sensibili non pu essere consentito a chiunque. Per distribuire le app che utilizzano alcune delle API
con privilegi si rende necessario sottoporre lapp stessa alla revisione dello staff Mozilla, che dovr
firmare digitalmente lapp prima di poterla pubblicare.
Riassunto
HTML5 progettato per rimanere e migliorare nel tempo. Firefox OS il nuovo sistema operativo
mobile aperto di Mozilla completamente basato su tecnologie web. Questo sistema costruito
per lapertura e offre una implementazione robusta di HTML5 che va oltre le altre piattaforme,
offrendo delle WebAPI che sono una raccolta di API per accedere al sistema operativo e allhardware
utilizzando JavaScript. Queste nuove API sono state standardizzate con il World Wide Web
Consortium (W3C) e speriamo adottate da altri browser in futuro.
Nel prossimo capitolo vedremo come preparare un ambiente di sviluppo per Firefox OS.
Adesso il momento di vedere come funziona WebIde. Clicca su Strumenti -> Web Developer ->
WebIde.
La finestra ancora vuota e noi adesso andiamo ad installare i simulatori sul computer.
Nella barra degli strumenti abbiamo il pulsante Seleziona , fai click per scegliere o installare una
particolare versione del simulatore.
Fai clic su Installa il simulatore e seleziona la versione da installare facendo click sul bottone
relativo. Hai finito!
Per fare debugging remoto il sistema deve riconoscere il dispositivo quindi sono necessari gli
Android Tools o in parole povere adb. Come abbiamo accennato Firefox OS basato su Android
e quindi possiamo sfruttare alcuni dei suoi strumenti da sviluppatore come adb, che permette di
passare dei file e di comunicare da computer a dispositivo e viceversa.
Se adb non presente nel computer, Firefox non potr rilevare alcun dispositivo connesso!
Riassunto
In questo capitolo abbiamo scoperto che tutto ci di cui abbiamo bisogno per sviluppare app per
Firefox OS il browser Firefox per desktop (e un buon editor di testo).
Ora che abbiamo configurato lambiente di sviluppo, siamo pronti per soffermarci su qualche
concetto base prima di creare la nostra prima app.
Concetti Base
Prima di sporcarci le mani con la nostra prima applicazione, vediamo di scoprire alcuni concetti
base per lo sviluppo su Firefox OS. Nellintroduzione abbiamo detto che le applicazioni Firefox OS,
analogamente alle pagine web, sono basate su HTML5, tuttavia non abbiamo spiegato cosa rende le
applicazioni per Firefox OS differenti dalle pagine web classiche.
Se utilizziamo le nostre conoscenze riguardo le altre piattaforme mobile (Android o iOS per citare i
pi diffusi) possiamo osservare che le applicazioni native hanno delle caratteristiche ben definite:
Un nome e unicona con cui lutente lancia lapplicazione.
Accesso ai servizi di sistema (dati utente, notifiche) e funzionalit hardware (sensori).
Osservando il quadro generale, unapplicazione Firefox OS non altro che una pagina web con una
icona, un nome e di solito in grado di funzionare anche non in linea (decisione che spetta allo
sviluppatore). Tutti i dati dellapplicazione come nome, icona ecc. sono definiti nel file manifesto
dellapplicazione, che sar largomento della prossima sezione.
1
2
3
4
5
6
7
8
9
{
"name": "Memos",
"version": "1.1",
"description": "A simple memo taking app",
"launch_path": "/index.html",
"permissions": {
"storage": {
"description": "Required for storing and retrieving notes."
}
https://developer.mozilla.org/docs/Apps/Manifest
http://json.org
Concetti Base
10
11
12
13
14
15
16
17
18
19
11
},
"developer": {
"name": "Andre Garzia",
"url": "http://andregarzia.com"
},
"icons": {
"60": "/style/icons/icon_60.png",
"128": "/style/icons/icon_128.png"
}
}
Sopra possiamo vedere il manifest di unapplicazione chiamata Memos. Tra le altre cose descrive
chi ha creato lapplicazione, quali icone usare, qual il nome dellapplicazione, quale file usato
per lanciare lapplicazione (in questo caso index.html), quali permessi daccesso hardware richiede
lapplicazione, ecc. Questo file usato da Firefox OS per aggiungere lapplicazione alla schermata
principale e per mostrare sul Firefox Marketplace le informazioni dellapplicazione.
Questa applicazione di esempio per Firefox OS disponibile su Firefox Marketplace e il codice sorgente su GitHub.
12
Concetti Base
Si noti come le informazioni del file manifesto sono utilizzate dal sistema per aggiungere le
applicazioni alla schermata principale, come possibile osservare nella seguente schermata.
13
Concetti Base
Riunendo il codice HTML, CSS, JavaScript e un file manifesto gi possibile avere unapplicazione
pronta per funzionare su Firefox OS. Continuando nellesplorazione dei concetti base per lo sviluppo
di unapp, vediamo ora quali sono i vari tipi di applicazioni possibili.
Concetti Base
14
activities
La propriet activities specifica quali Web Activities supporta la nostra applicazione. Registrare
la vostra applicazione come una Web Activities vi permette di rendere la vostra applicazione
accessibile alle altre. Volendo fare unesempio, se voi sviluppate un applicazione che permette di
condividere le vostre foto su di un sito, potreste implementare la web activities share; in questo modo,
quando lutente prova a condividere una foto dallapp galleria, apparir anche la vostra applicazione
tra quelle che possono svolgere questo compito. La sintassi di questo campo un po complessa, per
questo vi rimando alla pagina di documentazione su MDN.
chrome
Il campo chrome indica se la vostra applicazione fa uso dei pulsanti di navigazione predefiniti dal
sistema come vediamo nellimmagine
Nota: tenete presente che questa funzionalit va utilizzata solo se non possibile implementare una
soluzione propria, poich le linee guida per luser experience prevedono linserimento di un tasto
back da parte dellapplicazione.
La sintassi della propriet la seguente:
1
default_locale
Questo parametro necessario quando presente anche la propriet locales ed indica qual la lingua
predefinita dellapplicazione ovvero quella che verr usata se nel sistema impostata una lingua per
cui non avete traduzioni.
Esempio per linglese
1
"default_locale": "en"
description
La descrizione dellapplicazione (massimo 1024 caratteri), siate il pi chiari e sintetici possibile perch
questo il testo che verr visualizzato sul Mozilla Marketplace (successivamente si pu modificare).
developer
Abbiamo incontrato questa propriet nel manifest di prova, puoi indicare chi lo sviluppatore e qual
il suo sito web.
https://developer.mozilla.org/en-US/docs/WebAPI/Web_Activities
Concetti Base
15
fullscreen
Se impostata a true, metter la vostra applicazione a schermo intero (utile per i giochi) nscondendo
la barra delle notifiche.
icons
Anche questa propriet era presente nellesempio e serve per far sapere quali risoluzioni dellicona
mettiamo a disposizione. Naturalmente bene fornire la stessa icona con pi risoluzioni, in modo che
il dispositivo prenda quella adeguata; pensate a come sarebbe piccola licona pensata per il telefono
rispetto a quelle del tablet o, ancora peggio, rispetto a quelle di uno schermo da 40 pollici. Alcune
dimensioni sono obbligatorie per il Mozilla Marketplace.
installs_allowed_from
Indica una serie di siti a cui permesso installare lapplicazione (questo campo inutile se pubblicate
la vostra app solamente nel Mozilla Marketplace). Se usate il vostro sito come base per la vostra
applicazione allora dovete inserirlo in questo campo.
launch_path
Ne abbiamo gi parlato nel codice di esempio pi in alto.
Questo campo indica il percorso di lancio dellapplicazione che deve essere relativo ed obbligatorio
per le app packaged.
locales
Questa propriet ci permette di impostare i dati come URL o description per le varie lingue in cui
rilasciata lapp.
Esempio:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
"locales": {
"es": {
"description": "Accin abierta emocionante del desarrollo del Web!",
"developer": {
"url": "http://es.mozillalabs.com/"
}
},
"it": {
"description": "Emozionati nello sviluppo libero del Web!",
"developer": {
"url": "http://it.mozillalabs.com/"
}
}
}
messages
Concetti Base
16
Indica quali messaggi del sistema la vostra app pu leggere per eseguire del codice specifico.
Esempio:
1
2
3
4
5
6
7
"messages": [
{ "telephony-new-call": "/dialer/index.html#keyboard-view" },
{ "bluetooth-dialer-command": "/dialer/index.html#keyboard-view" },
{ "headset-button": "/dialer/index.html#keyboard-view" },
{ "notification": "/dialer/index.html#keyboard-view" },
{ "alarm": "/facebook/fb_sync.html" }
]
Il campo messages cos compilato permette, per esempio, di aprire la pagina /dialer/index.html
allancora #keyboard-view quando levento telephony-new-call viene rilevato dal telefono.
name
Indovinate? Il nome della vostra app!
orientation
Questa propriet imposta lorientamento predefinito dellapplicazione, i due valori ammessi sono
landscape e portrait (predefinito). Lasciatela vuota o addirittura non mettetela se non vi interessa.
origin
Indica unURL che lapplicazione pu utilizzare al posto dellUUID, raro utilizzare questo valore.
permissions
Propriet chiave del manifest, permette di chiedere allutente il permesso di utilizzare elementi
specifici del telefono, come la geolocalizzazione, i contatti,
Esempio:
1
2
3
4
5
6
7
8
9
"permissions": {
"contacts": {
"description": "Required for autocompletion in the share screen",
"access": "readcreate"
},
"alarms": {
"description": "Required to schedule notifications"
}
}
In questo caso abbiamo richiesto due permessi: laccesso allelenco dei contatti in modalit lettura/creazione e la possibilit di usare la sveglia.
17
Concetti Base
Inoltre bisogna fornire due ulteriori campi, un campo description in cui bisogna spiegare allutente
a cosa ci serve il permesso e un campo access opzionale in cui specificate il grado daccesso. I valori
possibili sono readonly, readwrite, readcreate e createonly.
redirects
Permette di impostare un redirect da un sito esterno, per esempio per ragioni di autenticazione.
Richiede un campo from di input e uno to di elaborazione.
type
Indica se la vostra app web, privileged o certified. Le certified sono particolari e la loro certificazione
avviene solo tramite il Mozilla Marketplace o tramite il debug remoto.
version
Il numero di versione della vostra app sotto forma di stringa.
Github fornisce tramite Github Pages il mime type giusto per il file manifest. Alcuni
sviluppatori distribuiscono le proprie applicazioni hosted da Github, il vantaggio che
sono sempre aggiornate e finch si tratta di applicazioni semplici in JavaScript una buona
soluzione hosting. Vedi lultimo capitolo per approfondimenti.
Tipi di Applicazioni
Attualmente esistono due tipi di applicazioni Firefox OS che potete sviluppare: ospitate (hosted) e
pacchettizzate (packaged) - forse in futuro saranno disponibili altri tipi di applicazioni (per esempio
che consentiranno di personalizzare la tastiera o di creare altri servizi di sistema).
Nota del traduttore: sempre difficile rendere alcuni termini tecnici in italiano, nel sito di
Firefox Marketplace stato scelto di tradurre le hosted app in app ospitate e le packaged
app in app pacchettizzate. Ci nonostante nel mondo degli sviluppatori italiani si usano i
termini app hosted e app packaged. Nel proseguo del testo verranno utilizzati entrambi i
termini a discrezione dei localizzatori.
App Hosted: Sono disponibili ad un indirizzo web come www.mozilla.org esattamente come
i classici siti web. Questo significa che quando lutente avvia unapplicazione hosted, il suo
contenuto caricato dal server remoto (o dalla cache, se disponibile).
App Packaged: Sono distribuite come file zip e vengono salvate nel dispositivo al momento
della loro installazione. Quando lutente avvia unapp pacchettizzata, i suoi contenuti sono
caricati da un file zip nel dispositivo anzich da un server remoto.
http://mozilla.org
Concetti Base
18
Esistono vantaggi e svantaggi nellutilizzo di entrambi i tipi. Da un lato le app hosted sono pi facili
da aggiornare, infatti sufficiente cambiare i file sul server web. Per pi complicato implementare
il loro funzionamento in modalit non in linea in quanto richiede lutilizzo del tanto discusso file
appcache. Inoltre, le hosted app hanno delle limitazioni nelluso di alcune WebAPI e dunque non
possibile implementare tutte le funzioni che si possono utilizzare in unapp packaged.
Dallaltro lato tutti i file di unapp packaged sono memorizzati localmente sul dispositivo - ci
significa che sono sempre disponibili quando lutente non collegato (e quindi non sar necessario
utilizzare AppCache). Hanno anche la possibilit di accedere a WebAPI sensibili per la sicurezza
che non sono disponibili per le app hosted. Il loro aggiornamento pu essere problematico, perch
sar necessario caricare qualsiasi nuova versione su Firefox Marketplace - ci significa far sostenere
a ogni nuova versione dellapplicazione il processo di revisione che potrebbe richiedere un po di
tempo.
Quando si sceglie quale tipo di applicazione realizzare necessario fare delle valutazioni: se si
dovranno utilizzare delle WebAPI avanzate sar necessario orientarsi verso unapp packaged. Se
lapp che si sta progettando pu funzionare senza accedere a servizi di sistema avanzati o funzionalit
del dispositivo oltre a quelle gi disponibili in un browser web, sar necessaria unapp hosted. In caso
non si disponga di un server per la distribuzione utilizzare il tipo app packaged.
Sopra ho detto che utilizzare AppCache pu essere complicato (ma talvolta indispensabile per
alcune app hosted). Niente paura, esistono degli strumenti per semplificare la generazione di file
AppCache e facilitare il processo di distribuzione.
In questo testo vedremo come realizzare applicazioni packaged, in quanto questo ci permetter di
esplorare tutte le possibilit offerte dalle WebAPI. In ogni caso la maggior parte di ci che vedremo
sui file manifest si applica anche alle app hosted. Per ulteriori informazioni sulla distribuzione delle
app hosted consultare la documentazione sulle app hosted nel Centro di sviluppo.
Ora che abbiamo trattato i due tipi di applicazioni supportate da Firefox OS, diamo unocchiata ai
diversi livelli di accesso che unapp pu richiedere.
di preferenza. (Mi piace Volo rispetto a Grunt perch i Volofiles sono pi semplici da leggere).
https://marketplace.firefox.com/developers/docs/hosted
19
Concetti Base
Con privilegi: questo tipo di applicazioni ha accesso a tutte le API disponibili nel browser
Firefox, oltre a quelli aggiuntivi, come i contatti e gli allarmi di sistema. Solo le packaged
possono essere app con privilegi ed il pacchetto deve essere firmato digitalmente dal
Marketplace Firefox.
Certificato: per motivi di sicurezza, questo livello permesso per le app realizzate direttamente da Mozilla e dai suoi partner (per esempio i fornitori dellhardware, le compagnie di
telecomunicazione, ecc). Le applicazioni certificate hanno un accesso a tutte le API, come
lAPI Telephony e altro ancora. Un esempio di applicazione certificata in Firefox OS il
telefono.
Durante lo sviluppo possibile accedere alle API con privilegi senza richiedere permessi speciali
a Mozilla. In fase di distribuzione, per, sar necessario caricare lapp sul Firefox Marketplace. A
questo punto il codice viene controllato in un rigoroso processo di approvazione e se tutto OK
lapp sar firmata digitalmente - questo garantir agli utenti di Firefox OS che a questa applicazione
consentito accedere alle API sensibili.
Sulla pagina delle WebAPI sul Mozilla Developer Network possibile verificare quali API sono
implementate sui vari dispositivi e controllare il livello di accesso necessario per utilizzare ciascuna
API.
Come si pu vedere dallimmagine qui sopra, qualsiasi applicazione pu accedere alle API IndexedDB
API e FileHandle API ma solamente le app con privilegi possono accedere ai Contacts API e Device
Storage API.
WebAPI di Mozilla
Firefox OS fornisce le API necessarie per sviluppare applicazioni con le stesse funzionalit delle
applicazioni native sulle altre piattaforme. Laccesso al hardware ed ai servizi avviene attraverso
https://developer.mozilla.org/en-US/docs/WebAPI
Concetti Base
20
le WebAPI. Per saperne di pi sulle API disponibili nelle varie versioni di Firefox OS consultare la
pagina WebAPI nel Wiki Mozilla.
Analizzeremo alcuni esempi di codice per vedere come le API sono facili da utilizzare. Gli esempi
non vanno presi come una documentazione completa sulle WebAPI, sono una piccola dimostrazione
di come si possa accedere al dispositivo usando JavaScript.
1
2
3
4
5
6
Questo codice effettua una richiesta allapplicazione dialer per chiamare un numero predefinito.
In realt non partir la chiamata, sar necessario lesplicita conferma dellutente che dovr toccare
il tasto di chiamata per avviarla. La richiesta di unazione esplicita dellutente prima di avviare
unoperazione un modello molto comune: si tratta di un buon modello di sicurezza perch
richiesta unesplicita conferma dellutente prima di avviare unoperazione. Altre API possono
effettuare chiamate senza una interazione dellutente ma richiedono un livello daccesso pi elevato.
Le applicazioni certificate possono effettuare chiamate senza interazione con lutente. Le API usate
nel codice sopra, chiamate Web Activities, sono disponibili per tutte le applicazioni.
Per maggiori informazioni sullAPI Web Activities consultare questo post sul blog Mozilla.
https://wiki.mozilla.org/WebAPI
https://hacks.mozilla.org/2013/01/introducing-web-activities/
Concetti Base
21
Salvare un contatto
1
2
3
4
5
6
7
8
9
10
Questa API crea un oggetto con i dati del contatto e lo salva nella rubrica telefonica senza bisogno di
alcuna interazione da parte dellutente. Poich laccesso ai contatti comporta implicazioni riguardo la
privacy, questa API disponibile per le app con privilegi. Il modello di questa API prevede lutilizzo
di due callback ed un approccio condiviso da molte altre API. Forniamo quindi due funzioni,
success in caso di buona riuscita delloperazione e error in caso contrario da eseguire una volta che
si risolta lazione principale (in questo caso salvare un contatto).
Per ulteriori informazioni su questa API consultare la pagina dedicata alle Contacts API sul wiki
Mozilla.
1
2
3
4
5
6
7
8
9
10
Concetti Base
11
12
13
14
15
16
17
22
img.src = window.URL.createObjectURL(this.result.blob);
}
};
getphoto.onerror = function () {
// erro!
};
23
Concetti Base
Riassunto
In questo capitolo abbiamo visto che rispetto alle pagine web classiche, entrambi i tipi di applicazione
per Firefox OS (hosted e packaged) si basano su un file manifest. Abbiamo visto anche che dal
punto di vista della sicurezza le applicazioni packaged possono essere con privilegi o certificate.
Solo le app privilegiate e certificate possono accedere alle WebAPI di Mozilla. Le WebAPI non sono
disponibili per le applicazioni hosted o le pagine web classiche.
Adesso giunta lora di sporcarsi le mani e creare unapplicazione.
La prima app
In questo capitolo vedremo come realizzare un semplice Notepad, cio unapplicazione per prendere appunti. Prima di concentrarci sul codice cerchiamo di studiare il funzionamento di questa
applicazione.
La nostra idea di avere di tre schermate. La prima la schermata principale, la prima che lutente
vedr, in cui presentiamo lelenco delle note gi salvate. Se si fa clic su una nota (o se ne viene
aggiunta una) viene aperta la schermata con i dettagli, nella quale possibile modificare il titolo ed
il testo della nota scelta. Ecco come vorremmo che si presentassero.
25
La prima app
Dalla parte superiore dello schermo possibile cancellare una nota prescelta se si fa clic sul Cestino.
Questa azione aprir una finestra di conferma.
26
La prima app
Il codice sorgente di Memos disponibile nel Repository su Github ( possibile anche scaricarlo
come file .zip). Consiglio di scaricare i file, cos sar pi semplice seguire la guida. Unaltra copia
del codice sorgente disponibile nella cartella code della repository Github di questo libro.
Memos utilizza IndexedDB per salvare le note e il toolkit Gaia Building Blocks per creare le
interfacce. In un futuro aggiornamento il testo conterr molte informazioni su Gaia Building Blocks,
ma in questa prima versione mi limiter ad utilizzarlo. Per ulteriori informazioni sullargomento e
per sapere quali interfacce vi sono integrate visitare i link appena segnalati.
Il primo passaggio creare una cartella per lapplicazione di nome memos.
https://github.com/soapdog/memos-for-firefoxos
https://github.com/soapdog/memos-for-firefoxos/archive/master.zip
https://github.com/soapdog/memos-for-firefoxos
https://developer.mozilla.org/en-US/docs/IndexedDB/Using_IndexedDB
https://developer.mozilla.org/en-US/Apps/Design/Firefox_OS_building_blocks
La prima app
27
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
{
"name": "Memos",
"version": "1.1",
"description": "A simple memo taking app",
"launch_path": "/index.html",
"permissions": {
"storage": {
"description": "Required for storing and retrieving notes."
}
},
"developer": {
"name": "Andre Garzia",
"url": "http://andregarzia.com"
},
"icons": {
"60": "/style/icons/icon_60.png",
"128": "/style/icons/icon_128.png"
}
}
http://json.org
https://marketplace.firefox.com/developers/validator
https://developer.mozilla.org/docs/Apps/Manifest
28
La prima app
Campi
Descrizione
name
version
launch_path
permissions
developer
icons
Il nome dellapplicazione
La versione attuale dellapplicazione
Il file utilizzato per avviare unapplicazione
I permessi API richiesti, con molte informazioni
I contatti dello sviluppatore
Licona utilizzata in diversi formati
La parte pi interessante di questo file manifesto la richiesta per i permessi di storage per poter
utilizzare IndexedDB senza alcun limite di spazio disco(con questi permessi possiamo salvare
le note che vogliamo - anche se dobbiamo fare attenzione a non usare troppo spazio sul disco
dellutente!).
Ora che il file manifesto pronto, passiamo al codice HTML.
29
La prima app
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<link rel="stylesheet"
<link rel="stylesheet"
<link rel="stylesheet"
<link rel="stylesheet"
<link rel="stylesheet"
" />
<link rel="stylesheet"
css" />
<link rel="stylesheet"
<link rel="stylesheet"
<title>Memos</title>
</head>
type="text/css"
type="text/css"
type="text/css"
type="text/css"
type="text/css"
href="/style/base.css" />
href="/style/ui.css" />
href="/style/building_blocks.css" />
href="shared/style/headers.css" />
href="shared/style_unstable/lists.css\
type="text/css" href="shared/style_unstable/toolbars.\
type="text/css" href="shared/style/input_areas.css" />
type="text/css" href="shared/style/confirm.css" />
La prima riga dichiara che il documento utilizza il formato HTML5. Dalla linea 5 alla 15 vengono
inclusi i file CSS dei vari componenti da usare nellapp: testata, liste, campi testuali, ecc
La prima app
1
2
3
4
5
6
7
8
9
10
11
30
<body role="application">
<section role="region" id="memo-list">
<header>
<menu type="toolbar">
<a id="new-memo" href="#"><span class="icon icon-add">add</span></a>
</menu>
<h1>Memos</h1>
</header>
<article id="memoList" data-type="list"></article>
</section>
Nella schermata abbiamo incluso un <header> in cui mettiamo un pulsante che permetta di
aggiungere nuove note ed il nome dellapplicazione stessa. La schermata include un tag <article>
che utilizzato per mostrare il contenuto della nota. Useremo il pulsante e lID dellarticolo per
catturare gli eventi nella parte JavaScript.
Sottolineo il fatto che ogni schermata un semplice blocco di codice HTML. Costruire queste
schermate utilizzando diversi linguaggi su altri sistemi richiede molto lavoro. Tutto quello che
faremo dare ad ogni contenitore un ID specifico che richiameremo successivamente.
La prima schermata completa adesso vediamo la schermata di modifica.
La prima app
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
31
<p id="memo-area">
<textarea placeholder="Memo content" id="memo-content"></textarea>
</p>
<div role="toolbar">
<ul>
<li>
<button id="delete-memo" class="icon-delete">Delete</button>
</li>
</ul>
</div>
<form id="delete-memo-dialog" role="dialog" data-type="confirm" class="hidde\
n">
<section>
<h1>Confirmation</h1>
<p>Are you sure you want to delete this memo?</p>
</section>
<menu>
<button id="cancel-delete-action">Cancel</button>
<button id="confirm-delete-action" class="danger">Delete</button>
</menu>
</form>
</section>
La prima app
1
2
3
4
32
<script src="/js/model.js"></script>
<script src="/js/app.js"></script>
</body>
</html>
model.js
Utilizzeremo IndexedDB per salvare le note nel dispositivo. Avendo chiesto i permessi storage nel
file manifesto possiamo salvare quante note vogliamo - per non dobbiamo abusarne!
Infatti i dispositivi Firefox OS solitamente non hanno molta memoria da dedicare alle app e il loro
contenuto (le note nel nostro caso) ed sempre meglio essere consapevoli di quali dati vengono
memorizzati, inoltre gli utenti daranno un voto negativo a unapplicazione se consumer troppa
memoria senza motivo. Memorizzare troppo materiale porta a problemi di prestazioni e lapp
risulter lenta e poco reattiva. Al momento del caricamento su Firefox Marketplace, sar necessario
indicare nel modulo diretto ai revisori il motivo per cui lapp necessita di accesso illimitato alla
memoria per il suo funzionamento, se non lo segnalate vi verr esplicitamente richiesto dai revisori.
Nel caso non siate in grado di giustificare tale richiesta, i revisori respingeranno lapp, che quindi
non verr pubblicata sul sito.
La parte di codice in model.js che mostriamo qui sotto si occupa del collegamento e della creazione
dello storage.
https://developer.mozilla.org/en-US/docs/IndexedDB/Using_IndexedDB
La prima app
Importante: Questo codice scritto per essere capito velocemente e non per illustrare le migliori
tecniche di programmazione JavaScript. Nel codice sono presenti delle variabili globali (andr
allinferno per questo, lo so) tra le altre chicche. La gestione degli errori praticamente inesistente.
Lo scopo principale di questo testo insegnare il workflow di sviluppo di applicazioni per Firefox
OS e non i migliori pattern JS, quindi a seconda dei commenti migliorer il codice, sempre che non
abbia un brutto impatto sui principianti.
.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
33
La prima app
34
35
36
37
38
39
40
41
42
34
Importante: chiedo ancora perdono per aver utilizzato delle variabili globali, questo solo del
materiale utile allinsegnamento. Inoltre ho rimosso i commenti dal codice per risparmiare spazio
nel testo. Su Github il codice completo di commenti.
.
Il codice appena visto crea un oggetto db ed un oggetto request. Loggetto db utilizzato in altre
funzioni per manipolare le note memorizzate.
Nellimplementazione della funzione request.onupgradeneeded creiamo una nota di benvenuto.
Questa funzione eseguita quando lapplicazione viene lanciata per la prima volta (o quando la
versione del database cambia). In questo modo, al primo avvio dellapplicazione, il database conterr
una nota di esempio.
Una volta aperta la connessione al database e inizializzato il meccanismo di archiviazione, ora di
creare le funzioni basilari per manipolare le note.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function Memo() {
this.title = "Untitled Memo";
this.content = "";
this.created = Date.now();
this.modified = Date.now();
}
function listAllMemoTitles(inCallback) {
var objectStore = db.transaction("memos").objectStore("memos");
console.log("Listing memos...");
objectStore.openCursor().onsuccess = function (event) {
var cursor = event.target.result;
if (cursor) {
console.log("Found memo #" + cursor.value.id + " - " + cursor.value.\
title);
35
La prima app
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
inCallback(null, cursor.value);
cursor.continue();
}
};
}
function saveMemo(inMemo, inCallback) {
var transaction = db.transaction(["memos"], "readwrite");
console.log("Saving memo");
transaction.oncomplete = function (event) {
console.log("All done");
};
transaction.onerror = function (event) {
console.error("Error saving memo:", event);
inCallback({
error: event
}, null);
};
var objectStore = transaction.objectStore("memos");
inMemo.modified = Date.now();
var request = objectStore.put(inMemo);
request.onsuccess = function (event) {
console.log("Memo saved with id: " + request.result);
inCallback(null, request.result);
};
}
function deleteMemo(inId, inCallback) {
console.log("Deleting memo...");
var request = db.transaction(["memos"], "readwrite").objectStore("memos").de\
lete(inId);
request.onsuccess = function (event) {
console.log("Memo deleted!");
inCallback();
La prima app
59
60
36
};
}
In questo blocco di codice abbiamo creato un costruttore che produce nuove note con alcuni
campi gi inizializzati. Dopodich abbiamo implementato le altre funzioni per la presentazione,
il salvataggio e la cancellazione delle note. Molte di queste funzioni richiedono che sia passato un
parametro chiamato inCallback. Questo parametro esso stesso una funzione che verr invocata al
termine della funzione chiamante. Questo necessario per la natura asincrona di IndexedDB. Tutte
le callback hanno la medesima struttura di chiamata callback(error, value), con due parametri in
ingresso, in cui uno dei due assumer il valore null a seconda del risultato della funzione chiamante.
Siccome un testo per principianti ho scelto di non usare le Promises perch non tutti potrebbero
capirle. Consiglio di usare questi concetti per avere un codice pi pulito e facile da mantenere.
https://developer.mozilla.org/en-US/docs/Mozilla/JavaScript_code_modules/Promise.jsm/Promise
.
Ora che larchiviazione delle note e le funzioni di modifica sono state implementate, lavoriamo alla
struttura logica dellapplicazione nel file app.js.
app.js
Questo file contiene la logica dellapplicazione. Il codice sorgente troppo lungo da mostrare in una
volta sola, quindi verr diviso in parti per studiarlo meglio.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function displayMemo() {
document.getElementById("memo-title").value = currentMemo.title;
document.getElementById("memo-content").value = currentMemo.content;
}
function shareMemo() {
La prima app
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
37
Allinizio vengono dichiarate alcune variabili globali (bleah :-P!) per mantenere dei riferimenti
a elementi nel DOM che saranno utilizzati in alcune funzioni. La variabile globale di maggiore
interesse currentMemo, loggetto di riferimento per la nota che lutente sta visualizzando.
Le funzioni showMemoDetail() e displayMemo() lavorano in coppia. La prima carica la nota
selezionata in currentMemo e modifica il CSS degli elementi mostrati nella schermata di modifica.
La seconda prende il contenuto della variabile currentMemo e mostra la nota a schermo. Potremmo
mettere il codice nella stessa funzione ma averlo separato permette di divertirci di pi con nuove
implementazioni.
La funzione shareMemo() utilizza una WebActivity per aprire il programma predefinito per la posta
elettronica con il contenuto della nota selezionata.
https://hacks.mozilla.org/2013/01/introducing-web-activities/
La prima app
38
function requestDeleteConfirmation() {
deleteMemoDialog.classList.remove("hidden");
}
function closeDeleteMemoDialog() {
deleteMemoDialog.classList.add("hidden");
}
function deleteCurrentMemo() {
closeDeleteMemoDialog();
deleteMemo(currentMemo.id, function (err, succ) {
console.log("callback from delete", err, succ);
if (!err) {
showMemoList();
}
});
}
function showMemoList() {
currentMemo = null;
refreshMemoList();
listView.classList.remove("hidden");
detailView.classList.add("hidden");
}
La prima app
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
function refreshMemoList() {
if (!db) {
// HACK:
// this condition may happen upon first time use when the
// indexDB storage is under creation and refreshMemoList()
// is called. Simply waiting for a bit longer before trying again
// will make it work.
console.warn("Database is not ready yet");
setTimeout(refreshMemoList, 1000);
return;
}
console.log("Refreshing memo list");
var memoListContainer = document.getElementById("memoList");
while (memoListContainer.hasChildNodes()) {
memoListContainer.removeChild(memoListContainer.lastChild);
}
var memoList = document.createElement("ul");
memoListContainer.appendChild(memoList);
listAllMemoTitles(function (err, value) {
var memoItem = document.createElement("li");
var memoP = document.createElement("p");
var memoTitle = document.createTextNode(value.title);
memoItem.addEventListener("click", function (e) {
console.log("clicked memo #" + value.id);
showMemoDetail(value);
});
memoP.appendChild(memoTitle);
memoItem.appendChild(memoP);
memoList.appendChild(memoItem);
});
}
39
La prima app
40
window.onload = function () {
// elements that we're going to reuse in the code
listView = document.getElementById("memo-list");
detailView = document.getElementById("memo-detail");
deleteMemoDialog = document.getElementById("delete-memo-dialog");
// All the listeners for the interface buttons and for the input changes
document.getElementById("back-to-list").addEventListener("click", showMemoLi\
st);
document.getElementById("new-memo").addEventListener("click", newMemo);
document.getElementById("share-memo").addEventListener("click", shareMemo);
document.getElementById("delete-memo").addEventListener("click", requestDele\
teConfirmation);
document.getElementById("confirm-delete-action").addEventListener("click", d\
eleteCurrentMemo);
document.getElementById("cancel-delete-action").addEventListener("click", cl\
oseDeleteMemoDialog);
document.getElementById("memo-content").addEventListener("input", textChange\
d);
document.getElementById("memo-title").addEventListener("input", textChanged);
// the entry point for the app is the following command
refreshMemoList();
};
Ora che tutti i file sono pronti proviamo lapplicazione nel simulatore.
41
La prima app
42
La prima app
Fai clic sul pulsante Apri app, seleziona Apri app pacchettizzata e seleziona la cartella contenente
il file manifesto dellapplicazione Memos for Firefox Os.
43
La prima app
Se tutto funziona come previsto Memos verr aggiunta ai progetti del WebIde.
44
La prima app
Una volta aggiunta lapplicazione scegliamo la versione del simulatore che vogliamo usare e
avviamola. Una volta avviato possiamo installare Memos premendo il bottone triangolare e sul
simulatore verr avviata la nostra app.
45
La prima app
La prima app
46
Riassunto
In questo capitolo abbiamo creato la nostra prima applicazione per Firefox OS e labbiamo lanciata
nel simulatore. Nel prossimo capitolo vedremo uno strumento molto utile chiamato BoilerPlate,
un insieme di esempi che rispondono ad esigenze basilari di unapplicazione, come selezionare un
contatto dalla rubrica, far vibrare il telefono o controllare la carica della batteria, tutto questo
documentato con codice gi pronto e adatto ad ogni evenienza, dallo scattare una foto ad aggiungere
un contatto o far vibrare il telefono.
La prima app
47
Il boilerplate diviso in tre sezioni ma io ne aggiungo una quarta per gli altri dettagli.
AppCache
OffLine
Installare lapplicazione
Multilingua
Grafica di Gaia
Alcune di queste cose le abbiamo viste o le vedremo in questa fantastica guida. Quindi passiamo
agli argomenti che non sono stati ancora visti o non hanno un capitolo dedicato.
Offline
Con OffLine mi riferisco a del codice che permette di sapere se il dispositivo connesso sfruttando
loggetto window.navigator.connection che descritto sulla pagina MDN dedicata con i dettagli
tecnici e il supporto crossbrowser.
Il codice presente in due versioni:
Uno dei tanti pulsanti che usa lAPI diretta fornisce due informazioni: la banda disponibile
in MB (0 se offline, infinity se sconosciuta o solitamente la linea fissa) e se la connessione
a consumo.
Con AppCache per sapere se si utilizza lapplicazione in modalit offline, nel boilerplate
utilizzato per mostrare il pallino verde se si online.
Vediamo un attimo questi due codici:
1
2
3
http://mdn.beonex.com/en/DOM/window.navigator.connection.html
https://github.com/robnyman/Firefox-OS-Boilerplate-App/blob/gh-pages/js/webapp.js#L331
La prima app
1
2
3
4
5
48
Installare lapplicazione
Installazione applicazione vuol dire utilizzare le Open Web Apps. Vediamo come funziona il codice
di installazione e di verifica installazione. Prima di tutto verifichiamo se il sistema le supporta (con
navigator.mozApps) dopo di che inseriamo dei test di successo o fallimento dellinstallazione.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
if (navigator.mozApps) {
var checkIfInstalled = navigator.mozApps.getSelf();
checkIfInstalled.onsuccess = function () {
if (checkIfInstalled.result) {
// Already installed
var installationInstructions = document.querySelector("#installation\
-instructions");
if (installationInstructions) {
installationInstructions.style.display = "none";
}
}
else {
var install = document.querySelector("#install"),
manifestURL = location.href.substring(0, location.href.lastIndex\
Of("/")) + "/manifest.webapp";
install.className = "show-install";
install.onclick = function () {
var installApp = navigator.mozApps.install(manifestURL);
installApp.onsuccess = function() {
install.style.display = "none";
};
installApp.onerror = function() {
alert("Install failed\\n\\n:" + installApp.error.name);
};
};
}
};
} else {
console.log("Open Web Apps not supported");
}
La prima app
49
Come si pu vedere il codice molto semplice, si d lindirizzo del file manifest e si verifica se
stato installato. Per installare il boilerplate fate click sul simbolo pi in alto a destra.
Questo codice eseguito su Firefox OS, Firefox for Android e Firefox desktop aprir un mini pop up
per chiedere se installare lapplicazione.
WebActivity
Finalmente parliamo di una delle grandi novit per gli sviluppatori web! Finalmente potremo
accedere al sistema in modo pi profondo! Ho gi detto finalmente?
Scherzi a parte, in questa sezione possiamo accedere ad alcune delle azioni del sistema come fare una
telefonata o scattare una foto. Queste WebActivity purtroppo sono solo per Firefox OS e quindi il
testing solo con simulatore ma c chi sta lavorando ad una polyfill per supportare le web activity
anche da browser (dove possibile).
Non vedremo il codice nel dettaglio delle varie WebActivity, quindi rimando al file webapp.js, ma
per completezza ecco quelle rese disponibili da Firefox OS:
Cercare file
Scattare una foto
Registrare un video
Avviare una telefonata
Mandare un SMS
Aggiungere un contatto
Modificare un contatto
Condividere un sito
Condividere una foto sui social network
Condividere una foto via mail
Aprire un sito
Scrivere unemail (con lapplicazione di sistema)
Salvare un segnalibro
Aprire un video
Modificare le impostazioni del telefono
Praticamente vi stiamo dicendo di non pensare a come implementare tutte queste funzionalit dalla
vostra app. Se volete ve le diamo noi senza che voi dobbiate lavorarci.
Naturalmente limportanza di questa idea non limitata alle precedenti opzioni e basta, potete
registrare la vostra WebActivity personalizzata nella vostra app per fare pi o meno quello che vi
pare, dal selezionare foto di gattini a prendere i contatti da una rubrica segreta o rendere disponibile
un lettore di codici a barre.
+La lista completa delle WebActivity disponibili su Firefox OS la trovi qu
https://github.com/Mte90/moz-polyfills
https://github.com/robnyman/Firefox-OS-Boilerplate-App/blob/gh-pages/js/webapp.js
https://developer.mozilla.org/en-US/docs/Web/API/Web_Activities
La prima app
50
WebAPI
Questa sezione del boilerplate contiene sia esempi esclusivi per Firefox OS ma anche alcuni esempi
di tecnologie HTML5 di recente standardizzazione. Tra questi abbiamo le notifiche di sistema, il
blocco della rotazione o dello spengimento dello schermo che sono solo per Firefox OS mentre
vibrazione, verifica della connessione (ne abbiamo parlato prima), geolocalizzazione, quantit di
luce ambientale, prossimit dellutente allo schermo, accesso alla batteria sono invece API standard
e quindi disponibili a chiunque abbia un browser moderno.
API Privilegiate
Queste API sono particolari e sono disponibili solo per le app privilegiate e sono quasi tutte standard
HTML5.
Tra gli esempi disponibili abbiamo: verificare se lapplicazione in primo piano, accedere alle
immagini sul dispositivo, effettuare una richiesta ad un server e prendere i contatti dal telefono.
Questi esempi sono uno standard HTML5 mentre selezionare i contatti e fare richieste XHR
CrossDomain sono una peculiarit di Firefox OS.
Multilingua
Nel Boilerplate appena visto utilizzata una libreria JavaScript chiamata webL10n. Questa
libreria presente in Gaia ma si tratta di una versione modificata (questa la versione presente
nel boilerplate).
Grazie a webL10n il sito riconosce in automatico la lingua utilizzata dal dispositivo e carica le
traduzioni appropriate.
Al caricamento del file JavaScript della libreria viene caricato il file locales.ini che contiene i
riferimenti alle varie lingue disponibili dellapplicazione. Dopodich se c la lingua utilizzata dal
sistema provvede a sostituire i testi che gli abbiamo indicato alla creazione dellapp, se la lingua non
presente viene lasciata la versione base (dobbiamo indicarla noi).
Diamo unocchiata al codice prima di vedere come avviene la magia della localizzazione.
1
2
Con questo codice il boilerplate carica i file della lingua ma come sa dove agire per cambiare il
testo? La libreria si basa sugli attributi data-l10n-id che mettiamo agli elementi di cui vogliamo la
traduzione che deve contenere il nome di riferimento della stringa da mostrare.
Ecco un esempio per chiarire le idee.
http://robnyman.github.io/Firefox-OS-Boilerplate-App/
https://github.com/fabi1cazenave/webL10n/tree/master
La prima app
1
2
3
4
5
6
7
8
9
51
<html>
<head>
<script type="text/javascript" src="l10n.js"></script>
<link rel="prefetch" type="application/l10n" href="locales.ini" />
</head>
<body>
<button data-l10n-id="test" title="click me!">This is a test</button>
</body>
</html>
Il bottone ha una propriet data-l10n-id con attributo test, questo vuol dire che se nel file locales.ini
esiste una riga di testo simile a questa
1
2
3
[it]
test = Questo un test
test.title = Cliccami!
Il testo allinterno del bottone verr sostituito dal testo Questo un test nel caso io chieda la lingua
italiana.
Riassunto
Abbiamo visto molte funzionalit di Firefox OS e delle Open Web Apps tramite un semplice ma
completo boilerplate. Ricordati che per poter utilizzare le WebActivity o alcune API hai bisogno
dei permessi degli utenti e quinidi devi chiedere i permessi relativi compilando il file manifest
accuratamente. Abbiamo visto anche la questione multilingua che molto importante e di come
sia semplice integrare questa soluzione nel proprio lavoro.
https://github.com/robnyman/Firefox-OS-Boilerplate-App/blob/gh-pages/locales/locales.ini
https://github.com/robnyman/Firefox-OS-Boilerplate-App/blob/gh-pages/locales/en-US/manifest.properties
https://github.com/robnyman/Firefox-OS-Boilerplate-App/blob/gh-pages/locales/en-US/app.properties
53
54
Al momento della stesura di questo testo, la maggior parte degli smartphone Firefox OS in
commercio utilizzano schermi di 480x320 pixel con una densit dei punti di 96 dpi. Tuttavia c
da aspettarsi che questa situazione cambi nel tempo: gli schermi avranno dimensioni maggiori e
maggiori densit dei punti (come gli schermi Retina di Apple).
Nelleventualit di future verifiche delle proprie app, si segua questo consiglio: non basare mai
i propri CSS su una specifica risoluzione schermo o densit dei punti. Piuttosto, si dovrebbero
utilizzare le media query e pensare ad un layout flessibile (responsive n.d.t) per permettere allapp
di adattarsi alle varie risoluzioni schermo. Per saperne di pi sul layout flessibile consiglio la lettura
di questi libri: Responsive Web Design e Mobile First.
Riepilogando, la Visualizzazione flessibile ci permette di provare la nostra app a varie risoluzioni
dello schermo senza dover ridimensionare la finestra di Firefox. A mio modesto avviso, la Visualizzazione flessibile uno degli strumenti di sviluppo pi utili a disposizione - purtroppo ha un
Lacronimo dpi denota lunit di misura della densit dei punti, in inglese dots per pixel, cio punti per pollice (1 pollice corrisponde a 2,54 cm).
Per ulteriori informazioni leggere larticolo di Wikipedia sullargomento.
http://www.abookapart.com/products/responsive-web-design
http://www.abookapart.com/products/mobile-first
55
grande limite: attualmente non consente di provare differenti configurazioni di densit dei punti,
quindi ricordatevi di usare anche dispositivi diversi.
Strumenti di sviluppo
Gli strumenti di sviluppo di Firefox sono simili a quelli disponibili con lestensione Firebug o in
altri browser di nuova generazione. Utilizzando questi strumenti possibile eseguire ed effettuare
il debug del codice JavaScript tramite la console di Firefox e manipolare sia il DOM che i fogli di
stile CSS della pagina.
Esistono diversi modi per invocare la Console:
Dal menu Strumenti -> Sviluppo web -> Console del browser (Ctrl+Maiusc+J)
Facendo clic col tasto destro nella pagina da analizzare e scegliendo Ispeziona elemento e
quindi selezionando la scheda Console.
https://developer.mozilla.org/en-US/docs/Web/API/console
56
Console JavaScript
Oltre alla Console JavaScript sono disponibili altri strumenti come lEditor stili, il Monitor di rete,
il Profiler JavaScript, il Debugger JavaScript, lo strumento Analisi pagina e molti altri.
Nellapplicazione che abbiamo creato nel precedente capitolo, abbiamo utilizzato la Console web per
verificare lo stato di avanzamento del nostro progetto. Questo un modo elegante e molto efficace di
effettuare il debug delle nostre app, anche se alcuni sviluppatori continuano a utilizzare listruzione
alert() allinterno di tutti i loro sorgenti JavaScript come strumento di debugging.
Lutilizzo dellistruzione alert() davvero un metodo barbaro e deprecabile, in quanto se ci si
dimentica di rimuovere tutti gli alert() dal sorgente prima di rilasciare lapp, sar lutente a pagarne
le conseguenze.Lutilizzo della Console permette di evitare questo tipo di problemi: la Console,
infatti, consente di inserire questi messaggi, in maniera semplice e innocua, in una interfaccia al
quale di solito un utente non accede, risultando cos invisibile. Lutilizzo della Console inoltre evita
https://developer.mozilla.org/en-US/docs/Tools/Style_Editor
https://developer.mozilla.org/en-US/docs/Tools/Network_Monitor
https://developer.mozilla.org/en-US/docs/Tools/Profiler
https://developer.mozilla.org/en-US/docs/Tools/Debugger
https://developer.mozilla.org/en-US/docs/Tools/Page_Inspector
57
di dover rimuovere le istruzioni che generano i messaggi di log dal codice sorgente, a meno che
non lo si voglia davvero fare, ovviamente. Questo ci aiuter nelle operazioni di manutenzione e di
debugging del codice sorgente nel caso ci fossero dei bug imprevisti (come accade solitamente con
qualunque codice sorgente).
Imparare a utilizzare in modo appropriato gli strumenti di sviluppo inclusi in Firefox (o in qualunque
altro browser in uso) un importante passo nel processo di diventare uno sviluppatore migliore. Per
questo motivo consiglio a tutti di consultare i link riportati qui sopra e approfondire la propria
conoscenza degli strumenti di sviluppo inclusi in Firefox.
Uno speciale strumento che non stato sin qui menzionato il Debugger remoto. Questo strumento
consente di connettersi a uno smartphone Android o Firefox OS e utilizzare gli altri strumenti di
sviluppo per effettuare il debug delle pagine web aperte su questi dispositivi. Non vi preoccupate, lo
vedremo nel prossimo capitolo con un dispositivo dotato di Firefox OS!
Riassunto
In questo capitolo sono stati descritti in maniera sintetica gli strumenti di sviluppo inclusi in
Firefox. Questi strumenti renderanno il processo di sviluppo pi semplice, specialmente se utilizzati
assieme al Firefox OS Simulator. Rappresentano una combinazione indispensabile per permetterci
di sviluppare unapp. Nel prossimo capitolo andremo a conoscere pi da vicino il simulatore e
impareremo a farne un buon uso.
https://developer.mozilla.org/en-US/docs/Tools/Remote_Debugging
WebIde
Abbiamo scaricato il simulatore nel capitolo precedente riguardo lambiente di lavoro e labbiamo
usato nel capitolo riguardo la prima applicazione. Ora tempo di dare unocchiata pi approfondita
al WebIde e le sue funzionalit base.
Per saperne di pi, date unocchiata alla pagina dedicata al WebIde su MDN.
Ricordati: se stai usando un dispositivo Firefox OS 1.1 o ancora pi vecchio devi usare il
Simulatore 1.1 e non lApp Manager. Questo simulatore spiegato nel prossimo capitolo.
Aggiungere Applicazioni
Dal WebIde puoi accedere sia alle applicazioni remote (hosted) che locali (packaged). Vediamo come
fare.
Da il men Progetti puoi scegliere tra queste opzioni:
https://developer.mozilla.org/it/docs/Tools/WebIDE
59
WebIde
I progetti che hai gi aperto vengono elencati sotto letichetta I miei progetti
60
WebIde
Il primo il modello base, valido sia per packaged che hosted e genera un file sul vostro computer
che potete poi usare come pensate meglio.
Il secondo un modello per unapp di tipo privileged, quindi per forza una app packaged, con una
struttura minima da cui partire.
Il secondo un modello per unapp di tipo privileged, quindi per forza una app packaged, gi
funzionante e finita.
WebIde
61
Abbiamo gi parlato di applicazioni packaged durante la creazione della nostra prima applicazione,
adesso ora di provarla.
Una volta premuto Apri App Packaged viene apera una finestra da cui poter scegliere la cartella
che contiene i file che ci interessano.
Per poter essere considerata come una app packaged una cartella ha bisogno di contenere un file
manifest.webapp valido.
Se tutto va a buon fine la tua app verr caricata nel WebIde e vedrai una schermata come la seguente.
62
WebIde
Una volta premuto Apri App Hosted viene aperta una finestra in cui puoi inserire lindirizzo web
a cui troviamo la tua applicazione, ovvero anche in questo caso lindirizzo web in cui disponibile
il file manifest.webapp.
WebIde
63
Per poter essere considerata come una app hoste un sito ha bisogno di un file manifest.webapp
valido.
Problemi con le applicazioni hosted
Se stai realizzando unapplicazione hosted dovrai provarla con un server web. Ci sono degli errori
che sono caratteristici quando usiamo un server web, come servire il manifest con il MIME type
sbagliato, problema che si conclude con limpossibilit di installare lapp.
Nota che il simulatore non segnala errori riguardo il MIME type sbagliato, importante controllare
queste cose prima di caricare lapplicazione nel Mozilla Marketplace.
Molte delle applicazioni hosted non sono applicazioni realizzate specificatamente per Firefox OS ma
si tratta di siti realizzati in modo responsive che adattano il layout della pagina allo spazio disponibile
sullo schermo del dispositivo. Queste applicazioni web hanno di solito un backend complesso che
serve allapplicazione per funzionare e per questo necessario provarla in un vero web server.
Per testare sul campo che tutto sia a posto avvia il simulatore, naviga fino al tuo sito tramite il
browser del simulatore e controlla che il simulatore ti segnali che la pagina una Open Web App
installabile.
Avviare il simulatore
Per avviare il simulatore dopo averlo installato basta sceglierlo dal men che appare quando premi
il pulsante Scegli runtime, le versioni installate vengono elencate sotto letichetta Simulatori
64
WebIde
Avviare lapplicazione
Una volta che il WebIde mostra lapplicazione avvia il simulatore e premi il pulsante triangolare per
installare lapplicazione ed avviarla sul simulatore.
Licona dellapplicazione apparir nella schermata principale del Simulatore dopo la fine dellinstallazione. Fai clic sullicona per lanciarla.
65
WebIde
Aggiornare lapplicazione
Ogni volta che si cambiano i file e si vuole provare nel simulatore le modifiche sar necessario
premere il pulsante triangolare che reinstaller lapplicazione nel simulatore.
Debug
Dopo che lapplicazione sar installata nel simulatore potremo fare il debug it facendo clic sul
pulsante Debug del WebIde, il pulsante il cerchio con due righe verticali allinterno. Verr aperta
la Console JavaScript relativa allapplicazione.
Il terzo il pulsante che avvia la Console per il Debug
Pulsante di Debug
Dopo il clic su questo pulsante verr aperta una schermata come questa:
puoi anche usare la scorciatoia da tastiera Ctrl + r
Alternativamente puoi premere il pulsante F12 della tua tastiera per aprire e chiudere la console del WebIde
66
WebIde
COn gli strumenti connessi allapplicazione puoi provare il tuo codice JavaScript, fare il debug del
DOM, modificare lo stile, ecc esattamente come se usassi gli strumenti per sviluppatori di Firefox.
Una volta che lapplicazione avviata sul simulatore tempo di provarla su di un dispositivo reale.
WebIde
67
effettuano toccando uno touchscreen e premendo con le dita dei pulsanti reali. Unesperienza utente
e sviluppatore completamente diversa.
Per sottolineare limportanza di effettuare dei test su un dispositivo reale, racconter un fatto
personale. Alcuni anni fa Raphael Eckhardt (il designer della copertina di questo testo) e io stavamo
realizzando un puzzle game simile a Bejeweled. Il nostro gioco consisteva nel trascinare e posizionare
dei pezzi su una tavola e funzionava abbastanza bene sul simulatore.
Quando abbiamo provato il gioco su un telefono reale ci siamo resi conto che i componenti del gioco
non erano ottimizzati per la piattaforma mobile: quando posizionavamo la mano sullo schermo tutto
scompariva dietro la mano. Inoltre i componenti di gioco erano troppo piccoli per le dita, quindi gli
utenti non potevano rendersi conto di quello che stavano facendo, in poche parole linterfaccia non
era un granch. Il problema era che noi avevamo effettuato i nostri test utilizzando il mouse e il
puntatore del mouse molto piccolo. Quando abbiamo provato con le nostre dita cicciotelle ci
siamo resi conto che dovevamo rielaborare linterfaccia.
Per evitare di avere unesperienza cos frustrante indispensabile verificare sempre lapp su un
dispositivo reale O ancora meglio su qualunque dispositivo si abbia a disposizione. Effettuare dei
buoni test su dei semplici prototipi molto importante per non dover perdere tempo e denaro a
rimodificare tutto ogni volta.
Da adesso se hai installato laddon per Firefox ADB Helper verr segnalato al WebIde che esiste il
tuo dispositivo e questo verr aggiunto sotto letichetta Dispositivi USB.
Puoi decidere di usare il tuo dispositivo al posto del simulatore, andando quindi ad installare la tua
app su quello.
Al primo collegamento tra dispositivo e WebIde apparir un messaggio di avviso sul telefono;
dobbiamo dare il permesso al WebIde di agire sul telefono quindi scegliamo di confermare il
collegamento.
se lavori in ambiente Windows, altrimenti non ne hai bisogno
68
WebIde
Dispositivo connesso!
Una volta che la connessione effettuata sar possibile usare i pulsanti Aggiorna e Debug nel
WebIde per aggiornare e fare il debug dellapplicazione sul dispositivo connesso come con il
simulatore.
Riassunto
Per riassumere, il WebIde fantastico. Molto meglio rispetto alla vecchia estensione del Firefox OS
1.1 Simulator e anche meglio dellApp Manager.
Adesso abbiamo a disposisizione un ambiente di sviluppo completo con cui possiamo gestire tutto
il ciclo del nostro lavoro.
Arrivati a questo punto avrai la sensazione di aver capito come stanno andando le cose, quali sono
gli strumenti che ti servono e come dovrebbe procedere il tuo lavoro quando vuoi realizzare una app
per Firefox OS.
Nel prossimo capitolo parleremo della vecchia versione del Simulatore di Firefox OS 1.1. Questo
studio necessario se si devono connettere dispositivi con Firefox OS 1.1. Il capitolo molto simile
a a questo infatti i contenuti sono gli stessi ma cambiano le interfacce degli strumenti.
Dopo il capitolo sul simulatore parleremo della distribuzione della tua applicazione.
Il Simulatore Firefox OS
Gestore App
Attenzione: Questo capitolo presente solo per una compatibilit per i dispositivi con
Firefox OS 1.1. Il metodo attuale per provare e fare il debug delle applicazioni ilWebIde
di cui abbiamo parlto nel capitolo precedente. Il contenuto di questo capitolo per quelle
persone che devono provare le applicazioni sulla versione 1.1 di Firefox OS.
Il Simulatore Firefox OS
70
Abbiamo installato il Simulatore Firefox OS nel capitolo Ambiente di sviluppo per Firefox OS e
lo abbiamo utilizzato nel capitolo La prima app. giunta lora di approfondire la conoscenza del
simulatore e imparare come effettuare le operazioni pi comuni.
Per ulteriori informazioni fare riferimento alla documentazione di Firefox OS Simulator su MDN.
Aggiungere Applicazioni
possibile aggiungere sia applicazioni hosted che packaged al simulatore. Vediamo come fare.
71
Il Simulatore Firefox OS
Dopo aver fatto clic sul pulsante evidenziato nellimmagine,si aprir una finestra di dialogo di
selezione file. Per aggiungere lapp prescelta al simulatore, sar sufficiente trovare la cartella
dellapplicazione. Se non ci sono errori nel file manifesto e nel file che avvia lapp, essa verr avviata
nel simulatore. Se il file manifesto contiene degli errori verranno riportati nel Gestore App.
Ogni volta che lapp verr aggiornata sar necessario fare clic sul pulsante Aggiorna per aggiornare
lapplicazione nel simulatore in esecuzione (in alternativa possibile utilizzare la scorciatoia da
tastiera CMD/CTRL+R dalla finestra del simulatore).
72
Il Simulatore Firefox OS
dispositivi e risoluzioni. Solitamente queste app web funzionano grazie a un complesso back end
che deve essere in esecuzione per consentire un loro corretto funzionamento ed proprio per questo
motivo che si rende necessario verificarne il funzionamento con un vero server web per assicurarsi
che tutto funzioni correttamente.
Per caricare unapp hosted nel simulatore, inserire nella casella di testo, nel box in basso a sinistra,
lURL completa del manifesto dellapp e fare clic sul pulsante +.
Dopo aver fatto clic sul pulsante, il simulatore verificher il file manifesto e, se non verranno rilevati
errori, lapp verr eseguita allinterno del simulatore. Eventuali errori, analogamente a quanto
avviene per le app packaged, verranno riportati nel Gestore (ad esempio, app submission to the
Marketplace needs at least an 128 icon).
Come per le app packaged, ogni volta che lapp verr aggiornata sar necessario fare clic sul pulsante
Aggiorna per aggiornare la versione in esecuzione nel simulatore ( anche possibile utilizzare la
scorciatoia da tastiera CMD/CTRL+R dalla finestra del simulatore).
Debug
Una volta che lapp stata aggiunta al simulatore, accedendo al Gestore sar possibile effettuarne il
debug facendo clic sul pulsante Avvia Simulatore che si trova in basso nel gestore applicazione,
al clic apparir la schermata che permette di eseguire una versione specifica del simulatore (se
presente) e di installarne altri. Facendo clic su Debug accanto al pulsante Aggiorna verr lanciata
lapplicazione sul simulatore. A questo punto, si aprir unistanza della Console JavaScript connessa
allapp in esecuzione nel simulatore. In basso sar possibile vedere il contenuto nel file manifest
tramite visualizzazione ad albero.
73
Il Simulatore Firefox OS
Il pulsate da premere
Alla pressione del pulsante scelto verr mostrata una schermata simile a quella di questa immagine:
Con gli strumenti di sviluppo connessi allapplicazione sar possibile verificarne il funzionamento
Javascript, effettuare il debug del DOM, modificare lo stile ecc. Come amano dire i ragazzi delle
startup Provare finch non pronta.
Quando lapp risulter funzionante nel simulatore, sar tempo di provarla su un vero dispositivo.
Il Simulatore Firefox OS
74
75
Il Simulatore Firefox OS
Dispositivo connesso!
76
Il Simulatore Firefox OS
Non la foto migliore del mondo ma mostra la finestra dei permessi (scusate per la faccia ma erano le 4:25 di
mattina)
Con lapplicazione in esecuzione nel dispositivo possibile usare il remote debugging per aprire
unistanza della Console JavaScript collegata con lapp in modo da effettuare il debug.
Nel Gestore App, facendo clic su Dispositivo si apre una schermata con le informazioni del
dispositivo collegato o del simulatore.
Da questo dispositivo si possono debuggare le applicazioni installate tra cui anche quelle di sistema.
77
Il Simulatore Firefox OS
In questa tabella c un riassunto dei permessi utilizzabili nel manifest a seconda del tipo di
applicazione che abbiamo visto qualche pagina fa.
Riassunto
Riassumendo, il simulatore Firefox OS spettacolare per creare applicazioni specifiche per Firefox OS
- ma ha alcuni limiti se si vuole sviluppare unapp che funzioni su una maggior gamma di dispositivi
(ad esempio al momento non possibile emulare il comportamento di Firefox OS su un tablet).
A questo punto del testo, oltre a una sensazione di incredibile forza, si dovrebbe, o cos mi auguro,
riuscire a comprendere il workflow necessario per sviluppare unapp Firefox OS. Nel prossimo
capitolo vedremo come distribuire unapplicazione agli utenti.
Distribuire le app
Ora che la nostra applicazione pronta, abbiamo bisogno di trovare un modo per renderla disponibile
ai nostri utenti. Nel capitolo introduttivo avevo accennato che, diversamente da Apple, Mozilla
non obbliga a utilizzare il proprio canale di distribuzione - lasciando ognuno libero di esprimere
la propria creativit. In questo capitolo impareremo come distribuire la nostra app al di fuori del
canale ufficiale del Firefox Marketplace.
A mio modesto avviso, non utilizzare il canale ufficiale Mozilla per distribuire unapp conveniente
in questi due casi:
1. Si sta sviluppando unapp per uso interno aziendale o per una ristretta cerchia di utenti.
Pubblicandola su Firefox Marketplace, lapp sar disponibile a chiunque e si render necessario
implementare un sistema di autenticazione per consentire lutilizzo solo agli utenti autorizzati.
Ad esempio, nelle prime versioni dellapp Evernote era richiesta lidentificazione sui loro
server prima di poterla utilizzare.
2. Si dispone gi di un grosso bacino dutenza che possibile sfruttare per distribuire lapp. Un
esempio potrebbe essere un giornale, come il Financial Times, che pu limitarsi a rendere
disponibile lapp sul proprio sito per raggiungere la quasi totalit dei propri utenti. bene
ricordare che possibile distribuire lapp sia su Firefox Marketplace, sia su un canale esterno,
in questo modo sar possibile sfruttare il canale di marketing preesistente e utilizzare Firefox
Marketplace per raggiungere nuovi utenti.
Il processo di distribuzione delle app packaged e delle app hosted simile, anche se utilizzano delle
funzioni differenti. Ecco perch tratter i due casi separatamente. Indipendentemente dal fatto che
lapp sia pacchettizzata o ospitata, il procedimento pi o meno lo stesso: sar necessario rendere
disponibile un pulsante o un link nella pagina, denominato Fai clic per installare lapp, o utilizzare
un particolare URL che quando aperto attiva lesecuzione della routine di installazione. In entrambi
i casi, allutente finale verr presentata una finestra di dialogo in cui gli verr chiesto di confermare
linstallazione.
App hosted
Nel caso la vostra app sia disponibile sul web sotto forma di un sito come facciamo a chiedere
allutente di installare la nostra app?
Ecco che qu arriva in soccorso Firefox ed una WebApi. Grazie a questo strumento possiamo chiedere
allutente di installare il nostro lavoro quando viene visitata la nostra pagina.
http://marketplace.firefox.com
Distribuire le app
79
1
2
3
4
5
6
7
8
Nellesempio riportato qui sopra manifestURL riporta lindirizzo del file manifest. Allesecuzione di
questo codice, il sistema chieder allutente se desidera installare lapp e, a seconda della risposta,
richiamer la callback appropriata: success in caso di risposta affermativa e error in caso contrario.
Per ulteriori informazioni su questa API consultare la pagina su MDN sullinstallazione delle app.
App pacchettizzate
Linstallazione di app pacchettizzate funziona in modo analogo, per in questo caso anzich
utilizzare la funzione mozApps.install() utilizzeremo mozApps.installPackage(), come mostrato
nel codice desempio riportato qui di seguito.
Code for packaged app installation
1
2
3
https://developer.mozilla.org/docs/Apps/JavaScript_API
Distribuire le app
80
Riassunto
In questo capitolo sono stati trattati i metodi di distribuzione delle app alternativi al sito Firefox
Marketplace grazie allutilizzo della API di Installazione e gestione delle Open Web Apps.
Questa parte lavevamo accennata nel capitolo sul boilerplate ma in questo capitolo abbiamo
visto le differenze ed alcuni esempi duso alternativi. Esistono molte altre routine disponibili, ad
esempio per controllare se lapplicazione installata (in questo modo sar possibile nascondere il
pulsante Fai clic qui per installare). Per ulteriori informazioni su queste API consultare la pagina
di MDN dedicata allinstallazione delle app (s, avete ragione, questo link non nuovo, per ci
sono informazioni importanti che dovete assolutamente conoscere).
Nel prossimo capitolo impareremo come distribuire la nostra app attraverso il Marketplace Firefox.
boilerplate.md
https://developer.mozilla.org/docs/Apps/JavaScript_API
Firefox Marketplace
Firefox Marketplace
Firefox Marketplace il negozio online dal quale possibile scaricare o acquistare applicazioni
per Firefox OS, Firefox e Firefox per Android. Questo il principale canale di distribuzione per
le app Firefox OS, tuttavia non lunica alternativa possibile. Se sei interessato a distribuire app
esternamente al Marketplace, leggi il capitolo precedente.
Per pubblicare unapp sul Marketplace necessario effettuare lidentificazione tramite Mozilla
Persona. Sar sufficiente fare clic sul pulsante Registrati e seguire le istruzioni. Una volta
effettuato laccesso al Marketplace sar possibile pubblicare lapp.
http://marketplace.firefox.com
https://login.persona.org/about
Firefox Marketplace
82
83
Firefox Marketplace
Un errore comune a molti sviluppatori quello di selezionare la cartella che contiene i file dellapp
e di comprimerla. Come risultato il file zip contiene una cartella che a sua volta contiene lapp vera
e propria. Questo non il modo corretto per creare larchivio zip di unapplicazione Firefox OS.
Il modo corretto di creare larchivio zip consiste nel selezionare tutti i file e le cartelle dellapp in
modo che il file manifesto sia nel primo livello dellarchivio. Su sistemi operativi Mac e Linux
possibile aprire il Terminale, navigare fino alla directory dellapp e eseguire il comando zip -r
myapp.zip * per ottenere il risultato desiderato, come mostrato nella schermata sottostante.
84
Firefox Marketplace
Le mie app
Arrivati nella pagina di gestione dei caricamenti, fare clic su Invia unapp dal menu superiore.
Invio di unapp
Come possibile notare dallo schermata qui sotto, questo link aprir il modulo per linvio di nuove
app.
85
Firefox Marketplace
86
Firefox Marketplace
Dalla schermata mostrata qui sopra, possibile notare che lapp da me caricata non presenta errori,
ma riporta 6 avvisi. Ignorando la discussione degli avvisi per non complicare eccessivamente la
trattazione, concentriamoci sul significato della voce Requisiti minimi della nostra app. In questo
specifico caso, lultima opzione Smartphone-Sized Displays (qHD) dovrebbe essere deselezionata in
quanto la nostra applicazione si adatta a schermi di qualunque dimensione.
Il passaggio successivo denominato Passaggio #3: dettagli ed quello in cui si dovranno inserire
delle informazioni dettagliate sullapp, come categoria, testo descrittivo, qualche screenshot, ecc
87
Firefox Marketplace
Basta scegliere Runtime > Screenshot perch venga salvata nella cartella Immagini del vostro
computer la schermata che vedete al momento sul simulatore. Ecco la schermata che abbiamo
salvato.
88
Firefox Marketplace
89
Firefox Marketplace
Firefox Marketplace
90
Sicurezza
Per maggiori informazioni, fate riferimento alla pagina dedicata su MDN.
Il manifest deve essere fornito dallo stesso origin dellapplicazione quindi lo stesso dominio, deve
essere fornito con il mime-type application/x-web-app-manifest+json e lapplicazione non deve
contenere iframe. Questo impedisce ad altre persone di fare applicazioni hosted il cui sito non di
loro gestione.
Privacy
Per lapprovazione deve essere presentata una privacy policy ma non ci sono requisiti specifici sul
formato o contenuto. Ecco un template di esempio con del materiale di riferimento e consigli.
https://marketplace.firefox.com/developers/docs/submission
https://wiki.mozilla.org/Apps/Security
https://github.com/flamsmark/privacy-policy-template
https://developer.mozilla.org/en-US/Marketplace/Publishing/Privacy_policies
Firefox Marketplace
91
Contenuto
Non deve contenere materiale pornografico, codice maligno o promozione di materiale illegale/gioco
dazzardo/servizi illegali. Potremmo dire: regole del buon senso!
Funzionalit
Il revisore deve provare le funzionalit principali dellapplicazione, se ci sono piccoli problemi tecnici
o problemi grafici potr essere approvata. Inoltre, come abbiamo gi detto, non deve compromettere
il sistema o la sua stabilit.
Usabilit
Lo sviluppatore deve cercare di ottimizzare lapplicazione sia a livello di layout che di piattaforma.
Dettaglio da non trascurare che Firefox OS non ha pulsanti fisici quindi deve avere dei pulsanti di
navigazione. Cosa molto importante se qualcosa deve essere oggetto di click/tocco deve avere delle
dimensioni usabili.
Alcuni consigli
Se stai realizzando un gioco consiglio di presentare le istruzioni subito invece della partita gi avviata
e specificare se lapplicazione per Firefox Desktop/Firefox for Android/Firefox OS mobile o Firefox
OS per tablet.
Inserisci dei bei screenshot dellapplicazione che sono una vetrina del tuo lavoro.
Riassunto
Complimenti! La propria nuova applicazione ora su Firefox Marketplace e ci si sta apprestando a
esplorare un nuovissimo tipo di mercato.
=======
Spero che la lettura di questa veloce guida sia stata piacevole. Ho in mente di aggiornare e ampliare
spesso questa guida, quindi consiglio di tenere gli occhi aperti e iscriversi per ricevere le notizie sul
suo aggiornamento. Se si scaricato questo testo dal sito Leanpub non ci sono problemi: si ricever
automaticamente unemail che informer di nuovi aggiornamenti. Se invece stato scaricato da
altri siti, il mio consiglio quello di riscaricarlo da pagina ufficiale su Leanpub e registrare il
http://leanpub.com/quickguidefirefoxosdevelopment
Firefox Marketplace
92
proprio indirizzo email. Ovviamente tutto gratuito e, no, non verranno mai inviati messaggi di
spam, promesso.
Invito tutti i lettori ad inviarmi le proprie opinioni su questo lavoro (in inglese). Questo testo
stato scritto nelle notti precedenti una conferenza tecnica, quindi si pu intuire quanto io
sia affezionato a questo progetto e quanto vorrei che avesse successo. possibile inviare le
proprie opinioni via Twitter al mio account @soapdog o al mio indirizzo di posta elettronica
fxosquickguide@andregarzia.com. Il mio sito web http://andregarzia.com.
Ora che si entrati a far parte del gruppo di sviluppatori di app Firefox OS, il prossimo passo quello
di unirsi al gruppo pi esteso della comunit Mozilla, aiutandoci a mantenere il Web libero e creato
dagli utenti per gli utenti.
possibile unirsi a noi visitando http://www.mozilla.org/contribute/ e aiutare la crescita di Firefox
OS.
http://twitter.com/soapdog
mailto:fxosquickguide@andregarzia.com
http://andregarzia.com
http://www.mozilla.org/en-US/contribute/
Altro
In questo capitolo vedremo in modo veloce alcune tecnologie che ci possono essere utili nello
sviluppo per Firefox OS.
Action menu
Buttons
Confirm
Drawer
Edit Mode
Filters
Headers
Input Areas
Lists
Progress And activity
Scrolling
Seek Bars
http://buildingfirefoxos.com/building-blocks/
http://buildingfirefoxos.com/building-blocks/action-menu.html
http://buildingfirefoxos.com/building-blocks/buttons.html
http://buildingfirefoxos.com/building-blocks/confirm.html
http://buildingfirefoxos.com/building-blocks/drawer.html
http://buildingfirefoxos.com/building-blocks/edit-mode.html
http://buildingfirefoxos.com/building-blocks/filters.html
http://buildingfirefoxos.com/building-blocks/headers.html
http://buildingfirefoxos.com/building-blocks/input-areas.html
http://buildingfirefoxos.com/building-blocks/lists.html
http://buildingfirefoxos.com/building-blocks/progress-and-activity.html
http://buildingfirefoxos.com/building-blocks/scrolling.html
http://buildingfirefoxos.com/building-blocks/seek-bars.html
94
Altro
Status
Switches
Tabs
Toolbars
Value Selector
Come si pu vedere ci sono molte interfacce e opzioni possibili per avere la stessa grafica del sistema
un modo semplice. Inoltre presente una sezione dedicata alle icone tramite Font Icon.
Non finita qui ci sono anche le transizioni e per chi lavora con Photoshop ci sono anche i file
psd per unapproccio grafico al lavoro.
Web Components
I Web Components sono una tecnologia emergente che attualmente nello stato di Working Draft
dal W3C ma viene gi supportata da Chrome e Firefox.
La caratteristica principale di questa nuova tecnologia la personalizzazione di HTML, possiamo
creare dei nuovi tag, definendone il comportamento, e questi verranno aggiunti alla nostra su
richiesta.
Questa idea permette di avere ad esempio un tag <map> per visualizzare una mappa tramite Google
Maps o OpenStreetMap, un tag <calendar> per permettere allutente di scegliere un giorno dal
calendario, <qr> o <barcode> per mostrare un codice qr o un codice a barre personalizzati, etc, etc
Questa tecnologia retrocompatibile infatti se volete essere compatibili con una versione datata
di un browser e usare i Web Components basta usare una polyfill che vi viene data dal progetto
Polymer di Google.
La libreria Polymer integrata nella raccolta di Web Components Brick 2.0, sponsorizzata da
Mozilla. In questa guida li introdurremo semplicemente senza andare nei dettagli (un po come
abbiamo fatto con Gaia Building Blocks).
Attualmente sono disponibili in Brick i seguenti componenti, che potete gi utilizzare.
Barra dellapplicazione - una comoda barra per contenere titolo e pulsanti
http://buildingfirefoxos.com/building-blocks/status.html
http://buildingfirefoxos.com/building-blocks/switches.html
http://buildingfirefoxos.com/building-blocks/tabs.htm
http://buildingfirefoxos.com/building-blocks/toolbars.html
http://buildingfirefoxos.com/building-blocks/value-selector.html
http://buildingfirefoxos.com/transitions/app-invokes-app.html
http://buildingfirefoxos.com/downloads/
http://www.w3.org/TR/2013/WD-components-intro-20130606/
http://www.polymer-project.org/
http://mozbrick.github.io/
http://mozbrick.github.io/docs/brick-appbar.html
95
Altro
Per mostrare luso di questi componenti, Daniele ha realizzato un boilerplate di nome Brickly che
potete studiare per prendere confidenza con i Web Components.
Non nellinteresse della guida approfondire questa libreria ma solo pubblicizzare questo materiale
gi disponibile alluso.
96
Altro
Verrete indirizzati alla schermata di creazione della repository; qui dovrete inserire il nome della
vostra applicazione e una breve descrizione della stessa, lasciando i restanti campi immodificati
premete create repository. La repository sar quindi creata automaticamente e vi troverete nella
pagina del progetto.
In questa nuova schermata presente una barra sulla destra che permette di gestire il progetto, fate
97
Altro
click su Settings
e scorrete fino alla sezione che ha per titolo Github Pages dove troverete il pulsante Automatic
Page Generator, premetelo.
La pagina che verr creata servir come base per lapplicazione, motivo per cui non dovremo perdere
tempo a modificare i contenuti o a scegliere il layout: la pagina generata verr scartata in favore della
nostra applicazione.
Nella prima pagina New project site fate click su continue to layouts senza modificare nulla e
nella pagina di scelta del layout premete publish page.
Github creer quindi un sito per il vostro progetto che sar visitabile da chiunque allindirizzo:
http://miousername.github.io/nomedelprogetto. Potete trovare lindirizzo completo nella pagina Settings della vostra repository. Seguendo i passaggi sopra elencati il sito sar cos realizzato
(titolo e sottotitolo dipenderanno dal nome e dalla descrizione):
98
Altro
Per far si che lapp sia effettivamente installabile occorre modificare il file manifest.webapp. In
particolare bisogna sostituire nel campo launch_path il nuovo indirizzo del vostro file index.html.
Se ricordate lindirizzo che avr il vostro progetto sar circa: http://miousername.github.io/nomedelprogetto,
il manifesto deve quindi essere cos modificato.
1
"launch_path" : "/nomedelprogetto/index.html"
Per la corretta visualizzazione delle icone necessario aggiornare anche il campo icons
1
2
3
4
"icons" : {
"128" : "/nomedelprogetto/cartellaIcone/icona128.png",
"60" : "/nomedelprogetto/cartellaIcone/icona60.png"
}
Infine per caricare lapplicazione necessario installare sul computer un software distribuito da
Github.
Per Windows tale programma disponibile con interfaccia grafica o tramite un terminale apposito
(Git Power Shell), mentre per GNU/Linux disponibile solo su terminale, questa guida per semplicit
far riferimento ai comandi da eseguire da terminale.
Per iniziare necessario clonare la repository sul proprio pc digitando questi comandi nel terminale:
99
Altro
Ora bisogna sostituire il contenuto della cartella nomedelprogetto con i file che compongono la
vostra applicazione, questa operazione per semplicit pu essere eseguita tramite il file manager.
Attenzione: Dovete copiare solamente i file, non la cartella che li contiene
$
$
$
$
cd nomedelprogetto
git add -A
git commit -m "hosting app"
git push origin gh-pages
Inserite le vostre credenziali per avviare il caricamento dei file. Una volta finito il caricamento
visitando lindirizzo del vostro progetto vedrete anzich la pagina generata automaticamente
lHomepage della vostra applicazione.
NOTA: Pu capitare che a volte la modifica della pagina impieghi anche 30 minuti, nel caso
pazientate.
Ultima tappa la pubblicazione sul Firefox Marketplace. Accedete o registratevi al Firefox Marketplace come sviluppatori, nella pagina Carica unapp selezionate Hosted app e inserite lindirizzo
del manifesto ossia: http://miousername.github.io/nomedelprogetto/manifest.webapp
Concierge
Tra gli strumenti a nostra disposizione se vogliamo pubblicare la nostra app come hosted c
Concierge, una libreria che si occupa di:
rilevare se la nostra app installata
proporre linstallazione
creare un bottone di installazione semplice e di buon gusto
Potete vedere la demo su questa pagina.
Per usare Concierge basta includere il suo file JavaScript, il file CSS e aggiungere il seguente codice
alla nostra pagina su cui troviamo lapplicazione.
https://github.com/alexgibson/concierge
http://alxgbsn.co.uk/concierge/
Altro
1
2
3
4
5
6
7
8
9
10
11
12
100
Questo tutto, se vi doveste trovare in imbarazzo e non funzionasse controllate per bene di aver
seguito tutti i passaggi elencati sulla pagina del progetto.
https://github.com/alexgibson/concierge
https://www.mozilla.org/it/firefox/developer/
Sito di Mozilla
Sito della comunit italiana
Centro di sviluppo per Firefox OS
Mozilla Developers Network (MDN): dove trovare la migliore documentazione disponibile.
Sito di Firefox OS
Pagina dedicata alle WebAPI sul wiki MDN
http://mozilla.org)
http://www.mozillaitalia.org
http://marketplace.firefox.com/developers
http://developer.mozilla.org/
http://www.mozilla.org/it/firefox/os/
http://wiki.mozilla.org/WebAPI