03 - Sviluppo Mobile con tecnologie Cross-Platform e introduzione a Phonegap

Copyright (C) 2013 - Alca Società Cooperativa

Sviluppo Mobile con tecnologie Cross-Platform e introduzione a Phonegap

PON2013 @ IISS E.Medi - Galatone
http://learn.alcacoop.it/2013/android
Copyright (C) 2013 - ALCA Società Cooperativa

The Main Problem

Realizzare applicazioni per periferiche differenti - iPhone, Android, Windows Mobile etc - richiede di volta in volta framework e linguaggi diversi.

Come comportarsi?

PhoneGap

PhonegapLogo CordovaLogo

(space) What is it?

PhoneGap uses standards-based web technologies to bridge web applications and mobile devices.

phonegap.com

Una sola tecnologia per lo svilupppo

PhoneGap is an open source framework for quickly building cross-platform mobile apps using HTML5, Javascript and CSS (and access to native APIs).

phonegap.com

Phonegap Build Diagram

Phonegap Architecture

Applicazioni Ibride basate su Phonegap

PhoneGap: requirements

I requisiti minimi richiesti da PhoneGap sono identici a quelli di Android:

Phonegap: Supported platforms

Platforms

PhoneGap Quick Start

Phonegap Package

Setup New Project

Per iniziare, scarica l'ultima versione di PhoneGap da (qui) e poi...

unzip phonegap-2.5.0.zip
cd phonegap-2.5.0/lib/android/
./bin/create ~/src/HelloWorld \
    it.alcacoop.helloworld HelloWorld

Il comando create

./create project_folder_path package_name project_name

Struttura di un progetto PhoneGap

phonegapdir

Quick start

Quick start (index.html)

<!DOCTYPE html>
<html>
    <head>
        <title>Hello World</title>
    </head>
    <body>
        <h1>My first Cordova app</h1>
    </body>
</html>

Deploy (su emulatore o device)

Come una qualunque applicazione Android:

$ ant debug
...
$ ant installd

app1

app2

E le Device API?

E le device API?

Ad esempio per poter utilizzare l'API delle notifiche android è necessario:

E le device API?

<plugin name="Notification"
        value="org.apache.cordova.Notification"/>

E le device API?

<uses-permission
      android:name="android.permission.VIBRATE" />

E le device API?

function alertDismissed() {
    // do something
}
­
navigator.notification.alert(
    'You are the winner!',  // message
    alertDismissed,         // callback
    'Game Over',            // title
    'Done'                  // buttonName
);

Framework JS

Quali sono le alternative?

Introduzione a jquery-mobile

jQuery Mobile logo

jquery-mobile: features

jquery-mobile: pagine & dialog

jquery-mobile: pagine & dialog

Il requisito base per realizzare una pagina è il wrapper "page", fondamentale per mantenere il sistema di navigazione tra pagine. Tutto il resto è opzionale.

jquery-mobile: pagine & dialog

jquery-mobile: pagine & dialog

jquery-mobile: a deeper look

open-box.png

Widgets

JQM include una vasta gamma di widgets UI touch-friendly: bottoni, elementi dei form, collapsible, accordion, popup, dialog, tabelle responsive, etc.

Vediamo come utilizzarli...

index.html

<link rel="stylesheet"
  href="http://code.jquery.com/mobile/1.3.0/jquery.mobile-1.3.0.min.css"/>
<script
    src="http://code.jquery.com/jquery-1.8.2.min.js">
</script>
<script
    src="http://code.jquery.com/mobile/1.3.0/jquery.mobile-1.3.0.min.js">
</script>

Widgets: bottoni

screenshot1

Widgets: bottoni

<a href="#" data-role="button"
   data-icon="star">Star button</a>

Widgets: listviews

screenshot2

Widgets: listviews

<ul data-role="listview" data-inset="true"
    data-filter="true">
    <li><a href="#">Acura</a></li>
    <li><a href="#">Audi</a></li>
    <li><a href="#">BMW</a></li>
    <li><a href="#">Cadillac</a></li>
    <li><a href="#">Ferrari</a></li>
