Upgrade to Pro — share decks privately, control downloads, hide ads and more …

jquery mobile e phonegap

jquery mobile e phonegap

basi di sviluppo con phonegap e jquery mobile

michelangelog

July 16, 2012
Tweet

Other Decks in Programming

Transcript

  1. Jquery Mobile & Phonegap Vantaggi: • Tecnologie Standard & Cross

    Platform. • Oltre un miliardo di smartphone al mondo. • Costruire siti Web e applicazioni per dispositivi mobili utilizzando jQueryMobile e HTML5. • Ulteriori informazioni su PhoneGap per la costruzione di applicazioni "ibride" per ios & android. • Semplice integrazione con servizi e tecnologie web come ajax, xml, json, rest, xml-rpc Limiti: • Limitato accesso all'hardware del dispotivo. • Tecnologie ancora giovani. • Cambiamento ancora in corso di API e librerie.
  2. Jquery Mobile • Molti device supportati • Si basa su

    jquery... di fatto lo "standard" per lo sviluppo di applicazioni javascript • Progetto attivo in continuo sviluppo • Ottime performance
  3. Ottimizzata per il touch • I controlli dell'interfaccia utente devono

    essere abbastanza grande da potersi toccare. • Ridurre al minimo la necessità di digitare • No mouseover, eventi MouseMove, invece possiamo gestire eventi come swipe, swipeleft, swiperight, orientationchange, tap, taphold, etc • Controlli Form Ottimizzati. • Un solo codice molti device: ◦ ios (Apple) ◦ andorid (vari vendor) ◦ bada (Samsung) ◦ Windows Phone (Microsoft) ◦ Tutti gli altri: blackberry (Rim), Meego (Intel?), Symbian (Nokia), webOS (Palm) • Identico "look and feel" su tutte le piattaforme supportate. (può essere visto come punto a favore o come punto a sfavore.)
  4. Jquery Mobile: Pagina Base 1 <!doctype html> 2 <html> 3

    <head> 4 <title>jQuery Mobile App</title> 5 <link rel="stylesheet" href="./js/jquery.mobile-1.1.0.css" /> 6 <script src="./js/jquery-1.7.2.min.js"></script> 7 <script src="./js/jquery.mobile-1.1.0.js"></script> 8 </head> 9 <body> 10 <div data-role="page"> 11 <div data-role="header"> 12 <h1>Mia App :: Home Page</h1> 13 </div> 14 <div data-role="content"> 15 <p>Contenuto della pagina.</p> 16 </div> 17 <div data-role="footer"> 18 <h4>Credits: Michelangelo Giacomelli @ reflab</a></h4> 19 </div> 20 </div> 21 </body> 22 </html> 1) HTML5 Doctype 5) jQuery Mobile CSS 6) jQuery Core JS 7) jQuery Mobile JS
  5. Jquery Mobile: data-role Si definiscono le pagine e gli elementi

    di una pagina tramite gli attributi data-role. Le interfacce dell'applicazione vengono definite tramite markup, c'è una buona divisione tra rappresentazione e comportamento. La libreria standard di jquery mobile mette a disposizione molti elementi: • Liste • Pulsanti • Form • Immagini • Header e Footer • Tab, calendari • Link e Pulsanti di navigazione • ... altri sono disponibili tramite plugin • ma è semplice creare "componenti" con html e scriverne la logica in javascript
  6. Jquery: Ajax Utilizzando Jquery è semplice interregare e recuperare dati

    dal server che fornisce l'applicazione. (con phonegap si può andare oltre ed avere una whitelist di domini accessibili.) 1 $.ajax( 2 { 3 url: 'mio_url/', 4 dataType: 'json', 5 success: function(data) 6 { 7 // manipolare i dati 8 } 9 error: function(e) 10 { 11 // gestire l'errore 12 } 13 }); Tutte le funzionalità di jquery: • eventi • selettori css3 • modifica del dom: modifica elementi, selezione, creazione, nascondi/mostra, etc..
  7. Storage: LocalStorage 1/2 1 function detect_local_storage 2 { 3 try

    4 { 5 return 'localStorage' in window && window['localStorage'] !== null; 6 } 7 catch(e) 8 { 9 return false; 10 } 11 } 12 13 localStorage.setItem('key', 'value'); 14 15 var value = (localStorage.getItem('key')); localStorage => un sistema di memorizzazione e gestione delle informazioni sul device dell'utente che consente di manipolare in maniera semplice e veloce fino a 5 mega di dati. Sfortunatamente iOS 5.1 ha introdotto il conetto di localstorage non persistente, in quanto safari può cancellarlo quando vuole. (Nota: phonegap 1.6 permette di usare localstorage in maniera persistente anche su ios)
  8. Storage: LocalStorage 2/2 Rimuovere una chiave da localstorage 1 localStorage.removeItem("key1");

    Reset del localstorage 1 localStorage.clear(); Supporto: • Opera & Opera Mobile (ma non da Opera mini) • Safari Desktp & iOS • Android • Firefox • Chrome
  9. Mobile: Database Indexed DB • Un database NoSQL gerarchico, sfortunamente

    poco supportato, al momento nel mobile, si trova solo su versioni recenti di chrome e firefox. • Permette di utilizzare sia api sincrone che asincrone. WebSQL • Praticamente basato su sqlite su tutti i browser che lo supportano • Database relazionale classico si interroga tramite sql.
  10. Astrazione dal db: persistence persistence.js è una libreria asincrona per

    l' object relational mapping. Può essere utilizzato sia nel browser web e sul server utilizzando node.js. Lato mobile supporta: HTML5 WebSql o in memmory come fallback (con possibilità di essere serializzato e deserializzato su localstorage) 1 // configurazione 2 persistence.store.websql.config(persistence, 'database', 'una qualsiasi descrizione', 5 * 1024 * 1024); 3 // definizione schema 4 var Persona = persistence.define('Persona', 5 { 6 name: 'TEXT', 7 cognome: 'TEXT', 8 mail: 'TEXT' 9 }); 10 // creazione "tabelle" 11 persistence.schemaSync(); 12 var cliente = new Persona; 13 cliente.nome = 'Mario' 14 cliente.cognome = 'Rossi' 15 cliente.mail = '[email protected]'; 16 // insert elemento e transazione 17 persistence.add(cliente); 18 persistence.flush(); Si pensa in termini di oggetti e alle loro relazioni non a tabelle e a chiavi esterne.
  11. PhoneGap: Intro Consente di creare applicazioni per dispositivi mobili che

    utilizzano JavaScript, HTML5 e CSS3, invece linguggi nativi della piattaforma come ad esempio Objective-C o Java. Le applicazioni che ne derivano sono applicazioni ibride, nel senso che queste non sono né veramente nativa (tutto il rendering del layout è fatto tramite una WebView, invece dei widget nativi della piattaforma) né puramente web based (cioè non si va a scrivere una applicazione web, ma un app confezionata per la distribuzione su AppStore, Google Play, Android Market, etc... e di avere accesso ad una parte dell'interfaccia di programmazione dispositivo di applicazione). Tipicamente phonegap permette l'accesso a: • filesystem • camera • accellerometri • rete • suoni • eventi del dispositivo • geolocalizzazione
  12. PhoneGap: utilizzo Phonegap si integra con l'sdk nativo a secondda

    del sistema, sono disponibili pacchetti per mac e xcode, con target ios, pacchetti per android sdk ed eclipse, per blackberry e per windows phone ma non tutte le funzionalità sono implementate su ogni sistema. La struttura di un applicazione Phonegap è la seguente: • www ◦ index.html ◦ phonegap.js ◦ js ▪ logica dell'applicazione e librerie ◦ css ▪ gli stili ◦ img ▪ asset statici • phonegap.plist • resources ◦ icon.png
  13. PhoneGap: deploy Fortemente dipendente dal sistema di sviluppo, in alcuni

    casi facilmente automatizzabile (android, java e ant), in altre situazioni dipedente dall'ambiente di sviluppo e difficilmente automatizzabile (vedere ad esempio xcode sotto mac). • Crea una webview, ossia un istanza del browser (ad esempio webkit), senza toolbar, statusbar, etc • copia la directory www e tutto il contenuto dentro il pacchetto dell'applicazione • apre il file index.html • mette a disposizione del motore del javascript le api native • permette di effettuare richieste di rete verso una serie di url definiti dentro phonegap.plist agendo da proxy. • notifica gli eventi esterni (rotazione del dispositivo, pause, pulsante menu premuto, etc) • patcha in alcuni casi la webview per avere un comporamento standard, proponendo la propria versione. (è il caso recente di localstorage sotto ios)
  14. PhoneGap: ex1 Alert Nativi Si può utilizzare ovviamente la funzione

    alert di javascript, ma non abbiamo la possibilità di cambiare il title, presenta sempre: "index.html", se può essere usato insieme a console.log per fini di debug è invece poco presentabile in un app finita. Si può ricorrere ad alert realizzati ad hoc con css e javascript ma phonegap mette a disposizione un api molto semplice per la gestione degli alert nativi. 1 navigator.notification.alert 2 ( 3 'messaggio dell'alert, 4 function (event) 5 { 6 // funzione di callback 7 }, 8 'titolo dell'alert, 9 'caption del bottone' 10 );
  15. PhoneGap: ex2 accesso ai file 1 function gotFS(fileSystem) 2 {

    3 fileSystem.root.getFile("file.txt", {create: true}, gotFileEntry, fail); 4 } 5 function gotFileEntry(fileEntry) 6 { 7 fileEntry.createWriter(gotFileWriter, fail); 8 } 9 function gotFileWriter(writer) 10 { 11 writer.onwrite = function(evt) 12 { 13 console.log("write success"); 14 }; 15 writer.write("un qualsiasi testo"); 16 } 17 function fail(error) 18 { 19 console.log(error.code); 20 } Le api sono tipicamente asincrone, si richiede all'accesso al filesystem, quindi utilizziamo un filewriter o un filereader, per scrivere o leggere. La limitazione più grande è l'impossibilità di gestione di dati binari, si legge e si scrive solo utf8
  16. Landslide slide realizzate con Landslide Uno script python per la

    generazione di slide html da markdown https://github.com/adamzap/landslide