</ul>

Widgets: list+thumbnails

screenshot10

Widgets: list+thumbnails

<ul data-role="listview" data-inset="true">
    <li><a href="#">
        <img src="../../_assets/img/album-bb.jpg">
        <h2>Broken Bells</h2>
        <p>Broken Bells</p></a>
    </li>
    <li><a href="#">
        <img src="../../_assets/img/album-hc.jpg">
        <h2>Warning</h2>
        <p>Hot Chip</p></a>
    </li>
</ul>

Widgets: accordion

screenshot4

Widgets: accordion

Widgets: accordion

<div data-role="collapsible-set"
     data-theme="c" data-content-theme="d">
    <div data-role="collapsible">
        <h3>Section 1</h3>
        <p>I'm the collapsible content for section 1</p>
    </div>
    <div data-role="collapsible">
        <h3>Section 2</h3>
        <p>I'm the collapsible content for section 2</p>
    </div>
</div>

Widgets: menu select

screenshot5

Widgets: menu select

<form>
<div data-role="fieldcontain">
    <label for="select-native-1">Basic:</label>
    <select name="select-native-1" id="select-native-1">
        <option value="1">The 1st Option</option>
        <option value="2">The 2nd Option</option>
        <option value="3">The 3rd Option</option>
    </select>
</div>
</form>

Widgets: form

screenshot3

Widgets: form

JQM include un set di elementi form standard, adattati per essere widget touch-friendly.

Widgets: form

<form>
    <label for="textinput-s">Text Input:</label>
    <input type="text" name="textinput-s" id="textinput-s"
           placeholder="Text input" value="" data-clear-btn="true">
    <label for="select-native-s">Select:</label>
    <select name="select-native-s" id="select-native-s">
        <option value="small">One</option>
        <option value="medium">Two</option>
    </select>
    <label for="slider-s">Input slider:</label>
    <input type="range" name="slider-s" id="slider-s" value="25"
           min="0" max="100" data-highlight="true">
</form>

Widgets: flip switch

screenshot6

Widgets: flip switch

Utilizzato per fornire opzioni di scelta booleana, del tipo vero/falso o on/off.

<form>
    <label for="flip-1">Flip toggle switch:</label>
    <select name="flip-1" id="flip-1" data-role="slider">
        <option value="off">Off</option>
        <option value="on">On</option>
    </select>
</form>

Widgets: navbar

screenshot7

Widgets: navbar

Widgets: navbar

<div data-role="navbar">
    <ul>
        <li><a href="#" class="ui-btn-active">One</a></li>
        <li><a href="#">Two</a></li>
        <li><a href="#">Three</a></li>
    </ul>
</div>

Theming

JQM possiede un framemork di customizzazione grafica molto robusto che supporta fino a 26 set di colori per le toolbar, i contenuti e i bottoni. Questi set prendono il nome di "swatch".

<a href="#" data-role="button"
    data-icon="star" data-theme="a">data-theme="a"</a>

Theming

I temi già inclusi in JQM corrispondono alle lettere comprese tra la "a" e la "e" (a è lo swatch di default).

Theming

screenshot8

Theming

Nota: L'aggiunta dell'opzione data-theme alla pagina, modifica il tema di tutti gli elementi grafici contenuti

jQuery Mobile Docs - Themes

Theming: Themeroller

Per costruire in maniera semplice temi grafici molto customizzati, si può ricorrere all'applicazione web ThemeRoller.

Una volta costruito il tema, è sufficiente scaricarlo ed includerlo nel proprio progetto JQM.

Debug

L'utilizzo di tecnologie web per lo sviluppo di applicazioni mobile ci permette di affrontare il debug delle nostre applicazioni con strumenti conosciuti. Per esempio, Firebug (o i Developer Tool già contenuti in molti browser) ci consente di:

Debug

Pro & Contro

Pro:

Pro & Contro

Contro:

Link utili