Professional Documents
Culture Documents
SOBRE EL AUTOR
Carlos Solis es Adobe Community Professional, speaker
en diversos eventos, entre ellos Adobe Express en Per y
Mxico, Latin Flash Tour y otros eventos en Costa Rica,
Colombia, Chile y Argentina.
Como desarrollador mvil ha creado soluciones para
varias marcas del Fortune 500 y colaborado con mltiples
startups en el Silicon Valley, Santiago, Tel-Aviv y New
York.
Certificado W3C en buenas prcticas mviles y fundador
del proyecto Revolucin Mvil. Firme creyente del
potencial de los desarrolladores latinoamericanos.
www.carlossolis.mobi
INTRODUCCION
Los dispositivos mviles han creado un nuevo mercado
que crece exponencialmente y esta repleto de nuevas
oportunidades.
Desde la llegada de las tiendas de aplicaciones o app
Stores la forma de distribuir software ha cambiado
radicalmente. Antes del 2008 - ao en que se inaugur la
App Store de Apple - para distribuir un programa, era
necesario crear una costosa estructura de distribucin y
marketing, hoy en da cualquier desarrollador tiene acceso
a una red global de clientes vidos de contenidos.
Muchos desarrolladores que trabajan lenguajes como
Objective-C, C, C++ o Java lograron incursionar
rpidamente en este nuevo mercado y monetizar sus
productos a travs de esta nueva red de distribucin que
generaron las App Stores.
Sin embargo, gran cantidad de desarrolladores que
apostaron por el desarrollo web se han quedado fuera de
esta bonanza, porque los lenguajes con los que se
construye la web no estn soportados para desarrollar
aplicaciones nativas.
PhoneGap abre una oportunidad a todos los
Ejemplos y ejercicios
Todos los ejemplos usados en este libro se encuentran
actualizados y disponible para descarga gratuita en la
siguiente direccin
www.manualdelguerreromovil.com/phonegap
En este libro utilizaremos - salvo casos en los que se haga
la salvedad - ejemplos funcionales en equipos android 2.2
en adelante y iPhone 5.0 en adelante que cubren a la
mayora de los usuarios de equipos mviles al momento
de escribir el libro.
Errores y correcciones
Aunque cada parte de este libro fue cuidadosamente
revisada siempre se nos puede escapar un error, si
encuentras alguno por favor notificarlo en el sitio oficial
del libro
www.manualdelguerreromovil.com/phonegap
Este libro digital tiene soporte para actualizaciones, sus
reportes de errores y correcciones sern tomados en
cuenta y sern entregadas gratuitamente a todos que
posean una copia.
Cursos y capacitaciones
Si desea recibir un curso online o presencial sobre los
temas de este libro contctenos sin compromiso en la
pgina oficial del libro para consultar sobre
disponibilidad y costos.
CONOCIENDO
PHONEGAP
Historia
El proyecto PhoneGap fue creado y dirigido por Nitobi,
una empresa canadiense fundada por Andr Charland y
Dave Johnson en los primeros aos de este milenio.
PhoneGap es un proyecto de cdigo abierto basado en
estndares web. Naci en el 2008 durante un evento
llamado iPhoneDevCamp, una conferencia informal de
desarrolladores, en la que buscan promover el desarrollo
de aplicaciones basadas en iOS y tecnologas web
estndar. En solo 2 das que dur el evento un grupo de
entusiastas desarrolladores logr crear un prototipo
funcional de lo que hoy conocemos como PhoneGap.
El proyecto salt a la fama en el 2009 cuando fue
premiado por el pblico como el mejor proyecto (
Peoples Choice Award ) durante la conferencia anual
Web 2.0 organizada por la prestigiosa editorial OReilly.
Cmo funciona?
En pocas palabras, PhoneGap crea aplicaciones nativas
para dispositivos mviles a partir de lenguajes web (
HTML5, Javascript, CSS3, etc).
Esto lo logra a creando una instancia del navegador del
sistema que se controla travs de una interfaz de funciones
forneas (FFI por sus siglas en ingls).
-Webkit
La instancia de navegador en la que se despliega el
cdigo tiene, por lo general, un ncleo basado en el motor
de render Webkit.
Webkit es un proyecto de cdigo abierto que sirve como
motor a muchos de los principales navegadores web de
escritorio como Chrome, Safari, Konkeror o RockMelt y
de los navegadores mviles de iOS, Blackberry OS y
Android. Webkit est desempeando un papel crucial en
la implementacin de nuevas tecnologas como HTML5 y
CSS3.
Los principales actores de la internet como Apple, Adobe,
Microsoft y Google contribuyen con el proyecto Webkit
para que adopten rpidamente las nuevas tecnologas web
como HTML5, CSS3, AJAX Javascript. PhoneGap al
utilizar Webkit como base, tiene en general un buen
soporte sobre estos lenguajes.
- Aplicaciones Hbridas
Cuando se crea una aplicacin PhoneGap, el cdigo
basado en HTML5 y dems lenguajes web se empaqueta
en una aplicacin 100% nativa que muestra el cdigo a
travs de una instancia del navegador. La aplicacin tiene
acceso a todos los sensores del dispositivo al conectarse
de forma nativa a travs de la API de PhoneGap.
Por esta razn PhoneGap entra en la categora de
aplicacin hbrida: ejecuta una aplicacin web dentro de
una aplicacin nativa. PhoneGap combina la simplicidad
de los lenguajes web con el poder de los lenguajes
nativos, es, en sntesis, lo mejor de dos mundos.
Plataformas soportadas
Por un amplio margen PhoneGap es la tecnologa de
desarrollo mvil que tiene el mas amplio soporte de
plataformas distintas.
Gracias a que la mayora de los smartphones permiten
crear instancias del navegador en sus aplicaciones
nativas, PhoneGap solo crea clientes especficos para
cada plataforma, estos clientes interpretan un mismo
cdigo y envan comandos nativos a sus respectivos
sistemas operativos. Muy similar al principio que usan las
mquinas virtuales de Java o al del Player de Flash que
permiten ejecutar un mismo cdigo en muchas
plataformas.
Actualmente PhoneGap es soportado en 7 diferentes
plataformas:
iOS
Android
Windows Phone 7
Blackberry OS
WebOS
Symbian
Bada
Se pueden publicar en la
Appstore las aplicaciones
PhoneGap?
A inicios del ao 2010 Apple cambi las reglas para las
aplicaciones que se publicaban en su tienda, prohibiendo
aplicaciones hechas en lenguajes que no fueran nativos,
esta modificacin se hizo en medio de una guerra
meditica con Adobe y buscaba afectar directamente a
Flash que quera perfilarse como una herramienta de
desarrollo de aplicaciones para iPhone.
Tiempo despus en Octubre del mismo ao Apple revirti
sus trminos y volvi a aceptar aplicaciones creadas con
lenguajes no nativos.
Sin embargo, aunque hoy en da ya es posible publicar
aplicaciones basadas en cualquier lenguaje, el famoso
cambio de polticas nunca afect a PhoneGap y
posiblemente nunca lo afecte.
Desde el cambio original de reglas, Apple hizo la
salvedad de incluir a javascript y los lenguajes que se
ejecutan dentro de Webkit como lenguajes nativos, por lo
que aun durante el periodo en que las aplicaciones flash
fueron prohibidas, las aplicaciones PhoneGap siguieron
-Aplicaciones informativas
Este es el tipo de aplicacin que funciona mejor con
PhoneGap: Mostrar informacin esttica o dinmica sobre
productos y servicios, desplegar textos, vdeos y
elementos grficos de alta calidad.
Una buena parte de las aplicaciones disponibles en las
tiendas de aplicaciones entra en esta clasificacin.
Crear una aplicacin de este tipo con PhoneGap es fcil y
rpido. El resultado final es prcticamente igual al de una
aplicacin nativa.
Por ejemplo, METAR Reader es una aplicacin para
pilotos areos que utiliza PhoneGap para mostrar e
interpretar informacin estndar sobre las condiciones
meteorolgicas en diferentes aeropuertos.
-Aplicaciones Utilitarias
Una de las categoras ms populares en las App Stores
son las aplicaciones utilitarias, que son todas aquellas que
nos sirven para hacer tareas y operaciones con nuestro
mvil desde lo crucial a lo trivial.
En esta categora estn las calculadoras de todo tipo,
linternas, monitores de memoria, lectores de cdigos QR
y miles ms. Esta es otra categora en la que el desarrollo
con PhoneGap se destaca positivamente.
Entre las aplicaciones utilitarias podemos incluir las que
nos ayudan a planificar y organizar nuestras tareas como
Diary Mobile. Esta aplicacin creada con PhoneGap
permite gestionar tareas y eventos que se sincronizan en la
nube.
-Adaptacin de Webapps
Entre las ventajas que tiene PhoneGap es que se pueden
crear aplicaciones completas usando los mismos
lenguajes que se utilizan para crear sitios web: HTML5,
CSS3 y Javascript.
Esto permite que con solo pequeas variaciones y
adaptaciones se pueda utilizar una web app o aplicacin
web y convertirla en una aplicacin mvil nativa.
Gracias a esta capacidad, las empresas pueden ahorrar
tiempo y dinero reutilizando sus aplicaciones basadas en
web, si ya estn optimizadas para equipos mviles, la
mayor parte del trabajo esta hecha.
El mejor ejemplo de este uso es la Wikipedia, que usa
PhoneGap para ofrecer en su aplicacin nativa los mismos
contenidos y servicios de la enciclopedia online.
-Juegos
Aunque PhoneGap no fue creado como una plataforma
dedicada para juegos, si es posible desarrollarlos aunque
con muchas restricciones.
No olvidemos que al trabajar sobre una instancia del
browser del sistema se genera una carga de procesador
adicional. La velocidad del navegador para renderizar los
elementos y realizar los clculos de javascript tiene un
impacto notable en el rendimiento, adems, la
complejidad del juego y la interaccin de mltiples
elementos grficos puede derivar en problemas de
rendimiento.
El juego Orbium creado en PhoneGap demuestra que es
posible crear juegos bsicos en esta plataforma. Aunque
si estas buscando crear un juego que haga uso intensivo
del procesador, es mejor que explores otras plataformas
como Flash, Cocos2D o Unity.
propiedad intelectual.
PREPARANDO EL
ENTORNO
Antes de comenzar a desarrollar aplicaciones para
mviles, tienes antes que instalar y configurar el entorno
de desarrollo con las herramientas en las que crears
aplicaciones para mviles.
A diferencia de otras plataformas ,PhoneGap no tiene un
entorno de desarrollo propio, por el contrario, trabaja
como plugin o extensin dentro de otros editores de
cdigo como Dreamweaver, Xcode o Eclipse.
Para crear una aplicacin mvil necesitars instalar adems de PhoneGap - las herramientas de desarrollo o
SDK's de cada plataforma en la que quieres desarrollar.
Un SDK es un conjunto de herramientas y utilidades que
permiten compilar cdigo fuente y convertirlo en una
aplicacin apta para ejecutarse en equipos mviles... y
eso es justo lo que usars para convertir tu cdigo
HTML5 una flamante aplicacin mvil.
Requerimientos de Sistema
Para crear y probar aplicaciones mviles en tu ordenador
necesitars instalar un editor de cdigo y los SDK de
Android y/o iPhone. Dependiendo de tu sistema operativo,
puede que necesites instalar programas adicionales (ver
detalles a continuacin).
-Requerimientos en Windows
Para desarrollar en PC necesitas un ordenador Windows
XP o superior, en este manual usaremos Windows 7 como
punto de referencia.
El JDK de JAVA crea el entorno necesario para correr el
emulador de Android y algunas herramientas de
depuracin. Muchos programas requieren este entorno y
es posible que ya lo tengas instalado en tu computador, de
lo contrario los instaladores de estos programas se
encuentran en el sitio de Oracle
http://www.oracle.com/technetwork/java/javase/downloads
Para utilizar todos los programas que se requieren para
desarrollar aplicaciones mviles, se sugiere una
configuracin mnima de:
1. Procesador Intel Pentium 4 o AMD Athlon 64
2. Microsoft Windows 7 o Microsoft Windows
Vista Service Pack 2.
3. 1 GB de RAM
4. Display de 1280x800 con tarjeta de video de 16-bit
-Requerimientos en Mac OS
En equipos Apple es necesario el sistema operativo
MacOS X 10.7.0 Lion o superior.
Aunque tambin se puede trabajar con el MacOS X 10.6
(Snow Leopard) se recomienda actualizar a la ltima
versin. La poltica de Apple es darle soporte nicamente
a la ltima versin de su sistema operativo y
eventualmente las versiones ms antiguas dejarn de ser
compatibles. En este manual se usar Mac OS Lion como
referencia.
Para utilizar todos los programas que se requieren para
desarrollar aplicaciones mviles, se sugiere una
configuracin mnima de:
1.
2.
3.
4.
-Requerimientos en Linux
1. Librera GNU C (glibc) 2.7 o superior.
Se recomienda usar Ubuntu Linux, versin 8.04 o
superior.
Las distribuciones de 64-bit deben ser capaces de ejecutar
aplicaciones de 32-bit.
-Conexin a internet
La conexin a internet es crucial no solo para descargar
programas y actualizaciones, tambin es requerida para
utilizar servicios como PhoneGap Build y algunos
emuladores que requieren el uso de conexin web.
Es posible crear y probar aplicaciones sin conexin a
internet, sin embargo, el proceso ser limitado por lo que
se recomienda que mientras se desarrollan aplicaciones
mviles hacerlo en un equipo que tenga asegurada la
conexin todo el tiempo.
http://www.oracle.com/technetwork/java/javase/downloads
Ahora que tienes un sistema listo para desarrollar
aplicaciones PhoneGap, vamos a crear aplicaciones. En el
proximo capitulo vamos a aprender como crear una
aplicacin Android bsica.
SDK DE ANDROID
Instalando el SDK de
Android
El SDK de Android contiene todo lo necesario para crear
y probar las aplicaciones para esta plataforma. Es
bastante completo e incluye emuladores de sistema
operativo y aplicaciones especializadas para controlar y
monitorear todos los elementos de una aplicacin mvil.
Para descargar el SDK de Android debes ir al sitio de
desarrolladores de Android y elegir all la versin del
SDK que corresponda a tu sistema operativo:
http://developer.Android.com/sdk/
El tamao promedio de esta descarga es de
aproximadamente 30MB. Una vez descargado el archivo
debers descomprimirlo en tu computador.
Descomprime este archivo en una ruta sencilla de
acceder, sin espacios, maysculas o tildes. Por ejemplo,
en windows puedes usar esta ruta:
C:/Android/
Esto no slo te ayudar a encontrar ms fcilmente el
SDK, tambin evitars posibles errores cuando compiles
tu aplicacin.
Instalacin de mltiples
versiones de Android
Descargar y descomprimir el SDK es solo el primer paso,
para poder probar una verdadera aplicacin tienes que
descargar las diferentes versiones del sistema operativo
de Android y todas las herramientas de desarrollo.
Este proceso es indispensable porque con estos archivos
podrs probar y depurar tus aplicaciones en mltiples
versiones de Android.
Para actualizar el sistema en un equipo PC debes abrir el
archivo "SDK Manager.exe" tal como se aprecia en la
imagen.
Creacin y configuracin de
AVDs
Los AVD ( Android Virtual Devices ) son las "mquinas
virtuales" que nos permiten probar versiones especficas
de Android as como diferentes configuraciones de
hardware.
Gracias a los AVDs se pueden probar aplicaciones en
cualquier versin de Android con cualquier configuracin
de hardware de manera virtual, sin tener que comprar el
equipo fsico, reduciendo as los costos y el tiempo de
depuracin.
Para crear una AVD es necesario abrir el SDK Manager
tal como se detall en el apartado anterior, buscar la
seccin "Tools" y seleccionar la opcin "Manage
AVDs...":
Emular elementos de
Hardware
En algunos casos es necesario emular elementos del
hardware como la cmara o el GPS, el emulador de
Android permite depurar el sistema usando estos
elementos dentro de sus mquinas virtuales.
Para agregar un elemento de hardware, selecciona
cualquier AVD de la lista del AVD manager y presiona el
botn "Edit".
Busca el apartado "Hardware" y presiona el botn "New".
Esto desplegar una ventana con una lista de sensores y
capacidades de software, en este caso seleccionaremos la
opcin GPS para darle soporte a cualquier aplicacin que
necesite emular el dispositivo de geolocalizacin.
Activar el Emulador de
Android
Para activar el AVD solamente debes seleccionarlo de la
lista y presionar el botn "Start..."
Una ltima ventana con las opciones para el AVD
aparecer, selecciona el tamao y DPI adecuado para tu
sistema, de lo contrario el emulador puede aparecer en
escala incorrecta. Presiona el botn "Launch" para
arrancar el AVD.
http://developer.android.com/resources/dashboard/platform
versions.html
El mercado de los dispositivos mviles se mueve muy
ECLIPSE
Ampliamente conocido entre los desarrolladores JAVA,
Eclipse es uno de los entornos de programacin ms
robustos del mercado. Planeado originalmente como un
IDE que funcione con cualquier lenguaje sin estar
orientado a ninguno en especial, Eclipse tiene una
capacidad camalenica de adaptarse a prcticamente
cualquier lenguaje de programacin a travs de un
completo sistema de plugins que permite incluir todas las
herramientas que se puedan necesitar.
Por su popularidad entre los desarrolladores JAVA ( la
base de Android) y su licencia de cdigo abierto, Google
ha creado un muy completo set de herramientas para
desarrollar aplicaciones con Eclipse que lo convierte en
la mejor opcin para crear aplicaciones Android.
Instalar Eclipse
Para instalar eclipse en tu equipo, el primer paso es
descargarlo gratuitamente en esta direccin ( se
recomienda usar la versin "Eclipse Classic" )
http://www.eclipse.org/downloads/
Como se mencion anteriormente, Eclipse es una
herramienta de desarrollo para muchos lenguajes. La
versin que ests descargando es la ms estndar y no
incluye ninguna herramienta para desarrollo de
aplicaciones para mviles o PhoneGap, as que vamos a
instalar uno por uno todos los plugins para convertir este
Eclipse en un entorno de desarrollo PhoneGap.
Instalar el ADT
Para desarrollar aplicaciones en Android, Google
desarroll el ADT ( Android Development Toolkit ), un
plugin para Eclipse que instala un entorno de desarrollo
muy completo para crear aplicaciones de Android.
El ADT integra las herramientas y funciones del SDK de
Android directamente con el ambiente de desarrollo de
Eclipse. Es requisito instalar el SDK de Android antes de
instalar el ADT.
Para instalar el ADT se debe abrir Eclipse y all dirigirse
a Help > Install new software
Instalando PhoneGap
En la documentacin oficial de PhoneGap, se muestra un
procedimiento de instalacin para Android que incluye
descargar el plugin y modificar varios archivos para
ejecutar el framework, el proceso es francamente
complicado e ineficiente. Adems de tomar mucho tiempo,
es necesario repetirlo en cada proyecto que se crea. Por
esta razn en este manual usaremos otro procedimiento
mucho ms prctico.
Vamos a utilizar el plugin MDS de AppLaud que elimina
ese proceso complicado y permite crear proyectos
PhoneGap en un solo clic.
Para instalar este y cualquier otro plugin, se sigue el
mismo proceso que acabamos de realizar para instalar el
plugin de ADT: se abre la opcin: Help > Install new
software
PhoneGap.
Una vez descargados los archivos, el sistema pedir
reiniciar Eclipse y encontrars herramientas adicionales
en Eclipse, vamos a utilizar estas nuevas herramientas
para crear una aplicacin PhoneGap para Android.
Aplicacin bsica
Para crear tu primera aplicacin PhoneGap en Eclipse
tienes primero que crear un nuevo proyecto. Para esto haz
clic en el icono del MDS de AppLaud
SDK DE IOS
Instalacin
Si deseas crear programas para la plataforma mvil de
Apple y probarlos en tu equipo, es necesario bajar el
SDK de iOS, el sistema operativo de los equipos iPhone,
iPad y iPod Touch.
A diferencia del SDK de Android que es independiente
del programa en que desarrolla el cdigo, Apple cre
para iOS un paquete completo que incluye el SDK,
herramientas, emuladores y hasta el editor de cdigo.
El programa principal del paquete de Apple es Xcode.
Desde all se pueden crear las aplicaciones nativas para
iOS y al instalarlo se instala tambin todo el paquete del
SDK de iOS. El Xcode 4 puede instalarse nicamente en
equipos Apple y se requiere al menos OS X 10.7.0 Lion o
superior.
Para descargar Xcode 4 solamente debes abrir el App
Store incluido en todas los equipos de escritorio Apple
con sistema operativo Lion o superior
http://docs.phonegap.com/en/2.0.0/guide_gettingstarted_ios_index.md.html#Getting%20Started%20with%20
Una vez descargada la versin 1.9.0 de PhoneGap debes
descomprimir el archivo que acabas de descargar y
ejecutar el instalador. El archivo de instalacin est en la
carpeta "/lib/ios/" asegrate de abrir el archivo con la
extensin ".dmg"
</html>
Salva los cambios y presiona de nuevo el botn "Run"
Luego de unos segundos, tendrs lista tu primera
aplicacin hecha en Xcode, que se debe ver muy parecida
a esto:
DREAMWEAVER CS6
Dreamweaver es un software propietario desarrollado por
Adobe Systems. Es muy popular entre los desarrolladores
web y desde hace ms de una dcada es la herramienta
por excelencia para crear la web.
Desde la versin CS5.5 se incluye integracin con
tecnologas enfocadas al desarrollo de aplicaciones
mviles como jQuery Mobile, HTML5 y CSS3, adems
del soporte para crear y probar aplicaciones nativas
basadas en PhoneGap.
Con la adquisicin de Nitobi (creadores de PhoneGap)
Adobe mejor la integracin de Dreamweaver con
PhoneGap e incluy la opcin de compilar aplicaciones
desde la nube a travs del servicio PhoneGap Build.
Esta nueva forma de crear aplicaciones permite
desarrollar y publicar aplicaciones mviles sin depender
de ningn sistema operativo en particular. Dreamweaver
abre la opcin para que sus usuarios puedan crear
aplicaciones para plataformas que antes eran
incompatibles, ahora es posible crear aplicaciones para
iOS sin necesidad de usar un equipo Apple o desarrollar
aplicaciones para Blackberry desde Linux o Apple sin
Instalar Dreamweaver
En este libro usaremos como referencia la versin en
ingls de Dreamweaver CS6. Si aun no lo tienes instalado
puedes bajar una versin de prueba por 30 das en el sitio
de Adobe:
http://www.adobe.com/es/products/dreamweaver.html
Para descargar este programa es necesario crear una
cuenta gratuita con Adobe o "Adobe ID", esta cuenta
tambin puede ser utilizada para otros servicios como
PhoneGap Build.
Gracias a que Dreamweaver est totalmente integrado con
PhoneGap, no es necesario instalar ningn software
adicional. Tampoco es necesario realizar ninguna
configuracin extra, el programa viene listo para crear
aplicaciones PhoneGap de inmediato.
Aplicacin bsica
El primer paso para crear una aplicacin con
Dreamweaver es crear un nuevo proyecto o "sitio". Para
crear un nuevo sitio debes ir a Site > New Site.
File> new.
<head>
<meta charset="UTF-8">
<title>Hola Mundo</title>
<script src="phonegap.js" type="text/javascript"
charset="utf-8"></script>
</head>
<body>
<h1>Hola Mundo!</h1>
<p>Mi primera app hecha con Dreamweaver CS6</p>
</body>
</html>
Como puedes notar, se est incluyendo en el cdigo una
llamada a un archivo "phonegap.js". Este archivo es el
que conecta la librera de PhoneGap con tu aplicacin.
No es necesario incluirlo en tu proyecto de Dreamweaver,
cuando PhoneGap Build encuentra esta lnea de cdigo, se
encarga de agregar automticamente la versin ms
actualizada de la librera, esta funcionalidad es
particularmente til tomando en cuenta que el proyecto
PhoneGap es sumamente activo y las versiones cambian
muy rpido, ahora tienes la seguridad de usar siempre la
versin ms actualizada sin necesidad de modificar el
cdigo.
-Configuracin de Dreamweaver
Aunque este paso no es un requisito para crear
aplicaciones, si deseas probarlas en un emulador
Android local es necesario que descargues e instales el
SDK de Android tal como se indica el Captulo 3 de este
libro y que configures Dreamweaver para instalar
aplicaciones directamente en el emulador.
Para activar esta funcionalidad solo debes ingresar a:
Site>PhoneGap Build service> PhoneGap build settings.
-Probar aplicaciones
Dreamweaver CS6 te da 3 diferentes opciones para
probar las diferentes versiones de tus aplicaciones
PhoneGap:
Emulador: Descargar tu aplicacin de la nube y
ejecutarla en un emulador local.
Probar en equipo: Escanear un cdigo QR para
ejecutar tu aplicacin en un dispositivo fsico.
Descarga: Guardar la aplicacin compilada en la
nube, en tu disco duro.
Por ahora, para ver tu primera aplicacin, elige la opcin
Emulador para probar tu aplicacin localmente.
En cuanto la aplicacin se descargue la nube y est lista
para ser probada en tu ordenador, debes elegir un AVD
para ejecutarla.
ESTRUCTURA DE UNA
APLICACION PHONEGAP
Las aplicaciones PhoneGap tiene una estructura definida
en su cdigo y componentes externos. Una vez terminada
la aplicacin, es posible que sea necesario configurar
algunos elementos externos a la programacin de la
misma, como la orientacin en pantalla o los iconos que
identificaran al programa dentro del sistema. Esta
configuracin en PhoneGap vara segn el sistema
operativo en que se desea publicar.
En este captulo examinaremos las partes que componen
una aplicacin PhoneGap: las partes del cdigo, la
integracin de PhoneGap con un documento HTML, la
estructura de los archivos y la configuracin especfica
para Android y iPhone.
Estructura html
-Doctype
El doctype define el tipo de documento que vamos a
utilizar. Aunque es posible utilizar diferentes Doctypes en
PhoneGap, en este manual vamos a utilizar el estndar
HTML5 para aprovechar al mximo esta nueva
tecnologa. En la prxima seccin hablaremos con detalle
del HTML5, por ahora incluiremos en la primera lnea de
la aplicacin el doctype:
<!DOCTYPE html>
Esto definir el documento que utilizaremos como uno de
tipo HTML 5, ahora vamos a construir un documento
completo.
Ejercicio 7.1
<!DOCTYPE html>
<html>
<head>
<title>Ejercicio 7.1</title>
<meta charset="utf-8">
</head>
<body>
<h1>Mi primer app</h1>
<button id="boton1"> Botn</button>
</body>
</html>
Cualquier documento, como este, puede convertirse en una
aplicacin mvil, si lo compilamos se vera as:
-CSS
Mejoremos un poco la apariencia de esta aplicacin. En
la misma carpeta en que tienes almacenado el documento
base, crea una carpeta con el nombre "css", dentro de ella
crea un nuevo documento y nombra el archivo como:
"hojaDeEstilos.css". Dentro de l incluiremos los estilos
de esta aplicacin:
body{
background:#1485CC;
font-family:Arial;
text-align:center;
color:#fff;
}
button{
margin-top:5em;
padding:1em;
font-size:1em;
background:#FFFC19;
}
div{
text-align:left;
}
Eventos de PhoneGap
En el ejemplo anterior utilizamos el evento "onclick" que
se activa como es de sospechar cuando se hace click
sobre un elemento.
PhoneGap tiene tambin sus propios eventos que nos
indican estados del dispositivo en el que trabajamos. El
ms importante de todos los eventos de PhoneGap es
"deviceready" que nos indica cuando el dispositivo esta
listo para enviar y recibir informacin de la API de
PhoneGap.
Este evento es independiente de la carga de la aplicacin,
as que aunque la aplicacin ya est completamente
cargada y funcional no quiere decir que ya tenga acceso a
los sensores del dispositivo, eso puede tomar un tiempo
variable segn el sistema operativo y capacidad del
equipo.
Es crucial que toda aplicacin que utilice la API de
phoneGap se inicialice despus del evento "deviceready"
de lo contrario, es casi seguro que la aplicacin
despliegue errores de comunicacin con la API y obtengas
resultados inconsistentes o errneos.
Para agregar este importante evento debes incluir esta
lnea de cdigo justo despus de la lnea que incluye la
librera Cordova.
<script>
document.addEventListener("deviceready",
dispositivoListo, false);
</script>
En este caso lo que suceder es que cuando el dispositivo
en el que se ejecute la aplicacin est listo para enviar y
recibir datos de sus sensores, se activar el evento
"deviceready", cuando esto suceda, se ejecutar la funcin
"dispositivoListo".
Ahora es necesario definir la funcin
"dispositivoListo" que, en su forma mas bsica, puede
ser:
function dispositivoListo(){
alert(" tu dispositivo esta listo para usar la API de
PhoneGap")
}
Para este punto, el cdigo completo de la aplicacin es:
Ejercicio 7.2
<!DOCTYPE html>
<html>
<head>
<title>Ejercicio 7.2</title>
<meta charset="utf-8">
<link rel="stylesheet" href="css/hojaDeEstilos.css" >
<script type="text/javascript" charset="utf-8"
src="cordova.js"></script>
<script>
document.addEventListener("deviceready",
dispositivoListo, false);
function dispositivoListo(){
alert(" tu dispositivo esta listo para usar la API de
PhoneGap")
}
</script>
</head>
<body>
<h1>Mi primer app</h1>
<button id="boton1"> Botn</button>
<script>
document.getElementById("boton1").onclick =
function(){alert(" haz hecho click")}
</script>
</body>
</html>
Una vez compilado el ejercicio, se mostrar una ventana
de alerta en cuanto el dispositivo este listo para ejecutar
PhoneGap, similar a esto:
Archivos de un proyecto
PhoneGap
Cuando se crea un proyecto PhoneGap, tal como vimos en
los ejemplos anteriores, utilizamos una serie de archivos
de diferentes formatos como JavaScript CSS.
En general los dos archivos con los que vamos a trabajar
en PhoneGap sern:
index.html: este archivo es la base de toda aplicacin
PhoneGap, es crucial que toda aplicacin contenga un
archivo con exactamente ese nombre y extensin ( sin
maysculas, ni espacios ) de lo contrario, la aplicacin no
funcionar correctamente.
cordova.js: la conexin entre el documento HTML y la
API de PhoneGap. Este archivo permite ejecutar
comandos en lenguaje JavaScript que, gracias a PhoneGap
pueden interactuar con el hardware del equipo mvil. El
nombre de este archivo cambia segn la versin, usando
la nomenclatura: Cordova-X.x.js donde "X.x" es el
nmero de la versin actual. En este libro solo aparecer
con el nombre "cordova" sin nmero de versin para
efectos de redaccin. Recuerda siempre actualizar tu
cdigo para que se ajuste a al nombre del archivo que
utilizas.
Estructura de proyectos en
Xcode
Xcode fue creado para desarrollar aplicaciones de iOS,
los proyectos de PhoneGap son exactamente iguales a un
proyecto regular para iPhone/iPad pero con ligeras
adaptaciones.
Al revisar los archivos del proyecto, encontrars una
carpeta llamada "www" all estn todos los archivos en
los que se basa el proyecto, esta carpeta es la raz de toda
aplicacin.
Archivos de configuracin
Los archivos de configuracin de Android y iOS son muy
distintos en su forma y sintaxis, sin embargo, cumplen la
misma funcin: configuran la forma en que la aplicacin
ser ejecutada dentro del dispositivo.
Dentro de estos archivos de configuracin se esconde
informacin crucial de toda app aqu se definen los
iconos que identificaran la aplicacin, las pantallas de
carga, la orientacin y hasta la capacidad de mostrarse a
pantalla completa.
Vamos a analizar individualmente los archivos de
configuracin de estos dos sistemas operativos
Configuracin en iOS
Tal como se menciona en el apartado de archivos de iOS ,
el archivo de configuracin de las aplicaciones iOS se
encuentra en la se encuentra en la carpeta "Suporting
Files" del proyecto.
En los proyectos de iOS generalmente hay dos archivos
con la extensin .plist, el que nos interesa es el que tenga
el nombre del proyecto con el sufijo "-Info" (ej: si mi
proyecto se llama test, el archivo se llamara testInfo.plist).
Al abrir este archivo encontraremos una lista de
propiedades de la aplicacin:
-Control de orientacin
En iOS es posible bloquear la orientacin de la
aplicacin en posicin horizontal o vertical evitando la
conducta por defecto de rotar la pantalla automticamente.
Es posible editar esta conducta desde el archivo de
configuracin buscando el valor "Supported Interface
orientations". En iOS hay cuatro posibles orientaciones (
horizontal a la derecha y a la izquierda, vertical a la
derecha e izquierda) por lo que este valor permite incluir
de una a cuatro posibles posiciones soportadas.
Configuracin en Android
La configuracin de las aplicaciones android se realiza en
el archivo llamado AndroidManifest.xml que se encuentra
en la raz del proyecto Android.
En el AndroidManifest encontramos todo tipo de detalles
sobre la aplicacin, como las resoluciones soportadas o
los permisos de acceso al dispositivo.
Al igual que con la configuracin de iOS, este archivo nos
permite configurar aspectos importantes de nuestra
aplicacin.
-Control de orientacin
Para evitar que la aplicacin se ajuste a la orientacin del
aparato es posible bloquear la apariencia de la aplicacin
para que solo funcione en modo horizontal o vertical.
Necesitas buscar en el archivo de configuracin el nodo
<activity y le agregas el cdigo:
android:screenOrientation="portrait"
Tal y como se ilustra a continuacin:
getWindow().setFlags(WindowManager.LayoutParams.FL
WindowManager.LayoutParams.FLAG_FULLSCREEN
|
WindowManager.LayoutParams.FLAG_FORCE_NOT_FU
Por ejemplo en la aplicacin de demostracin que
mencionamos anteriormente, el archivo TestActivity.java
quedara con el siguiente cdigo:
package mobi.revolucion.test;
import org.apache.cordova.DroidGap;
import android.os.Bundle;
import android.view.WindowManager;
public class TestActivity extends DroidGap {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
super.loadUrl("file:///android_asset/www/index.html
getWindow().setFlags(WindowManager.LayoutParam
WindowManager.LayoutParams.FLAG_FULLSCREE
|
WindowManager.LayoutParams.FLAG_FORCE_NO
}
}
-Imagen de Inicio
La imagen de inicio o Splash Screen es el grfico que
aparece mientras el dispositivo mvil carga tu aplicacin.
Prcticamente todas las aplicaciones usan un splash
screen porque los dispositivos generalmente tardan un
tiempo en inicializar una aplicacin, tambin esta imagen
sirve para introducir al usuario a lo que ser la
aplicacin.
Antes de comenzar a configurar, crea una imagen en
formato PNG de 320px de ancho y 480px de alto. Busca
en tu proyecto la carpeta "res", all encontraras varias
carpetas, cada una de ellas almacena archivos grficos
correspondientes a las resoluciones soportadas por tu
proyecto android, la nomenclatura de estas carpetas es:
drawable-hdpi: archivos grficos de alta resolucin
(High Density per Inch)
drawable-ldpi: archivos grficos de baja resolucin
(Low Density per Inch)
drawable-mdpi: archivos grficos de mediana
resolucin (Medium Density per Inch)
drawable-xhdpi: archivos grficos de muy alta
resolucin (eXtra High Density per Inch)
Cada carpeta necesita un tamao diferente de imagen para
http://developer.android.com/guide/practices/screens_supp
Por ahora, solo guarda el mismo archivo grfico en
formato PNG que acabas de crear en cada una de estas
carpetas, asegurate que en todas tengan el mismo nombre:
"splash.png".
Para incluir esta imagen dentro aplicacin tambin es
necesario modificar el archivo de actividad como se
detallo en el apartado anterior. En este caso se necesita
localizar esta lnea en el archivo de actividad:
super.loadUrl("file:///android_asset/www/index.html");
y reemplazarla con el siguiente cdigo:
super.setIntegerProperty("splashscreen",
R.drawable.splash);
super.loadUrl("file:///android_asset/www/index.html",
10000);
La primera lnea agrega el soporte para el splash screen
usando el archivo "splash.png", la segunda lnea, incluye
super.setIntegerProperty("splashscreen",R.drawable.splas
super.loadUrl("file:///android_asset/www/index.html",100
getWindow().setFlags(WindowManager.LayoutParams.FL
WindowManager.LayoutParams.FLAG_FULLSCREEN
|
WindowManager.LayoutParams.FLAG_FORCE_NOT_FU
}
}
Edita los archivos de configuracin de tu aplicacin y
pruebala en el emulador, notars que ahora muestra una
imagen al inicializarse.
En este captulo analizamos las propiedades y
configuracin bsica de un proyecto PhoneGap, en los
prximos captulos vamos a revisar los tres pilares
fundamentales para crear un proyecto PhoneGap: HTML5,
CSS y JavaScript.
HTML5
HTML5, la base de
PhoneGap
Como hemos visto en ejercicios anteriores, la base
central de una aplicacin PhoneGap es HTML5. Gracias a
esta integracin con la nueva versin de HTML, es que
podemos aplicar lo ms novedoso del desarrollo web al
entorno mvil.
Aunque ya se ha utilizado en varios ejercicios, vamos a
hacer hincapi en un detalle importante de los documentos
que estamos usando en este manual, en todos los casos
iniciamos los documentos con esta primera lnea:
<!DOCTYPE html>
Esta lnea es el doctype y define el documento en el que
vamos a trabajar como uno de tipo HTML5. Esta
definicin permite acceder a las nuevas tecnologas de la
web y lo mejor: es perfectamente compatible con todos
los equipos en los que funciona PhoneGap.
Viewport
El viewport es un elemento clave para asegurar la escala
y apariencia en que se muestran las aplicaciones. Si no se
incluye este el elemento en el cdigo se corre el riesgo de
que las aplicaciones se muestren en una escala incorrecta.
El viewport es el rea visual en la cual se muestra un
documento HTML, es posible manipular este elemento
para controlar la forma en que se despliegan los
contenidos en la pantalla de un dispositivo mvil.
Manipulando los atributos del viewport es posible
configurar elementos de visualizacin como el ancho,
alto, tamao y escala de un documento. Para habilitar el
viewport solamente se aade esta lnea dentro del
<head>
<meta name="viewport" content="width=devicewidth"/>
sta configuracin en especial se adapta dinmicamente al
tamao de pantalla del dispositivo mostrando los
contenidos en su escala correcta.
Esta etiqueta no solo nos sirve para ajustar el tamao del
rea visible, tambin podemos controlar el "pinch zoom"
Canvas
Muy similar al concepto de Flash, el elemento canvas es
un rea rectangular que permite representar grficos e
imgenes de forma dinmica en mapa de bits.
Canvas ofrece una amplia gama de posibilidades grficas,
que le permiten controlar todos los pixeles de su
contenido y manipularlos de muchas maneras.
Esta tecnologa tambin es compatible con equipos
mviles y se vuelve particularmente atractiva como un
medio para mostrar animaciones y grficos dinmicos, en
especial, tomando en cuenta que el plugin de Flash fue
descontinuado para equipos Android y no es compatible
con equipos iPhone. Por este mismo motivo el formato
Flash (.swf) no es compatible en aplicaciones PhoneGap.
Insertar Canvas en una app no podra ser ms sencillo,
solamente se debe incluir un cdigo similar a ste en
cualquier parte dentro de <body>
<canvas id="misCanvas"></canvas>
Se recomienda usar el atributo "id" ya que los contenidos
de Canvas se asignan con comandos de javascript,
asignarle un ID facilita la manipulacin desde este
lenguaje.
En el siguiente ejemplo, crea un crculo usando comandos
bsicos en <canvas>
Ejercicio 8.1
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width,
initial-scale=1.0, maximum-scale=1.0, userscalable=no;" />
<title>Ejercicio 8.1</title>
<meta charset="utf-8">
</head>
<body>
<canvas id="misCanvas" width="200" height="200">
</canvas>
<script>
/// selecciona el elemento canvas
var canvas =
document.getElementById("misCanvas");
var contexto = canvas.getContext("2d");
///crea un crculo dentro de las canvas
contexto.beginPath();
contexto.arc(60, 60, 50, 0, Math.PI*2, true);
contexto.closePath();
contexto.strokeStyle = "#FF0000";
contexto.fillStyle = "#0000FF";
contexto.lineWidth = 3;
contexto.fill();
contexto.stroke();
</script>
</body>
</html>
Como se puede observar lo que realmente genera los
grficos dentro de la API de Canvas es Javascript, en este
caso se gener un crculo de color azul:
animacin
var posX = 0;
var posY = 0;
var dx = 5;
var dy = 5;
//tamao de la figura
var shapeSize = 50;
// selecciona el elemento canvas y lo convierte
en una variable
var canvas =
document.getElementById("misCanvas");
/// selecciona el contexto 2D que usaremos para
dibujar
var contexto = canvas.getContext("2d");
/// la funcin animar() se ejecutar cada ciclo del
intervalo definido al inicio
function animar(){
// Limpia el dibujo anterior
contexto.clearRect(0, 0, canvas.width,
canvas.height);
/// Crculo
contexto.beginPath();
contexto.arc(posX,posY,shapeSize,0,Math.PI*2,true);
contexto.fillStyle = '#'+
(Math.random()*0xFFFFFF<<0).toString(16);
contexto.fill();
// controla la posicin, evita que los
elementos salgan de vista
if (posX + shapeSize > canvas.width || posX
< 0){
dx = -dx;
}
if (posY + shapeSize > canvas.height || posY
< 0){
dy = -dy;
}
posX += dx;
posY += dy;
}
</script>
</body>
</html>
Este cdigo genera una animacin con circulo de colores
aleatorios que baila por toda la pantalla sin usar ningn
plugin externo.
Video (iOS)
Una de las APIs ms famosas de HTML5 es el tag
<video> que permite incluir vdeos directamente en los
documentos HTML5 sin usar ningn plugin.
El soporte para vdeo, aunque est disponible en el
navegador de Android, no est disponible desde las
aplicaciones PhoneGap que usan esta plataforma. Al
momento de escribir este manual, los ejemplos que
veremos a continuacin slo funcionan en equipos iOS.
-Insertar video
Lo primero que se necesita para mostrar video en una
aplicacin PhoneGap, es un archivo con el formato
adecuado para desplegarse correctamente en un equipo
mvil.
Existe una infinidad de programas con la capacidad de
codificar el archivo de video en el formato correcto. En el
presente manual utilizaremos Miro Video Converter, un
proyecto de cdigo abierto, gratuito y multiplataforma. El
programa se puede descargar en el sitio oficial:
http://www.mirovideoconverter.com
Para darle el formato correcto a un video con este
programa slo es necesario arrastrar el archivo a la
ventana del convertidor y en este caso seleccionar la
opcin: "iPhone"
Audio (iOS)
HTML5 tambin permite utilizar archivos de audio
anidados directamente dentro del navegador sin necesidad
de plugins, esto se logra gracias al tag <audio>.
Al igual que con el video, la API de audio aunque esta
disponible en el navegador de Android, no lo esta para
aplicaciones basadas en PhoneGap. Los ejemplos que
veremos a continuacin solo funcionan en iOS
-Insertar audio
El formato que necesitamos para insertar audio con
HTML5 en iOS es el omnipresente .mp3, casi seguramente
tienes un archivo de este formato en algn lugar de tu
ordenador, solo cpialo en la carpeta del proyecto
phonegap y renombrarlo como "audio.mp3".
Para insertar audio en un documento debes utilizar el tag
<audio> similar a este cdigo
<audio id="miAudio" src="audio.mp3" controls >
</audio>
-Control programtico
La API de <audio> es muy similar a la de video y utiliza
los mismos mtodos para controlar el audio.
En el siguiente ejemplo aprovechamos la capacidad que
tiene <audio> de ser invisible al eliminar el atributo
"control" y desplegamos nuestros propios controles,
usando la API de audio:
Ejercicio 8.4
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width,
initial-scale=1.0, maximum-scale=2" />
<title>Ejercicio 8.4</title>
<meta charset="utf-8">
<style>
button {
background: green;
border-radius: 10px;
font-size: 1em;
margin: 4%;
padding: 1em;
width: 40%;
}
button:last-of-type {
background: red;
}
</style>
</head>
<body>
<audio id="miAudio" src="audio.mp3"></audio>
<button onClick="reproducir()"> reproducir
</button>
<button onClick="detener()"> detener </button>
<script>
function reproducir(){
var audio =
document.getElementById("miAudio");
audio.play();
}
function detener(){
var audio =
document.getElementById("miAudio")
audio.pause();
}
</script>
</body>
</html>
Los botones controlan la reproduccin del audio y con
algo de diseo adicional estarn listos para cualquier
aplicacin musical.
CSS 3
HTML5 es la base de construccin de las aplicaciones en
PhoneGap, pero existe otra herramienta igual de crucial
para crear una aplicacin: el lenguaje CSS (Cascading
Style Sheets).
CSS permite definir o modificar la apariencia de todos y
cada uno de los elementos en un documento HTML o en
nuestro caso una aplicacin PhoneGap.
La ltima versin de la especificacin de este lenguaje es
el CSS3, y al igual que HTML5 est disponible para
utilizarlo en las aplicaciones hechas con PhoneGap.
Media queries
Los Media Queries son una serie de condiciones y
requisitos de CSS que permiten ejecutar cdigo al
evaluar ciertas condiciones predeterminadas, por
ejemplo, permiten invocar hojas de estilos adaptadas a las
capacidades especficas de cada dispositivo.
Con Media Queries tienes parmetros ms inteligentes
para definir las condiciones en que se deben mostrar las
hojas de estilo, por ejemplo, invocar hojas de estilo segn
el ancho y alto del navegador o del equipo, la orientacin
actual del dispositivo (horizontal o vertical) y hasta la
resolucin de pantalla.
Debido a que PhoneGap tiene la capacidad de generar
cdigo que funciona en muchos equipos y plataformas, el
uso de media queries es particularmente til para adaptar
el contenido a las condiciones y equipos cambiantes.
Usando media queries, es posible crear un solo cdigo
base con varias hojas de estilo que adapten la apariencia
de la aplicacin al desplegarse en un mvil, un tablet o un
equipo de alta resolucin.
-Sintaxis
Existen dos formas de utilizar media queries en un
documento, la primera es insertarlos directamente en la
llamada al documento CSS, usando para esto el atributo
media:
<link href="css/movil.css" rel="stylesheet"
type="text/css" media="handheld, only screen and
(max-device-width: 480px)" />
De esta forma, la hoja de estilos se ejecutar slo si se
renen las condiciones definidas, en el cdigo anterior
por ejemplo, los estilos que estn en el documento
"movil.css" se mostrarn slo si la aplicacin se ejecuta
en un dispositivo mvil, que tenga como mximo un ancho
de pantalla de 480 pixels.
La segunda opcin para utilizar media queries en un
documento es incluirlos dentro del documento CSS:
@media only screen and (max-width: 480px) {
body{ background:red }
}
@media only screen and (max-width: 999px) {
body{ background:green }
}
En este caso, la misma hoja de estilos puede reaccionar
de diferentes maneras: si el dispositivo mide menos de
480 pixels muestra un background rojo, si mide mas que
este tamao y menos de 999 pixels, el background ser
verde.
Este sencillo ejemplo, en la prctica mostrar un fondo de
color rojo si se ejecuta en un iPhone, mientras que el
fondo ser verde si la misma aplicacin se ejecuta en un
iPad.
Selectores CSS3
CSS3 incluye una nueva gama de selectores que podemos
utilizar en nuestras aplicaciones, eliminando la necesidad
de incluir constantemente clases o IDs. Esto permite que
nuestro cdigo no solo sea ms flexible, tambin, ms
eficiente. Al tener que buscar menos clases o IDs para
aplicar los estilos, le ahorramos algo de carga al limitado
procesador de un dispositivo mvil.
Pongamos manos a la obra , vamos a comenzar a explorar
los selectores usando como base este cdigo que no
utiliza ninguna clase ni ID:
Ejercicio 9.1
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=devicewidth, initial-scale=1.0, maximum-scale=2" />
<title>Ejercicio 9.1</title>
<meta charset="utf-8">
<link rel="stylesheet" href="ejercicio_9-1.css"
/>
</head>
<body>
<h1> Receta de t helado </h1>
<img src="icedTea.png" alt="tefrio" height="157"
width="73"/>
<ul>
<li>Hervir agua</li>
<li>Mezclar T</li>
<li>Agregar Limon y azucar</li>
<li>Enfriar</li>
<li>Disfrute!</li>
</ul>
</body>
</html>
Para mantener el orden del ejemplo, vamos a trabajar con
una hoja de estilos externa que debes crear en la carpeta
de tu proyecto en con el nombre "ejercicio_9-1.css", por
ahora dejalo en blanco.
El cdigo base, produce una aplicacin con este aspecto
h1{font-size:20px; font-weight:normal;
background:#000; color:#fff; height:52px; line-height:
52px; text-align:right}
img{position: absolute; top:0}
li{ list-style-type:none; background:#000000;
height:45px; margin-bottom:10px; color:#fff; textindent:22px; line-height:45px}
Esto es CSS tradicional, el que siempre has utilizado para
crear sitios. Luego de aplicarlos, tenemos un punto de
partida para aplicar el CSS3, tu aplicacin por ahora
debera verse as:
li:nth-child(2) {background:#ab5110}
El tercer elemento lo vamos a seleccionar usando :nth-oftype un selector muy similar al anterior pero que adems
de seleccionar en base al orden de los elementos, slo
afecta elementos de un tipo especfico, en este caso solo
selecciona el tercer elemento de la lista (<li>).
li:nth-of-type(3){background:#cd5d14}
En este caso en el grupo solo hay elementos de tipo <li>
pero si hubiera cualquier otro tag, :nth-of-type lo ignora
en su conteo por no ser del tipo correcto.
El penltimo elemento lo seleccionaremos con nth-lastchild que es el opuesto de nth-child. Este selector
tambin busca los elementos a partir del orden en que se
encuentran, pero hace su conteo a partir del ltimo
elemento. En este caso como queremos seleccionar el
penltimo elemento de la lista, le enviamos el numero 2
como parmetro para que cuente el segundo elemento
antes del final de la lista.
li:nth-last-child(2){background:#e46516}
Este selector es particularmente til si necesitamos
seleccionar elementos al final de una lista de la que
http://www.w3.org/TR/selectors/#selectors
}
Detallar las propiedades y mecnica de las gradientes es
algo extenso y complicado de explicar en este manual
sobre aplicaciones mviles, para mantener las cosas
prcticas y sencillas se recomienda usar servicios como
colorzilla, que a travs de una interfase grfica genera sin
mayor complicacin el codigo para mostrar gradientes en
CSS.
http://www.colorzilla.com/gradient-editor/
Tipografas
Las tipografas han sido un dolor de cabeza histrico para
los desarrolladores de sitios web desde el inicio de la
internet. Afortunadamente CSS3 soluciona de una vez por
todas el problema y nos permite utilizar fuentes
personalizadas en nuestras aplicaciones.
Servicios como google fonts nos dan la facilidad de
incluir tipografas de uso libre en nuestras aplicaciones
http://www.google.com/webfonts
Google permite que utilicemos cualquiera de sus
tipografas y nos brinda un cdigo para enlazar el
documento con sus fuentes online.
Aunque tcnicamente es posible utilizar las tipografas
online de Google, no se recomienda esta tcnica. Utilizar
contenidos que requieren conexin a internet no es una
prctica recomendable para aplicaciones mviles ya que
los usuarios no siempre tendrn acceso a internet y por
ende las tipografas podran no desplegarse .
Es posible descargar las fuentes de Google Webfonts a
traves de la opcion " Download your collection "
la tipografa "serif".
Transformaciones
CSS3 incluye una nueva gama de propiedades llamadas
transformaciones, stas nos permiten como el nombre lo
dice, transformar objetos ya definidos y escalarlos,
moverlos o girarlos segn sea necesario.
Vamos a probar las transformaciones girando un poco la
imagen de la aplicacin, agrega esta lnea al CSS:
img{ -webkit-transform: rotate(-10deg); }
La funcin rotate() permite rotar un elemento segn un
valor definido en grados (representado como "deg" por la
palabra en ingls "degrees").
Otra caracterstica interesante de las transformaciones es
que podemos asignar varias al mismo tiempo, para probar
esta peculiaridad de las transformaciones reemplaza la
lnea anterior por esta otra
img{ -webkit-transform: rotate(-10deg) scale(0.5) }
Ahora la imagen no solo esta rotada, sino que ha sido
escalada a la mitad de su tamao original:
Transiciones
Ya hemos usado muchos trucos de CSS3 en este ejemplo,
pero an nos queda un As bajo la manga: las transiciones.
Las transiciones de CSS3 permiten pasar de un estado a
otro de manera suave y fluida, en otras palabras, podemos
hacer animaciones al cambiar una propiedad de CSS3.
Para habilitar la capacidad de transformacin de un
elemento es necesario asignar la propiedad de transicin
antes de cualquier transformacin, de lo contrario slo
cambiar de un estado a otro de manera abrupta, sin
ninguna animacin. Para probar una transicin bsica pega
este cdigo en el css del ejemplo:
img{ -webkit-transition: top 1s; }
Esta propiedad define como manejar los cambios que
afecten el elemento seleccionado, en este caso , img.
Al elegir una propiedad, en este caso "top", se indica que
cualquier cambio en el valor de dicha propiedad se
realizar con una transicin suave. Si se quisieran afectar
todas la propiedades se puede utilizar el valor "all".
El segundo parmetro de la transicin define el tiempo
que tardar, as, cuando se modifique la propiedad
http://www.w3.org/TR/css3-transitions/
Para este punto tienes la informacin para mejorar la
apariencia de tus aplicaciones usando lo ltimo del CSS3
incluso creando animaciones y efectos sin usar
programacin.
Sin embargo, es indispensable utilizar javascript para
crear aplicaciones realmente profesionales, incluso para
los ejemplos ms simples en este manual hemos utilizado
javascript bsico.
En el prximo captulo revisaremos las ventajas que nos
ofrece javascript para crear interactividad y en especial
para enriquecer nuestras aplicaciones manipulando los
sensores y elementos de hardware del equipo mvil.
JAVASCRIPT
JavaScript es el lenguaje que se encarga de la
interactividad en nuestras aplicaciones. Mientras que
HTML provee los datos y CSS se encarga de presentarlos,
JavaScript permite manipular los elementos del
documento, administrar eventos e incluso agregar o quitar
elementos ya existentes.
Imagina que una aplicacin se desarrolla por capas, el
HTML es la capa de datos con toda la informacin,
enlaces e imgenes del documento. CSS es la capa
esttica, diagramando la informacin, asignando colores,
posiciones y efectos. JavaScript se encarga de la capa
interactiva y de acceder los sensores del dispositivo
mvil a travs de la API de PhoneGap.
En este captulo se mostrar cmo utilizar JavaScript en
aplicaciones PhoneGap con ejemplos bsicos y detallando
paso a paso.
Si an no ests familiarizado con las bases de este
lenguaje, dale una visita al centro de documentacin de
Mozilla que tiene excelente referencia y una gua
detallada para aprender JavaScript desde cero.
https://developer.mozilla.org/es/javascript
API de PhoneGap
Tal como se indic anteriormente, PhoneGap comunica
las aplicaciones basadas en HTML5 con el dispositivo a
travs del uso de un interface de funciones forneas que
ejecuta cdigo nativo a partir de comandos invocados por
JavaScript.
A lo largo del libro hemos utilizado varios ejemplos de
JavaScript, ahora vamos a detallar cmo acceder la API
de PhoneGap con ste lenguaje. Javascript es el lenguaje
que nos permitir controlar sensores como la cmara,
micrfono o GPS del dispositivo mvil
PhoneGap tiene una serie de objetos y clases de
JavaScript disponibles para interactuar con los diferentes
sensores y propiedades del dispositivo mvil. Estas
clases a su vez, tienen disponibles mtodos para enviar o
recibir informacin del equipo.
Los mtodos son un conjunto de comandos o instrucciones
predefinidos que realizan una determinada tarea.
jQuery mobile
Posiblemente el framework de JavaScript ms utilizado en
la web es jQuery y tiene su versin adaptada para
dispositivos mviles llamado jQuery Mobile.
jQuery Mobile es un plugin del jQuery original y requiere
que este ltimo est instalado previamente para poder
funcionar.
Una vez activo, jQuery Mobile hace dos cosas: primero,
optimiza las funciones nativas para mejorar su
performance en equipos mviles , segundo, modifica el
HTML y genera un layout con una serie de elementos
grficos predefinidos que acelera sustancialmente la
velocidad de produccin.
http://docs.jQuery.com/Downloading_jQuery#Current_Rele
Crea una subcarpeta llamada "js" dentro de tu proyecto
PhoneGap y guarda all el archivo de jQuery.
Una vez descargado jQuery, debes descargar el plugin de
jQuery Mobile desde su sitio web oficial:
http://jquerymobile.com/download/
Crea una carpeta con el nombre "jQueryMobile",
descomprime el archivo .zip que acabas de descargar y
copia all todos los archivos que contiene. Al final
deberas tener una estructura similar a esta:
Ejercicio 10.1
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=devicewidth, initial-scale=1.0, maximum-scale=2" />
<title>Ejercicio 10.1</title>
<meta charset="utf-8">
<link rel="stylesheet"
href="js/jQueryMobile/jQuery.mobile.theme1.1.0.min.css" />
<script src="js/jQuery-1.7.2.min.js"></script>
<script src="js/jQueryMobile/jQuery.mobile1.1.0.min.js"></script>
</head>
<body>
</body>
</html>
Como se puede observar en negrita agregamos 3 lneas de
cdigo extra para incluir los archivos descargados. La
primera incluye la hoja de estilos de jQuery Mobile que
se usar para crear las interfaces, la segunda lnea incluye
-Creacin de Interfaces
jQuery Mobile nos permite crear interfaces optimizadas
para dispositivos mviles muy rpidamente y con
relativamente poco esfuerzo.
La forma en que trabaja, es reescribiendo el cdigo
original del documento y generando uno nuevo, ms
complejo, segn las caractersticas y argumentos
solicitados.
Una caracterstica interesante de jQuery Mobile es que, a
diferencia de un sitio web, que pasa de un documento
HTML a otro para mostrar la informacin, las pginas o
"pantallas" de una aplicacin se manejan desde un solo
documento HTML.
Las pginas o "pantallas" estn en un nico archivo,
jQuery Mobile las administra para mostrar slo la parte
del documento correspondiente a cada pantalla mientras
que el resto permanece oculto. De esta forma se acelera
sustancialmente la carga de pginas, tambin permite
administrar eventos y animaciones entre una pantalla y
otra.
jQuery Mobile aprovecha al mximo los nuevos
elementos de HTML5 y hace un uso intensivo de los
atributos personalizados que se definen con el prefijo
"data-"
<html>
<head>
<meta name="viewport" content="width=devicewidth, initial-scale=1.0, maximum-scale=2" />
<title>Ejercicio 10.2</title>
<meta charset="utf-8">
<link rel="stylesheet"
href="js/jqueryMobile/jquery.mobile.theme1.1.0.min.css" />
<script src="js/jquery-1.7.2.min.js">
</script>
<script src="js/jqueryMobile/jquery.mobile1.1.0.min.js"></script>
</head>
<body>
<div data-role="page" id="inicio" >
<div data-role="header">
<h1> Inicio </h1>
</div>
<a href="#pantalla2" data-role="button"> Ir a
Pantalla 2 </a>
</div>
<div data-role="page" id="pantalla2">
<div data-role="header">
<li><a href="#pantalla3">Otros</a>
</li>
</ul>
</div><!-- /navbar -->
</div>
</div>
<div data-role="page" id="pantalla3">
<h1> Pantalla 3 </h1>
<a href="#" data-rel="back" datarole="button" > Regresar </a>
</div>
</body>
</html>
XUI
XUIJS es una librera de JavaScript creada
especficamente para dispositivos mviles, a diferencia
de jQuery Mobile que crea todos los elementos graficos,
XUI es una librera completamente minimalista, pensada
para los que se enfocan en la eficiencia y quieren
mantener control total sobre los elementos de la interfaz.
Una de las principales ventajas que tiene XUI es tu
tamao, apenas 10.4 Kb en su versin reducida
(comparado con los (70kb extra de jQuery Mobile). XUI
se adapta perfectamente con PhoneGap, de hecho su
creador, Brian Leroux, es tambin uno de los principales
desarrolladores de PhoneGap.
-Instalacin
Instalar XUI es sumamente sencillo. Crea una carpeta "js"
en tu proyecto PhoneGap y copia all la versin de XUI
con soporte para webkit que encuentra en el sitio oficial
http://xuijs.com/downloads
La estructura de archivos de una aplicacin basada en
XUI debera verse similar a esta imagen:
cdigo.
Partiremos con este cdigo como base:
Ejercicio 10.3
<!doctype html>
<html>
<head>
<title>Ejercicio 10.3</title>
<script src="js/xui.js"></script>
</head>
<body>
<ul id="contenedor">
</ul>
</body>
</html>
Este cdigo, apenas tiene una llamada a la librera XUI y
una lista vaca con el id "contenedor".
La primera lnea que vamos a agregar escuchara un evento
"ready". En XUI este evento se activa en cuanto el
documento est cargado y listo para ser manipulado.
x$.ready( init );
function init(){
x$(document').xhr('http://feeds.feedburner.com/revolucion
format=xml', function() {
x$(this.responseXML).find("item title").each(bloque)
});
}
Dentro de la funcin incluimos el mtodo xhr que permite
llamadas a otros documentos a travs de AJAX.
En este caso, el mtodo xhr invocar el URL en el que se
encuentra el feed RSS de revolucion.mobi.
Recuerda que si estas trabajando en iOS, tanto esta como
cualquier otra aplicacin necesita autorizacin para
acceder dominios externos, tal como se explica en el
captulo 9 de este manual.
Cuando XUI se logra conectar el archivo externo, activa
el segundo argumento que, en este caso, est incluido
directamente como funcin. La informacin de respuesta
que se recibe, en este caso un documento XML es enviada
automticamente como el parmetro "this.responseXML".
function bloque(element){
var texto = element.getElementsByTagName("title")
[0].textContent;
var entrada = '<li> ' + texto +' </li>';
x$("#contenedor").html('bottom',entrada);
}
En la funcin bloque se procesa cada entrada del blog, se
le extrae la informacin del ttulo y por ltimo se agrega
la lista contenedor con el mtodo "html" de XUI que
adems tiene una prctica opcin para ubicar el texto en
diferentes posiciones del nodo seleccionado, en este caso
"bottom" agrega una linea al final del texto actual, as los
ttulos se irn agregando consecutivamente a la lista.
El lector de noticias por RSS ya est listo!
Gracias a XUI, este simple lector de RSS solo necesit 10
lneas de programacin y apenas le agrego 10kb extra a la
aplicacin, no es en vano que esta librera es una de las
favoritas de muchos desarrolladores PhoneGap, entre los
cuales se incluye el autor de este manual. ;)
El cdigo completo, con algo de CSS extra se vera as:
Ejercicio 10.4
<!doctype html>
<html>
<head>
<title>Ejercicio 10.4</title>
<script src="js/xui-2.3.2.min.js"></script>
<script>
x$.ready(init);
function init(){
x$(document).xhr('http://feeds.feedburner.com/revolucionm
format=xml', function() {
x$(this.responseXML).find("item").each(bloque)
});
}
function bloque(element){
var entrada = '<li> <a
href="'+element.getElementsByTagName("link")
[0].textContent+'"> ' +
element.getElementsByTagName("title")
[0].textContent+'</a> </li>';
x$("#contenedor").html('bottom',entrada);
}
</script>
<style type="text/css">
ul, body{margin:0; padding:0}
li{
border-bottom: 1px solid #1f3953;
font-size: 17px;
font-family:Arial;
text-shadow:1px 1px 1px #000;
list-style-type: none;
overflow: hidden;
padding: 5px;
background-image: -webkit-gradient( linear, left
bottom, left top, color-stop(0.23, rgb(59,109,160)),
color-stop(0.71, rgb(93,153,195)));
}
a{display:block; text-decoration:none; color:
#FFF;}
</style>
</head>
<body>
<ul id="contenedor">
</ul>
</body>
</html>
Este sencillo lector se ver as:
INFORMACION DEL
USUARIO
Acceder la informacin del dispositivo mvil puede ser
crucial para algunas aplicaciones que necesiten una
versin en especial de software, conocer el sistema
operativo en que se ejecutan o simplemente mostrar
informacin del usuario.
Estas capacidades toman particular importancia si
tomamos en cuenta que uno de los principales beneficios
de PhoneGap es la capacidad de generar un slo cdigo
base que puede funcionar en mltiples plataformas.
Conocer en detalle la informacin del sistema permite
crear un cdigo adaptable a la plataforma en la que
funciona, ejecutar slo acciones que le sean compatibles
y evitar cualquier comando que tenga problemas de
soporte o compatibilidad.
Con la informacin del sistema es posible por ejemplo
mostrar una apariencia grfica si el equipo usa Android y
otra si esta en iPhone, Blackberry o Windows Phone
ofreciendo una experiencia ms consistente y
contextualizada.
case "Android":
//muestra una hoja de estilos especifica
para iPhone
archivoCSS = "css/skin_Android.css";
break;
default:
// si no detecta equipo iPhone ni Android
muestra esta version
archivoCSS = "css/skin_Default.css";
break;
}
var headID =
document.getElementsByTagName("head")[0];
var cssNode = document.createElement('link');
cssNode.rel = 'stylesheet';
cssNode.href = archivoCSS;
headID.appendChild(cssNode);
}
</script>
</head>
<body>
</body>
</html>
onDeviceReady, false);
function onDeviceReady(){
/* crea las variables que seran actualizadas segun
la informacion del sistema*/
var sistemaOperativo
var numeroVersion;
if(device.platform == "Android"){
sistemaOperativo = "Android";
switch(device.version){
case "2.1":
numeroVersion = "Eclair";
break;
case "2.2":
numeroVersion = "Froyo";
break;
case "2.3":
numeroVersion = "Gingerbread";
break;
case "3.0":
numeroVersion = "Honeycomb";
break;
case "4.0":
numeroVersion = "Ice Cream
Sandwich";
break;
case "4.1":
numeroVersion = "Jelly Bean";
break;
}
}else if(device.platform == "iPhone" ||
device.platform == "iPhone Simulator" ){
sistemaOperativo = "iOS";
numeroVersion = device.version;
}
/*selecciona el div "informacion" y le asigna
contenido */
document.getElementById("informacion").innerHTML=
"Ests usando: "+sistemaOperativo + " con la version:
" + numeroVersion ;
}
</script>
</head>
<body>
<h1 id="informacion"></h1>
</body>
</html>
Identificacin de equipos y
consideraciones de
privacidad
El UUID ( Universally Unique Identifier ) es un
identificador del dispositivo que se usa para reconocer
una unidad especfica, es similar al concepto de nmero
de serie del equipo o el MAC address de una terminal de
red. En teora, el UUID es un identificador nico, aunque
segn la plataforma el tipo de identificacin vara.
En el caso de Android, se usa como identificacin una
integral aleatoria de muy baja probabilidad de repeticin,
ms no necesariamente nica.
Los equipos iOS crean un UUID nico a partir de un
nmero basado en algunos elementos de hardware del
dispositivo.
En los equipos con Blackberry OS el identificador es el
nmero de PIN, mientras que los aparatos con Windows
Phone crean un hash basado en el dispositivo+usuario
El siguiente ejemplo muestra el nmero UUID de un
dispositivo:
Ejercicio 11.3
<!DOCTYPE html>
<html>
<head>
<title>Ejercicio 11.3</title>
<meta charset="utf-8">
<script type="text/javascript" charset="utf-8"
src="cordova.js"></script>
<script type="text/javascript" charset="utf-8">
//Notifica cuando el dispositivo esta listo
document.addEventListener("deviceready",
onDeviceReady, false);
// el dispositivo esta listo
function onDeviceReady() {
/// obtiene el numero de identificacion
var identificacion = device.uuid
//selecciona el elemento con el ID
"informacion" y muestra los datos
document.getElementById("informacion").innerHTML
= "El UUID de este equipo es: <br>"+identificacion
}
</script>
</head>
<body>
<p id="informacion"> </p>
</body>
</html>
La aplicacin resultante va a mostrar la cadena de
identificacin propia del sistema operativo en el que se
ejecute, similar al que se muestra en la imagen:
NOTIFICACIONES
En muchas ocasiones nuestras aplicaciones necesitarn
enviar alertas al usuario o consultarle su aprobacin para
algn efecto en el sistema, PhoneGap utiliza las
notificaciones nativas del sistema para enviar alertas,
crear dilogos de confirmacin, sonar timbres o utilizar el
vibrador del dispositivo
Enviar alertas
JavaScript , por defecto tiene una alerta bsica que
muestra un mensaje al usuario, esta alerta se invoca con el
mtodo alert() y es compatible con cualquier dispositivo
mvil.
En el siguiente ejemplo se muestra una alerta bsica de
JavaScript
Ejercicio 12.1
<!DOCTYPE html>
<html>
<head>
<title>Ejercicio 12.1</title>
<meta charset="utf-8">
<script type="text/javascript" charset="utf-8"
src="cordova.js"></script>
<script type="text/javascript">
//muestra una alerta basica
function mostrarAlerta() {
alert("alerta bsica");
return false;
}
</script>
</head>
<body>
<button onclick="mostrarAlerta();">Mostrar
alerta</button>
</body>
</html>
El ejemplo anterior vincula el evento onClick con la
funcin mostrarAlert() que, en este caso, despliega la
alerta usando el comando alert()de JavaScript
</script>
</head>
<body>
<button onclick="reproducirSonido(3);">Activar
alerta</button>
</body>
</html>
Como se observa en el ejemplo, se ha incluido un valor de
3 como parmetro en el llamado a la funcin
reproducirSonido() , este valor determina la cantidad de
veces que sonar la alarma.
En los equipos iPhone la alerta de sonido no tiene un
archivo de audio predeterminado, as que es necesario
que se incluya un archivo de audio de menos de 30
segundos con el nombre beep.wav en la raz del proyecto
(/www).
Vibrador
La mayora de los dispositivos moviles tienen la opcin
de vibrar para que sean ms sencillos de detectar los
mensajes aunque el ruido del entorno pueda afectar o en
casos en los que el usuario no quiere que se escuchen
estas alertas de sonido. Para enviar este tipo de mensajes
tenemos el mtodo vibrate() que recibe como parmetro el
tiempo que se desea que tarde la vibracin del equipo,
este parmetro se define en milisegundos, as que para
hacer por ejemplo que el vibrador se active por 2
segundos se debe asignar un valor de 2000 milisegundos.
El siguiente ejemplo activa el vibrador al presionar un
botn
Ejercicio 12.4
<!DOCTYPE html>
<html>
<head>
<title>Ejercicio 12.4</title>
<meta charset="utf-8">
<script type="text/javascript" charset="utf-8"
src="cordova.js"></script>
<script type="text/javascript">
function vibrar() {
navigator.notification.vibrate(2000);
}
</script>
</head>
<body>
<button onclick="vibrar();">Vibrar!</button>
</body>
</html>
En los equipos iPhone se ignora el parmetro de tiempo y
la alerta se ejecuta por un tiempo predefinido por el
sistema.
DETECTAR CONEXION
En el mundo de los dispositivos mviles, uno de los temas
ms importantes es el ancho de banda. Aunque en algunos
pases las conexiones de estos dispositivos tienen
capacidad de descarga ilimitada de datos, la mayora de
proveedores del mundo tiene restricciones de velocidad y
trfico. En algunos casos cuando el usuario se excede del
trfico base establecido en su plan pueden aplicar cobros
adicionales por lo que la descarga de contenidos
adicionales puede tener un impacto econmico para el
usuario.
Por regla general se recomienda siempre hacer un uso
responsable de la descarga de datos del usuario para
evitarle, en la medida de lo posible, efectos negativos en
su facturacin.
Detectar la presencia y tipo de conexin del usuario puede
ser un factor crucial en una aplicacion, ademas del ya
mencionado impacto en la facturacin, en la mayora de
los casos la conexin a internet no es constante. Por la
naturaleza mvil de estos dispositivos los usuarios
experimentan cambios constantes en su conexin desde el
tipo de conexin a la ausencia total de ella. Por eso es que
PhoneGap incluye un elemento en su API que no solo
Deteccin de conexin
Detectar la conexin es muy simple a travs de la
propiedad network.connection.type que devuelve una
integral de acuerdo al tipo de conexin que tiene el
usuario. Los tipos de enlace a internet que detecta
PhoneGap son
UNKNOWN : el sistema no puede determinar el tipo
de conexin.
ETHERNET : el equipo est conectado a una red
local o almbrica.
WIFI : el equipo est conectado a una red
inalmbrica.
CELL_2G : El equipo est usando una red de datos
celular de tipo 2G, ( GPRS / EDGE).
CELL_3G : El equipo est usando una red de datos
celular de tipo 3G.
CELL_4G : El equipo est usando una red de datos
celular de tipo 4G.
NONE : Ninguna conexin a internet detectada.
El siguiente ejemplo detecta la presencia de una conexin
a internet y muestra el tipo de la misma:
Ejercicio 13.1
<!DOCTYPE html>
<html>
<head>
<title>Ejercicio 13.1</title>
<meta charset="utf-8">
<script type="text/javascript" charset="utf-8"
src="cordova.js"></script>
<script type="text/javascript">
function mostrarConeccion() {
var networkState =
navigator.network.connection.type;
if (networkState == Connection.NONE){
alert("no hay conexion a internet")
}else{
alert("Dispositivo conectado a internet
usando: "+networkState)
}
}
</script>
</head>
<body>
<button onclick="mostrarConeccion();">Mostrar
conexion</button>
</body>
</html>
Gracias a que es posible detectar no slo la presencia de
la conexin a internet sino el tipo, podemos crear
aplicaciones que por ejemplo descarguen imgenes de
baja resolucin cuando tienen conexin mvil y
descarguen una versin de alta resolucin si la conexin
es de mejor calidad como en el caso de 4G o WI-FI
El siguiente ejemplo adapta sus contenidos segn la
calidad de la conexin, si tiene acceso por WI-FI muestra
una imagen de alta resolucin (500kb) por el contrario si
usa una conexin a red de datos mvil, muestra una
imagen de baja resolucin (28kb):
Ejercicio 13.2
<!DOCTYPE html>
<html>
<head>
<title>Ejercicio 13.2</title>
<meta charset="utf-8">
<script type="text/javascript" charset="utf-8"
src="cordova.js"></script>
document.getElementById("imagen").setAttribute("src","to
}else{
// si la conexin es por red celular carga
una imagen de baja calidad(28kb)
document.getElementById("imagen").setAttribute("src","to
}
}
}
</script>
</head>
<body>
<div>
<img id="imagen"/>
</div>
<button onclick="mostrarConeccion();">Mostrar
imagen segun conexion</button>
</body>
</html>
El resultado final muestra imgenes de diferente escala y
resolucin segn el ancho de banda del dispositivo.
Detectar posicin:
Como se detalla en el el captulo de JavaScript de este
libro, este mtodo sigue el patrn bsico de los mtodos
de PhoneGap, as por ejemplo para obtener el un
movimiento se utiliza
navigator.accelerometer.getCurrentAcceleration(lecturaEx
manejoDeError);
Como en la mayoria de los mtodos de la API , el primer
argumento es el nombre de la funcin que se activa cuando
la lectura es exitosa y el segundo se activa si ocurre algn
error.
El mtodo getCurrentAcceleration obtendr una lectura de
la posicin tridimensional del equipo y devuelve esta
informacin en forma de coordenadas X,Y, Z. El siguiente
ejemplo despliega la posicin del dispositivo usando el
acelermetro:
Ejercicio 14.1
<!DOCTYPE html>
<html>
<head>
<title>Ejercicio 14.1</title>
<meta charset="utf-8">
<script type="text/javascript" charset="utf-8"
src="cordova.js"></script>
<script type="text/javascript">
function mostrarPosicion(){
navigator.accelerometer.getCurrentAcceleration(lectur
manejoDeError);
}
function lecturaExitosa(acelerometro) {
var texto = " Posicin X: "+ acelerometro.x + "
<br>";
texto += " Posicin Y: "+ acelerometro.y + "
<br>";
texto += " Posicin Z: "+ acelerometro.z + "
<br>";
document.getElementById("resultados").innerHTML =
texto;
}
function manejoDeError(){
// maneja el error de lectura
alert("No se puede leer el acelerometro");
}
</script>
</head>
<body>
<h1>Posicion del dispositivo</h1>
<div id="resultados"></div>
<button onclick="mostrarPosicion();">Mostrar
Posicion</button>
</div>
</body>
</html>
Este mtodo permite leer la posicin del dispositivo cada
vez que se invoque, en este caso, al presionar el botn.
Precisamente como slo permite saber la posicin que
tiene el dispositivo en un momento especfico,es como
tomar una fotografa de la posicin esttica. En algunos
casos esta lectura puede ser insuficiente, es posible que se
necesite leer constantemente la posicin del equipo para
que las aplicaciones reacciones con los movimientos del
usuario.
Deteccin de movimiento
Algunas aplicaciones y juegos necesitan ir ms all de la
simple posicin del dispositivo e interactuar con el
movimiento conforme ocurre, para estas aplicaciones
existe el mtodo accelerometer.watchAcceleration , que a
diferencia de getCurrentAcceleration puede realizar
mltiples llamadas al acelermetro y rastrear con bastante
exactitud el ms mnimo movimiento del dispositivo.
Este mtodo trabaja muy similar a
getCurrentAcceleration , pero con algunas diferencias:
navigator.accelerometer.watchAcceleration(lecturaExitosa
manejoDeError, {frequency:3000} );
Como puede observarse, igual que en los ejemplos
analizados previamente se incluyen dos argumentos: uno
llama a una funcin en caso de xito y el otro se activa en
caso de error, sin embargo incluye un tercer argumento
que define las opciones en que se va a realizar la lectura
del sensor, este argumento es crucial para detectar
movimientos porque permite definir la frecuencia con la
que se van a monitorear los cambios.
El valor de la frecuencia se define en milisegundos. En el
siguiente ejemplo se muestra el movimiento del
<!DOCTYPE html>
<html>
<head>
<title>Ejercicio 14.2</title>
<meta charset="utf-8">
<script type="text/javascript" charset="utf-8"
src="cordova.js"></script>
<script type="text/javascript" >
var lecturaAccelerometro
function mostrarPosicion(){
lecturaAccelerometro =
navigator.accelerometer.watchAcceleration(lecturaExitosa
manejoDeError, {frequency:3000} );
}
function lecturaExitosa(acelerometro) {
var texto = " Posicin X: "+ acelerometro.x +
"<br>";
texto += " Posicin Y: "+ acelerometro.y + "
<br>";
texto += " Posicin Z: "+ acelerometro.z + "
<br>";
document.getElementById("resultados").innerHTML =
texto;
}
function manejoDeError(){
// maneja el error de lectura
alert("No se puede leer el acelerometro");
}
</script>
</head>
<body>
<h1>Deteccion de Movimientos</h1>
<div id="resultados"></div>
<button onclick="mostrarPosicion()">Mostrar
Movimientos</button>
</div>
</body>
</html>
La deteccin de movimientos a travs del acelermetro, al
igual que todos los mtodos que hacen una lectura
constante de los sensores, tiene un impacto directo sobre
el dispositivo tanto a nivel de batera como de
procesador, segn el sistema operativo en que se ejecute,
existe un nmero mximo de llamadas permitidas por
<!DOCTYPE html>
<html>
<head>
<title>Ejercicio 14.3</title>
<meta charset="utf-8">
<script type="text/javascript" charset="utf-8"
src="cordova.js"></script>
<script type="text/javascript">
/// identificador del proceso de lectura
var lecturaAccelerometro
function mostrarPosicion(){
lecturaAccelerometro =
navigator.accelerometer.watchAcceleration(lecturaExitosa
manejoDeError, {frequency:3000} );
}
function lecturaExitosa(acelerometro) {
var texto = " Posicin X: "+ acelerometro.x + "
<br>";
texto += " Posicin Y: "+ acelerometro.y + "
<br>";
texto += " Posicin Z: "+ acelerometro.z + "
<br>";
document.getElementById("resultados").innerHTML =
texto;
}
function manejoDeError(){
// maneja el error de lectura
alert("No se puede leer el acelerometro");
}
function detenerLectura(){
navigator.accelerometer.clearWatch(lecturaAccelerometr
lecturaAccelerometro = null;
}
</script>
</head>
<body>
<h1>Deteccion de Movimientos</h1>
<div id="resultados"></div>
<button onclick="mostrarPosicion()">Mostrar
Movimientos</button>
<button onclick="detenerLectura()">Detener
Lectura</button>
</div>
</body>
</html>
BRUJULA
La brjula de un dispositivo mvil funciona de manera
similar a una brjula regular: mide la orientacin del
dispositivo con respecto al norte. En PhoneGap el objeto
compass es el que contiene los mtodos de acceso a la
brjula incorporada en el dispositivo.
El mtodo para leer informacin de la brjula es muy
similar al del acelermetro que estudiamos en el captulo
anterior:
navigator.compass.getCurrentHeading(lecturaExitosa,
manejoDeError);
Como se puede observar utiliza tambin dos argumentos
que invocan funciones, el primero se activa cuando la
lectura es exitosa, el segundo si hay un error para
realizarla.
El resultado de la lectura de la brjula devuelve un objeto
con informacin sobre la rotacin del dispositivo con
respecto al norte magntico, esta respuesta es
representada con un nmero en grados que van del 0 all
359.99 segn la orientacin del dispositivo al momento de
la lectura.
Deteccin de Orientacin
El proceso ms bsico que puede realizar la API de
PhoneGap es leer la orientacin actual del equipo con
respecto al norte. Por regla general se toma como punto de
referencia la parte superior del dispositivo.
El siguiente ejemplo muestra la orientacin actual del
dispositivo usando el mtodo getCurrentHeading():
Ejercicio 15.1
<!DOCTYPE html>
<html>
<head>
<title>Ejercicio 15.1</title>
<meta charset="utf-8">
<script type="text/javascript" charset="utf-8"
src="cordova.js"></script>
<script type="text/javascript" >
var lectura
function mostrarOrientacion(){
navigator.compass.getCurrentHeading(lecturaExitosa,
error);
}
function lecturaExitosa(orientacion) {
document.getElementById("resultados").innerHTML
= " Orientacion: " + orientacion.magneticHeading + "
Grados"
}
function error(){
alert("No es posible leer la brujula")
}
</script>
</head>
<body>
<h1>Orientacion del dispositivo</h1>
<div id="resultados"></div>
<button onclick="mostrarOrientacion();">Mostrar
Orientacion</button>
</body>
</html>
El resultado de esta aplicacin es similar a este:
Lectura de movimiento
En el ejemplo anterior, los datos de la orientacin se
obtienen al presionar un botn, si la orientacin cambia,
el sistema no puede saberlo, es necesario que el usuario
solicite activamente la informacin. Cada vez que se
presione el botn se obtendr el resultado de la alineacin
en ese momento especfico.
Para observar la orientacin a lo largo del tiempo y
rastrear el movimiento del usuario se utiliza el mtodo
compass.watchHeading():
navigator.compass.watchHeading(lecturaExitosa, error,
{ frequency: 3000 } )
Este mtodo tambin incluye un tercer argumento que
permite definir la frecuencia de lectura, en este caso la
lectura se realizar cada 3 segundos ( 3000 milisegundos )
En el siguiente ejemplo se muestra una lectura de la
orientacin del dispositivo actualizado cada 3 segundos.
Ejercicio 15.2
<!DOCTYPE html>
<html>
<head>
<title>Ejercicio 15.2</title>
<meta charset="utf-8">
<script type="text/javascript" charset="utf-8"
src="cordova.js"></script>
<script type="text/javascript">
var lectura
function mostrarOrientacion(){
var lectura =
navigator.compass.watchHeading(lecturaExitosa, error,
{ frequency: 3000 } )
}
function lecturaExitosa(orientacion) {
document.getElementById("resultados").innerHTML
= " Orientacion: " + orientacion.magneticHeading + "
Grados"
}
function error(){
alert("No es posible leer la brujula")
}
function detenerLectura(){
navigator.compass.clearWatch(lectura);
lectura = null
}
</script>
</head>
<body>
<h1>Orientacion del dispositivo</h1>
<div id="resultados"></div>
<button onclick="mostrarOrientacion();">Mostrar
Orientacion</button>
<button onclick="detenerLectura();">Detener
Rastreo</button>
</body>
</html>
La diferencia central de este ejemplo con respecto al
anterior es que una vez que se activa la lectura, la
informacion sobre la orientacion se actualiza cada 3
segundos.
GEOLOCALIZACION
Uno de lo sensores mas populares en los equipos moviles
es el GPS . Es este sensor el que permite que los usuarios
ubiquen su posicin en el mapa, realizar check ins en
bares o restaurantes y geoetiqueten sus fotografas. Es muy
posible que en el pasado desarrollaras o planees
desarrollar una aplicacin que involucre de alguna manera
el Geoposicionamiento. Detectar la ubicacin del usuario
es una habilidad indispensable para poderse llamar un
desarrollador mvil en estos das.
Los dispositivos moviles tienen muchas formas de
determinar la ubicacin geogrfica: a travs de GPS,
AGPS e identificacin a travs de IP, no importa el
mtodo que utilicen, la API de PhoneGap puede obtener
las coordenadas del dispositivo e integrarlo
transparentemente a cualquier aplicacin.
}
function error(){
alert('no se donde estas');
}
</script>
</head>
<body>
<h1>Ubicacin del dispositivo</h1>
<div id="resultados"></div>
<button onclick="mostrarUbicacion();">Mostrar
Ubicacin</button>
</body>
</html>
En este ejemplo, cada vez que presiones el boton "mostrar
ubicacion" se desplegara una alerta con los datos de tu
ubicacin.
Detectar Movimiento
Al igual que con la brjula y el acelermetro , para el
sensor GPS tambin tenemos la opcin de rastrear el
movimiento del usuario a travs del mtodo
geolocation.watchPosition, que es exactamente igual al
geolocation.getCurrentPosition visto en el ejemplo
anterior, con la variante de que este otro mtodo enva
informacin de manera peridica.
La frecuencia de lectura se define en el tercer argumento,
con un valor definido en milisegundos
navigator.geolocation.watchPosition(lecturaExitosa,
error,{ frequency: 3000 });
El GPS es sin duda el sensor que agota ms rpidamente
la batera del dispositivo mvil. La frecuencia debe
definirse con el mayor intervalo posible, ajusta tus
aplicaciones para que hagan lecturas en intervalos de al
menos uno o dos minutos. Una frecuencia muy alta puede
drenar la batera de cualquier smartphone en minutos.
Tambin, al ser el GPS tan intensivo para la batera del
equipo, es absolutamente indispensable que cada vez que
se utilice el mtodo watchPosition se incluya una forma
para detener el uso del GPS. Para detener la lectura se
utiliza el mtodo :
navigator.geolocation.clearWatch()
Este mtodo recibe como argumento el identificador con
el que se cre geolocation.watchPosition y detiene el
proceso de lectura
En el siguiente ejemplo se asigna un identificador a la
llamada al GPS y permite que el usuario detenga la lectura
de GPS.
Ejercicio 16.2
<!DOCTYPE html>
<html>
<head>
<title>Ejercicio 16.2</title>
<meta charset="utf-8">
<script type="text/javascript" charset="utf-8"
src="cordova.js"></script>
<script type="text/javascript">
/// identificador de la llamada GPS
var llamada
function mostrarUbicacion(){
llamada =
navigator.geolocation.watchPosition(lecturaExitosa,
error,{ frequency: 3000 , enableHighAccuracy: true });
}
function lecturaExitosa(posicion) {
document.getElementById("resultado").innerHTML = '
tu posicion es: Latitud ' + posicion.coords.latitude+' ' +
' Longitud '+ posicion.coords.longitude
}
function error(){
alert('no se donde estas');
}
function detenerLectura(){
//detiene cualquier llamada vinculada al
identificador
navigator.geolocation.clearWatch(llamada)
llamada = null
}
</script>
</head>
<body>
<h1>Ubicacin del dispositivo</h1>
<div id="resultado"></div>
<button onclick="mostrarUbicacion();">Mostrar
Ubicacin</button>
<button onclick="detenerLectura();">Detener Lectura
</button>
</body>
</html>
Google maps
Durante el desarrollo de este libro varios alumnos y
usuarios de revolucion.mobi nos pidieron incluir un
ejemplo para interactuar con los mapas de Google Maps
a traves de la API de PhoneGap, por este motivo vamos a
incluir un ejemplo completo sobre este tema.
Antes de comenzar a crear una aplicacin que integre
Google Maps son necesarios algunos pasos previos que
cambian segn la plataforma en que se desarrolla.
- Preparacion iOS
Para acceder los archivos de un sitio externo debes
configurar el acceso a los dominios que usa google Maps.
Si estas trabajando con Xcode debes localizar el archivo
"Cordoba.plist" que se encuentra en la carpeta
"Supporting Files". Busca el apartado "External Hosts" y
agrega estas tres direcciones
*.gstatic.com
*.googleapis.com
*.google.com
- Preparacion Android
Si deseas probar tu aplicacin en un emulador de
Android, debes configurar el AVD para simular el sensor
GPS. Para activar esta funcin abrir el AVD manager,
seleccionar el dispositivo en el que se va a realizar la
prueba y agregarle el soporte para GPS.
https://googledevelopers.appspot.com/maps/documentation/javascript/exa
simple
El codigo del ejemplo de Google es:
<!DOCTYPE html>
<html>
<head>
<title>Google Maps JavaScript API v3 Example: Map
Simple</title>
<meta name="viewport" content="width=device-width,
initial-scale=1.0, user-scalable=no">
<meta charset="utf-8">
<style>
html, body, #map_canvas {
margin: 0;
padding: 0;
height: 100%;
}
</style>
<script src="https://maps.googleapis.com/maps/api/js?
sensor=false">
</script>
<script>
var map;
function initialize() {
/// define las opciones del mapa (zoom y centrado)
var mapOptions = {
zoom: 8,
center: new google.maps.LatLng(-34.397,
150.644),
mapTypeId:
google.maps.MapTypeId.ROADMAP
};
map = new
google.maps.Map(document.getElementById('map_canvas
mapOptions);
}
google.maps.event.addDomListener(window,
'load', initialize);
</script>
</head>
<body>
<div id="map_canvas"></div>
</body>
</html>
Este codigo ya es perfectamente funcional en PhoneGap y
al compilarlo muestra un mapa similar a este:
navigator.geolocation.getCurrentPosition( lecturaGPS ,
errorGPS , {enableHighAccuracy:true}
}
function errorGPS(){
alert(" no puedo encontrarte :(")
}
La funcin lecturaGPS() se encarga de procesar la
informacin que se obtiene de la lectura del sensor GPS.
function lecturaGPS(ubicacion){
var miubicacion = new
google.maps.LatLng(ubicacion.coords.latitude,
ubicacion.coords.longitude);
map.setCenter(miubicacion)
marcador.setPosition(miubicacion)
}
En este caso la variable miubicacion crea una nueva
coordenada de google maps usando las coordenadas
actuales del dispositivo. Por ltimo, los
comandos map.setCenter y marcador.setPosition centran
el mapa y el marcador en la posicin actual.
A continuacin se muestra el ejemplo completo con los
cambios destacados en negrita.
Ejercicio 16.3
<!DOCTYPE html>
<html>
<head>
<style type="text/css">
html { height: 100% }
body { height: 100%; margin: 0; padding: 0 }
#map_canvas { height: 100% }
</style>
<script type="text/javascript" charset="utf-8"
src="cordova.js"></script>
<title>Ejercicio 16.3</title>
<script type="text/javascript"
src="http://maps.googleapis.com/maps/api/js?
sensor=true"></script>
<script type="text/javascript">
var map
var marcador
function initialize() {
var latlng = new google.maps.LatLng(-34.397,
150.644);
var myOptions = {
zoom: 8,
center: latlng,
mapTypeId:
google.maps.MapTypeId.ROADMAP
};
map = new
google.maps.Map(document.getElementById("map_canvas
, myOptions);
marcador = new google.maps.Marker( {
position: latlng,
map:map
})
}
function mostrarUbicacion(){
navigator.geolocation.getCurrentPosition(
lecturaGPS , errorGPS , {enableHighAccuracy:true} )
}
function lecturaGPS(ubicacion){
var miubicacion = new
google.maps.LatLng(ubicacion.coords.latitude,
ubicacion.coords.longitude);
map.setCenter(miubicacion)
marcador.setPosition(miubicacion)
}
function errorGPS(){
Acceder al sistema de
archivos
Antes de acceder el sistema debemos solicitar permisos y
verificar que la aplicacin tenga acceso al sistema, para
esto utilizaremos el mtodo :
window.requestFileSystem
Que solicita acceso al sistema de archivos del dispositivo
y retorna un objeto con acceso al sistema. Este mtodo
utiliza 4 argumentos:
LocalFileSystem que define el tipo de acceso al sistema
de archivos, puede ser PERSISTENT si se necesita
acceder al almacenamiento permanente del sistema o
TEMPORARY para acceder y crear archivos de tipo
temporal. En este libro usaremos la primera opcin.
El segundo argumento es el tamao (en bytes) que necesita
la aplicacin, por defecto se define en 0.
Los dos ltimos argumentos son las funciones de lectura
exitosa y error, en el caso de la primera recibe un objeto
de tipo filesystem que permite acceso al sistema de
archivos.
Creacion y manipulacion de
Archivos
Para leer un archivo utilizamos un mtodo muy similar al
que se utiliza para las carpetas:
fileSystem.root.getFile("readme.txt", {create: true,
exclusive: false}, lecturaExitosa, error );
La diferencia central radica en que aqu se define el
nombre del archivo con su respectiva extensin, al igual
que en el caso anterior, el parmetro "create" permite
crear el archivo en caso de que no exista.
Al realizar correctamente la lectura, se invoca la funcin
lecturaExitosa que recibe como argumento un objeto de
tipo FileEntry. Al tener acceso a este objeto podemos
invocar los mtodos especficos para manipular archivos.
Por ejemplo, una vez creado el archivo se puede editar y
agregarle texto.
En el siguiente ejemplo se explora un archivo y se edita su
contenido
function onDeviceReady() {
//solicita acceso al filesystem
window.requestFileSystem(LocalFileSystem.PERSISTEN
0, accesoFS);
}
// tenemos acceso al filesystem!
function accesoFS(fileSystem) {
// busca o crea el directorio
fileSystem.root.getFile("manualDelGuerreroMovil.txt",
{create: true, exclusive: false},function(myFile){
myFile.createWriter( function(escritor){
escritor.write("hola mundo!!!")
})
}, function(){alert("fallo")})
}
Una vez que se crea el archivo utilizamos el mtodo
CreateWriter que crea un objeto de tipo FileWriter, el
cual permite escribir dentro del archivo.
Por ltimo para borrar un archivo se utiliza el mtodo
remove
function onDeviceReady() {
//solicita acceso al filesystem
window.requestFileSystem(LocalFileSystem.PERSISTEN
0, accesoFS);
}
// tenemos acceso al filesystem
function accesoFS(fileSystem) {
// busca o crea el directorio
fileSystem.root.getFile("manualDelGuerreroMovil.txt",
{create: true, exclusive: false},function(myFile){
myFile.remove( function(){
alert("archivo Eliminado")
})
}, function(){alert("fallo")})
}
El siguiente ejemplo muestra un uso bsico de los tres
elementos mencionados:
Ejercicio 17.1
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" charset="utf-8"
src="cordova.js"></script>
<title>Ejercicio 17.1</title>
<script>
document.addEventListener("deviceready",
onDeviceReady, false);
function onDeviceReady() {
//solicita acceso al filesystem
window.requestFileSystem(LocalFileSystem.PERSISTEN
0, accesoFS);
}
// tenemos acceso al filesystem
function accesoFS(fileSystem) {
// busca o crea el directorio
fileSystem.root.getFile("manualDelGuerreroMovil.txt",
{create: true, exclusive: false},function(myFile){
myFile.createWriter( function(escritor){
escritor.write("hola mundo!!!")
})
}, function(){alert("fallo")})
}
}
</script>
</head>
<body >
<button> Crear archivo </button>
<button> leer archivo </button>
<button> Borrar archivo</button>
</body>
</html>
El siguiente ejemplo integra los comandos basicos de
creacin, lectura, escritura y borrado de un archivo.
Ejercicio 17.2
<!DOCTYPE html>
<html>
<head>
<title>Ejercicio 17.1</title>
<style type="text/css">
button, input{display:block; width:90%; height:35px;
margin:10px auto; }
input{ text-align:center; font-size:15px; color:#666;
}
</style>
<script type="text/javascript" charset="utf-8"
src="cordova.js"></script>
<script>
document.addEventListener("deviceready",
onDeviceReady, false);
var sistemaDeArchivos;
var rutaArchivo;
function onDeviceReady() {
//solicita acceso al filesystem
window.requestFileSystem(LocalFileSystem.PERSISTEN
0, accesoFS);
}
// tenemos acceso al filesystem
function accesoFS(fs) {
sistemaDeArchivos = fs
}
function crearArchivoVacio(){
// crea un archivo vacio
sistemaDeArchivos.root.getFile("manualDelGuerreroMov
{create: true, exclusive: false}, function(_ruta)
{rutaArchivo = _ruta})
}
function escribirEnarchivo(){
/// escribe los datos de la casilla de texto
rutaArchivo.createWriter( function(escritor){
contenido =
document.getElementById("textoArchivo").value
escritor.write(contenido)
})
}
function leerArchivo(){
var reader = new FileReader();
reader.onloadend = function(evt) {
alert(evt.target.result);
};
reader.readAsText(rutaArchivo);
}
function leerInfo(){
rutaArchivo.getMetadata(function(_data){
alert("ultima modificacion:
"+_data.modificationTime)})
}
function borrarArchivo(){
rutaArchivo.remove();
}
</script>
</head>
<body >
<button onclick="crearArchivoVacio()"> Crear
archivo </button>
<hr>
<input type="text" id="textoArchivo" value="Texto
de prueba" />
<button onclick="escribirEnarchivo()"> Escribir en
archivo </button>
<hr>
<button onclick=" leerArchivo()"> Leer archivo
</button>
<hr>
<button onclick="leerInfo()"> Leer Metadata
</button>
<hr>
ALMACENAMIENTO
El api de permanencia de datos es particularmente til
para desarrollar aplicaciones. Nos permite almacenar y
manipular informacin con permanencia dentro del
sistema, o sea que no importa que el usuario cierre la
aplicacin o apague el equipo, los datos permanecern
disponibles para utilizarlos posteriormente.
Gracias a la permanencia de datos podemos desarrollar
aplicaciones ms sofisticadas, como juegos que puedan
restaurarse donde el usuario los dejo, recordar puntos
importantes en el mapa o simplemente recordar el nombre
de usuario con el que se utiliza nuestra aplicacin
Phonegap utiliza varias apis del W3C y nos ofrece
distintas formas de almacenar la informacin segn las
necesidades especficas de cada aplicacin. Vamos a
analizar cada una en detalle
Base de datos
Phonegap permite crear una base de datos local basada en
los estndares de las bases de datos SQL del W3C.
Para crear una base de datos slo es necesario invocar el
mtodo openDatabase:
window.openDatabase(database_name,
database_version, database_displayname,
database_size);
Al igual que la mayora de los mtodos de phonegap este
tambin utiliza callbacks en sus parmetros. El primero
define el nombre de la base de datos, el segundo la
versin , el tercero el nombre con el que se mostrar y por
ltimo el tamao original de la base.
window.openDatabase("DemoDB", "1.0", "Demo Base
de Datos", 200000);
Si la base de datos ya existe el sistema solo la abrir, si
no existe se crear y luego abrir, en ambos casos el
resultado ser un objeto de tipo Database, con el que
vamos a trabajar.
-Transacciones
La forma primaria en la que vamos a interactuar con la
base de datos de phonegap ser a travs de transacciones,
una transaccin bsicamente es una conexin a la base de
datos mediante la cual podremos enviar comandos.
En PhoneGap las transacciones tienen un acceso
exclusivo. eso significa que solo se atiende una
transaccin a la vez. Si se ejecutan dos transacciones al
mismo tiempo, la primera tendr prioridad y mientras se
ejecute esta transaccin cualquier otra peticin devolver
un error.
Las transacciones son un mtodo del objeto Database y se
pueden invocar en cualquier momento luego de realizada
la conexin:
document.addEventListener("deviceready",
onDeviceReady, false);
function onDeviceReady() {
var db = window.openDatabase("Database",
"1.0", "Cordova Demo", 200000);
db.transaction(populateDB, errorCB, successCB);
}
Las transacciones tienen 3 parmetros: los dos primeros
-Queries SQL
Una vez que abrimos una transaccin podemos interactuar
directamente con la base de datos a travs de queries de
SQL.
Los queries son peticiones que se le dan a la base de
datos y devuelven informacin en las condiciones que lo
solicitamos. Con los queries podemos guardar, borrar y
ordenar datos de forma muy rpida y sencilla.
function populateDB(tx) {
tx.executeSql('DROP TABLE IF EXISTS
DEMO');
tx.executeSql('CREATE TABLE IF NOT
EXISTS DEMO (id unique, data)');
tx.executeSql('INSERT INTO DEMO (id, data)
VALUES (1, "First row")');
tx.executeSql('INSERT INTO DEMO (id, data)
VALUES (2, "Second row")');
}
Aunque solo se puede abrir una transaccin a la vez, una
vez que tengamos acceso, es posible enviar mltiples
queries a la base de datos.
La informacin que se almacena en cada transaccin es
function transaccion(){
/// ejecutar una transaccion
}
*/
function leerBaseDeDatos(){
// crea una nueva transaccion
db.transaction(leerBD, errorBD);
}
function leerBD(tx){
tx.executeSql('SELECT * FROM libros ', [] ,
mostrarResultados, errorBD);
}
function mostrarResultados(tx, resultados){
var lista = ""
for(var a=0; a < resultados.rows.length; a++){
lista += "<li>"
lista += "<b>Titulo:</b> " +
resultados.rows.item(a).titulo + "<br>";
lista += "<b>Autor:</b> " +
resultados.rows.item(a).autor + "<br>";
lista += "</li>"
}
document.getElementById("listaDeLibros").innerHTML
= lista
}
function agregarItem(){
db.transaction(agregarItemSQL, errorBD)
}
function agregarItemSQL(tx){
tx.executeSql('INSERT INTO libros (titulo, autor)
VALUES ("La importancia de llamarse Ernesto",
"Oscar Wilde")', [] , leerBD, errorBD);
}
function borarUltimo(){
db.transaction(borrarItemSQL, errorBD)
}
function borrarItemSQL(tx){
tx.executeSql('DELETE FROM libros WHERE
autor="Oscar Wilde"', [] , leerBD, errorBD);
}
function errorBD(){
alert("un error en la base de datos");
}
</script>
</head>
<body >
<button onclick="leerBaseDeDatos()"> leer Base de
datos </button>
LocalStorage
Adems de la base de datos tenemos otras formas de
almacenar informacin de manera mas sencilla con
LocalStorage. Este objeto tambin es parte del Estndar
HTML5 y su funcin es la de almacenar datos simples con
permanencia de sesin, su funcionamiento es muy similar
al de las cookies pero ms elegante y eficiente, por lo que
lentamente se ha convertido en el reemplazo natural.
LocalStorage es mucho ms rpido y menos intensivo para
el ordenador y es la opcin ideal si lo que queremos es
almacenar datos simples como el nombre del usuario, la
ltima vez que se us la aplicacin o un punto en el mapa.
Mientras que la base de datos nos funcionar mejor si
queremos almacenar datos ms complejos como una lista
de usuarios o las coordenadas en el mapa de una cadena
de tiendas, tambin debemos preferir la base de datos si
queremos hacer operaciones con esa informacin como
ordenarla alfabticamente o hacer bsquedas dentro de
ella.
A diferencia de la base de datos localStorage tiene un uso
ms sencillo, para almacenar un dato slo se usa este
comando:
window.localStorage.setItem("key", "value");
SessionStrorage
Este mtodo es exactamente igual a localStorage con una
nica diferencia: la informacin se borra al cerrar la
aplicacin.
Es particularmente til para almacenar informacin entre
documentos pero que es solo til durante la sesin actual,
por ejemplo el identificadores de sesin, passwords y
cualquier informacin sensible.
Para crear un variable de sesin se usa el mtodo
window.sessionStorage.setItem("key", "value");
y al igual que con localstorage estn disponibles los
mtodos getItem y removeItem para recuperar y borrar la
informacin respectivamente.
En el siguiente ejercicio se prueban ambos elementos
Ejercicio 18.2
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-
width"/>
<script type="text/javascript" charset="utf-8"
src="cordova.js"></script>
<title>Ejercicio 18.2</title>
<style>
button {
width: 90%;
height: 25px;
margin: 5px auto;
}
</style>
<script>
var normal
document.addEventListener("deviceready",
onDeviceReady, false);
function onDeviceReady(){
/// muestra las variables de sesion si existen
mostrarVariables();
}
function crearLocalStorage(){
window.localStorage.setItem("local", "variable
localstorage activa");
mostrarVariables()
}
function crearSessionStorage(){
window.sessionStorage.setItem("session","variable
session activa");
mostrarVariables()
}
function crearNormal(){
normal = "valor normal";
mostrarVariables()
}
function mostrarVariables(){
var texto = ""
if(window.localStorage.getItem("local")){
texto += "<li>"+
window.localStorage.getItem("local") + "</li>"
}
if( window.sessionStorage.getItem("session")){
texto += "
<li>"+window.sessionStorage.getItem("session")+ "
</li>"
}
if(normal){
texto += "<li>"+ normal+ "</li>";
}
// selecciona la lista del DOM
lista = document.getElementById("listaVariables");
lista.innerHTML = texto
}
</script>
</head>
<body >
<button onclick="crearLocalStorage()">Crear variable
localStorage</button>
<button onclick="crearSessionStorage()">Crear
variable SessionStorage</button>
<button onclick="crearNormal()">Crear variable
normal</button>
<a href ="otroDocumento.html"> Abrir otro Documento
</a>
<h1>Variables</h1>
<ul id="listaVariables">
</ul>
</body>
</html>
CAMARA
Lenta y silenciosamente los mviles reemplazaron a las
cmaras digitales, hoy en dia en flickr la mayora de las
fotografas se toman a travs de iPhone ms que cualquier
otra cmara profesional.
Fuente: http://www.flickr.com/cameras/
Un buen desarrollador mvil debe tener conocimientos
document.addEventListener("deviceready",onDeviceRead
function onFail(message) {
alert('Error: ' + message);
}
function tomarFoto(){
navigator.camera.getPicture( mostrarFoto, onFail,
{ quality: 50, destinationType:
Camera.DestinationType.FILE_URI } );
}
function mostrarFoto(param){
var imagen =
document.getElementById("imagen")
imagen.src = param
}
</script>
</head>
<body>
Opciones de Fotografa
Cuando se toma una fotografa en PhoneGap, es posible
configurar una serie de elementos que van desde el tamano
hasta el formato de la imagen. Las principales elementos
de configuracin son:
quality : define la calidad de la imagen que se
tomar, gracias a que los dispositivos actuales
manejan cmaras de buena calidad, se recomienda
usar imgenes con calidad 50 o inferior para no
afectar el rendimiento ni el espacio disponibles del
dispositivo.
destinationType : Define la forma de recibir la
imagen, como una cadena codificada en base 64
(Data_URL) o el URI del archivo (File_URI), por
performance, compatibilidad y sencillez se
recomienda usar la segunda opcin para manipular
las imgenes.
sourceType : Indica la fuente para obtener la
imagen, puede ser una fotografa ya almacenada en el
dispositivo o una imagen capturada por la cmara.
targetWidth: define el ancho de la imagen en
pixeles.
targetHeight: define el largo de la imagen en
pixeles.
document.addEventListener("deviceready",onDeviceRead
var _root
var _workingFolder
var _imagePath
var _localImagePath
function onDeviceReady() {
//solicita acceso al filesystem
window.requestFileSystem(LocalFileSystem.PERSISTEN
0, accesoFS, error);
}
// tenemos acceso al filesystem
function accesoFS(fileSystem) {
// busca o crea el directorio
fileSystem.root.getDirectory("manualDelGuerreroMovil",
{create: true, exclusive: false},function(myfolder){
/// define el objeto del folder para utilizarlo
posteriormente
_workingFolder = myfolder;
alert("folder")
})
_root = fileSystem.root
}
function copiarFoto() {
window.resolveLocalFileSystemURI(_imagePath,function
{
fileEntry.copyTo(_workingFolder , "miImagen"+
Math.random() +".jpg" ,function(e){
_localImagePath = e;
var imagen =
document.getElementById("imagenGuardada")
imagen.src = _localImagePath.fullPath;
},
function(e){ alert(e)}); },
function(e){alert("fallo en la escritura"+e.code)}
);
}
function error(message) {
alert('error al tomar la foto : ' + message);
}
function tomarFoto(){
navigator.camera.getPicture( mostrarFoto,
error, { quality : 75, destinationType :
Camera.DestinationType.FILE_URI, sourceType :
Camera.PictureSourceType.CAMERA, allowEdit :
true, encodingType: Camera.EncodingType.JPEG,
CONTACTOS
El dispositivo mvil por excelencia es un telfono celular
y una de las principales funciones de este dispositivo es
hacer llamadas e interactuar con todos los contactos del
usuarios.
PhoneGap tiene acceso a la lista de contactos del
dispositivo y permite la manipulacin y creacin de todos
ellos. En este captulo revisaremos las operaciones
bsicas para administrar contactos desde una aplicacin.
Crear contactos
El mtodo que permite la creacin de contactos es
contacts.create(). Crear un contacto es bastante simple ,
solo es necesario invocar este mtodo:
var nuevoContacto = navigator.contacts.create();
Esta sencilla lnea ha creado un objeto de tipo Contact que
se puede modificar arbitrariamente. Para agregar nuevos
datos a este contacto tal como nmeros de telfono,
direcciones o imgenes, es necesario agregar nuevos
objetos que , tal como una figura de bloques, se integran
para formar un solo conjunto que compone el contacto.
El contacto que acabamos de crear an no tiene ningn
dato vinculado. Posiblemente el dato ms importante de
un contacto es el nombre y para agregarle uno es
necesario incluir un nuevo objeto llamado
ContactName(), el siguiente cdigo crea el nuevo objeto
que contiene los datos del nombre:
var nuevoNombre = new ContactName();
nuevoNombre.givenName = "Darth";
nuevoNombre.familyName = "Vader";
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script type="text/javascript" charset="utf-8"
src="cordova.js"></script>
<title>Ejercicio 20.1</title>
<script>
function crearContacto(){
var nuevoContacto = navigator.contacts.create();
var nombre = new ContactName();
nombre.givenName = "Darth";
nombre.familyName = "Vader";
nuevoContacto.name = nombre
var numerosTelefonicos = [];
numerosTelefonicos[0] = new
ContactField('work', '123-456-7890', false);
numerosTelefonicos[1] = new
ContactField('mobile', '123-456-7890', true);
numerosTelefonicos[2] = new
ContactField('home', '123-456-7890', false);
nuevoContacto.phoneNumbers =
numerosTelefonicos;
var pics = []
pics[0] = new ContactField('url',
'http://manualdelguerreromovil.com/assets/darth_vader.jpg
true);
nuevoContacto.photos = pics
nuevoContacto.save()
}
</script>
</head>
<body >
<button onclick="crearContacto()"> crear contacto
nuevo </button>
</body>
</html>
Al hacer clic en el botn "Crear Contacto Nuevo" se
agrega un nuevo elemento en la lista de contactos, tal
como se puede ver en la imagen:
Buscar contactos
Los contactos se almacenan en una base de datos local y
es posible usar la API de PhoneGap para hacer bsquedas
entre los contactos y hasta usar filtros para buscar entre
los diferentes valores de los contactos.
Para hacer una bsqueda entre los contactos PhoneGap
tiene el mtodo navigator.contacts.find() que utiliza varios
parmetros para hacer bsquedas.
El siguiente cdigo hace una bsqueda entre los contactos
y muestra una lista de los que calzan con el resultado:
function verContactos(){
var options = new ContactFindOptions();
options.filter=""; // una cadena vacia muestra todos
los elementos
options.multiple=true;
// devuelve multiples
resultados
filtro= ["name","phoneNumbers"]; // busca entre los
nombres y numeros de telefono
// encuentra contactos
navigator.contacts.find(filtro, lecturaExitosa, false,
options);
}
<ul id="resultados">
</ul>
</body>
</html>
En este caso, el valor options.filter se deja vaco
intencionalmente para que la bsqueda devuelva todos los
contactos del sistema. Se invita al lector a probar
diferentes bsquedas en su lista de contactos.
DEPURACION CON
NAVEGADORES
Las aplicaciones PhoneGap son catalogadas como
hbridas porque, aunque en el fondo son aplicaciones
nativas, en su parte operativa usan lenguajes propios de la
web como HTML5 y CSS3.
Este tipo de aplicaciones, por su naturaleza dual, pueden
probarse en diferentes entornos. Aunque una aplicacin
PhoneGap se puede depurar en emuladores y dispositivos
moviles, gracias a que su base es HTML5, en la gran
mayora de los casos es posible depurar desde un
navegador web.
En este captulo vamos a examinar las principales
herramientas para probar y depurar aplicaciones desde el
browser.
Webkit
Como se ha mencionado anteriormente, las aplicaciones
PhoneGap corren en una instancia del navegador del
sistema, en la mayora de los casos, esta instancia es una
versin de Webkit.
En el mundo de los navegadores mviles, Webkit es uno
de los pesos pesados de la industria. Los principales
sistemas operativos mviles ( Android, iPhone y
Blackberry) tienen un punto en comn: todos sus
navegadores usan como ncleo el motor Webkit.
Webkit es un motor de render y su funcin es bsicamente
convertir el cdigo HTML, CSS, y Javascript en los
elementos grficos, lgicos e interactivos de un
documento web. Este proyecto de cdigo abierto est
revolucionando la internet y liderando el avance de
tecnologas como HTML5 y CSS3.
El proyecto Webkit es el motor detrs de todos estos
populares navegadores:
Google Chrome
Safari
Safari mobile
Android Browser
Blackberry browser
Konqueror
Amazon Kindle
RockMelt
Cualquiera de todos estos navegadores puede ejecutar el
cdigo HTML de tus aplicaciones PhoneGap con
apariencia y funcionalidad muy similar a la que tendr en
el dispositivo mvil.
Aunque muchos navegadores estn basados en Webkit,
pueden usar versiones ligeramente diferentes, estas
diferencias pueden ir desde sutiles cambios en la
apariencia de las propiedades CSS hasta el soporte de
caractersticas cruciales de la API de HTML5. Lo mismo
sucede con las diferentes versiones de sistemas
operativos para mviles.
Seguir la pista de todas estas diferencias es un trabajo
complejo, afortunadamente, el sitio MobileHTML5.com
tiene una tabla detallada y permanentemente actualizada
con todas las capacidades soportadas por los principales
navegadores, clasificadas por sistema operativo y
versin.
Fuente: http://mobilehtml5.org/
Si no estas seguro que versin de browser utilizar para tus
pruebas, puedes usar Google Chrome Safari que usan
Webkit y tienen muchas caractersticas en comn con sus
contrapartes mviles.
Para probar las similitudes de Webkit con una aplicacin
mvil real, prueba abrir este URL en Google Chrome
Safari:
http://goo.gl/T2oCw
Ripple
Ripple es un plugin para Google Chrome que recrea el
entorno y sensores de un dispositivo mvil real dentro del
navegador web. Ripple es propiedad de Research in
Motion, los creadores de Blackberry y tiene un sistema
bastante avanzado de simulacin optimizado
especficamente para PhoneGap.
Con este plugin y el soporte HTML5 de Google Chrome
es posible probar, con bastante aproximacin a la
realidad, prcticamente cualquier aplicacin PhoneGap,
incluso si usan eventos o sensores del mvil.
-Instalacin
Para instalar Ripple solo necesitas descargarlo
directamente desde la appstore de Google Chrome :
https://chrome.google.com/webstore/detail/geelfhphabnejjh
Una vez instalado el plugin vas a encontrar el nuevo icono
de Ripple
-Emulacin de aplicaciones
Para probar una aplicacin PhoneGap en Ripple, se deben
ubicar todos los archivos de la aplicacin (usualmente
contenidos en la carpeta "www") en un servidor local o
externo.
Solamente es necesario abrir en el navegador el archivo
"index.html" ( la base de la aplicacin PhoneGap ) y
activar el modo de emulacin de Ripple.
Si an no tienes ninguna aplicacin mvil lista, puedes
probar esta aplicacin de ejemplo:
http://revolucion.mobi/wpcontent/uploads/2011/11/index.html
DEPURACION CON
EQUIPOS REALES
Antes de publicar una aplicacin mvil es crucial realizar
pruebas en equipos reales. Las pruebas en emuladores,
aunque son muy prcticas para desarrollar rpidamente,
no son suficientes. No importa lo bueno que sea un
emulador, nunca tendr las mismas caractersticas de un
equipo real, algunas de las principales limitaciones de los
emuladores son:
Hardware: En emuladores como los que se incluye en el
SDK de Android y iPhone, aunque tienen la capacidad de
emular un sistema operativo mvil, lo hacen usando el
hardware de tu ordenador, que generalmente tiene ms
recursos de sistema que un mvil normal.
Tambin puede ocurrir el caso opuesto: el ordenador
donde se ejecuta el emulador puede tener pocos recursos
disponibles, un escenario posible en ordenadores antiguos
o aun modernos que estn ejecutando muchos programas
simultneamente al realizar la emulacin.
En ambos casos las aplicaciones van a tener un
desempeo que no corresponde al que tendran en un
equipo real.
Sistema operativo: El sistema operativo en el que haces
tus pruebas, en ocasiones puede mostrar un resultado
incorrecto, por ejemplo si haces tus pruebas usando
Ripple en el sistema operativo windows, encontrars
resultados inconsistentes al ejecutar tus aplicaciones en el
equipos iPhone.
Soporte: Algunas caractersticas no son soportadas en
todos los sistemas operativos ni en todas sus versiones.
Aunque una caracterstica funcione en algunos emuladores
y sistemas operativos, slo al ejecutarlo en un dispositivo
real puedes saber si funciona correctamente.
Por ejemplo, el tag <video> en Android est disponible
en el browser del sistema y algunos emuladores como
Ripple, pero no es posible ejecutarlo desde una
aplicacin PhoneGap por ausencia de soporte dentro del
entorno de la aplicacin.
Sensores: Varios sensores son difciles o imposibles de
probar de manera efectiva en emuladores. Sensores como
la cmara del sistema no siempre estn soportados en el
emulador y es necesario que se ejecuten desde un equipo
real para probarlos.
En otros casos, aunque es posible probar los sensores en
el emulador, su respuesta cambia en el dispositivo fsico,
Depuracin en equipos
Android
Android es uno de los equipos favoritos de los
desarrolladores porque adems de incluir excelentes
herramientas de desarrollo, su configuracin para
depuracin es sencilla, rpida y no requiere de ninguna
licencia especial.
-Herramientas de Eclipse
Gracias al plugin ADT de Android ( que aprendimos a
instalar en el Captulo 3 ) Eclipse tiene una completa serie
de herramientas para depurar aplicaciones,
completamente integradas con el sistema operativo
Android.
Puedes encontrar todas las herramientas especializadas de
Eclipse si vas a la barra superior del programa y
seleccionas Window > Show View > Other
- LogCat.
Los logs de sistema te permiten analizar informacin,
enviarte mensajes de error y chequear datos internos.
Puedes usar la herramienta logCat para ver todo lo que
esta pasando en el sistema, rastrear errores de runtime o
de sintaxis. Tambin puedes enviar tus propios mensajes a
la consola a traves del comando console.log(). Este
comando esta disponible luego de que se inicialice el
evento "deviceready".
Por ejemplo, puedes usar el comando console.log("hola
mundo") y recibir un mensaje de manera oculta para el
usuario final. El mensaje aparecer nicamente en la
consola de LogCat.
-Administracin de Archivos
Con la herramienta "File Explorer" puedes ver y
administrar todos los archivos del sistema Android en el
que se ejecuta tu aplicacin. El File Explorer permite
enviar y recibir datos adems de crear o borrar archivos o
carpetas.
-Licencias y configuracin
Apple controla muy de cerca de todo el ecosistema iOS y
para probar una aplicacin en cualquier equipo que
funcione con este sistema operativo es necesario estar
inscrito en el programa de desarrolladores iOS. Aunque el
registro en este programa es gratuito y le permite al
desarrollador acceso a la descarga de programas y
documentacin, el acceso al hardware se obtiene
nicamente a travs de la membresa de pago que tiene un
costo anual de $100 USD.
http://faxzero.com/
Una vez registrado como desarrollador podrs registrar
tus dispositivos y crear certificados de seguridad que te
permitirn instalar aplicaciones en equipos fsicos.
Puedes registrar hasta 100 dispositivos iOS diferentes.
-Herramientas de Xcode
Xcode tiene todo un arsenal de herramientas para que
depures tus aplicaciones hasta que estn listas para salir a
la appstore.
La mayora de estas herramientas te servirn para probar
tus aplicaciones tanto en el simulador como en un equipo
real. El proceso de prueba en iOS es particularmente
importante porque si tu aplicacin tiene alguna falla
crtica corre el riesgo de no ser aprobada en la Appstore.
- Consola
La consola de Xcode permite monitorear la actividad de
la aplicacin, rastrear datos, enviar mensajes de error y
analizar datos de funcionamiento.
Para activar la consola en Xcode debes ir a View >
Activate Console
-Instruments
Una de las herramientas ms poderosas de depuracin de
Xcode es Instruments, un programa que te permite realizar
mltiples pruebas tanto en el emulador como en el equipo
real.
Para desplegar Instruments desde Xcode, debes ir a
Xcode> Open Developer Tool > Instruments
- Administracin de archivos
Xcode tambin permite inspeccionar los archivos de una
aplicacin, esta informacin es particularmente til si tu
aplicacin de alguna forma crea o modifica archivos.
Para inspeccionar los archivos debes abrir el Organizer
de Xcode que ya hemos usado en pginas anteriores y
buscar en la lista de dispositivos el que ejecuta la
aplicacin que deseas inspeccionar.
Bajo el nombre de tu dispositivo encontrars una lista de
sub elementos, escoge el tem "Aplications" para mostrar
las aplicaciones instaladas en este dispositivo.
PHONEGAP BUILD
PhoneGap Build es un servicio de Adobe que permite
compilar aplicaciones PhoneGap en la nube. El principio
bsico de este servicio es crear aplicaciones en mltiples
formatos y plataformas en un solo paso, sin importar la
plataforma que se utilice para desarrollar.
Para crear aplicaciones con este servicio solo se necesita
subir los archivos fuente en HTML5, CSS3 y JavaScript.
Sin importar en qu plataforma trabajes, PhoneGap Build
convierte estos archivos en aplicaciones mviles. No es
necesario instalar ningn software adicional porque los
servidores de PhoneGap Build estn cargados con todos
los SDKs necesarios para crear aplicaciones en 6
diferentes plataformas ( iOS, Android, Windows Phone,
Blackberry webOS y Symbian )
Lo mejor de este servicio gratuito es que libera a los
usuarios de encadenarse a cualquier sistema operativo.
Por ejemplo, para crear una aplicacin iOS es
indispensable desarrollar desde un equipo Apple porque
el SDK de iPhone est completamente vinculado al
sistema operativo Mac OS. Tcnicamente, un usuario de
Windows o Linux estara imposibilitado a crear una
aplicacin para iPhone. Ahora, gracias a Phonegap Build
Configuracin
Una vez listos los archivos base de la aplicacin es
necesario crear un archivo de configuracin. Este archivo
definir las propiedades bsicas de la aplicacin y esta
basado en el standard de aplicaciones del W3C. Puedes
encontrar informacin detallada sobre el formato de los
archivos de configuracin en los siguientes enlaces:
http://www.w3.org/TR/widgets/
http://dev.opera.com/articles/view/extensions-api-configxml/
Si ests creando tu aplicacin a travs de Adobe
Dreamweaver CS6 el archivo de configuracin se crea
automticamente, en el caso de que utilices otra
herramienta es necesario crear un archivo con el nombre
config.xml e incluirlo en la raz de la aplicacin.
A continuacin se muestra un ejemplo del contenido que
debe tener el archivo de configuracin:
<?xml version="1.0" encoding="UTF-8" ?>
<widget xmlns = "http://www.w3.org/ns/widgets"
xmlns:gap = "http://phonegap.com/ns/1.0"
id
= "com.phonegap.example"
version = "1.0.0">
<name>Nombre de la app</name>
<description>Descripcion breve.</description>
<icon src="icono.png"/>
<author href="https://revolucion.mobi"
email="carlos@revolucion.mobi">
Carlos Solis
</author>
<feature
name="http://api.phonegap.com/1.0/geolocation"/>
<feature
name="http://api.phonegap.com/1.0/network"/>
</widget>
Aunque, segn el estndar del W3C el archivo de
configuracin puede definir una gran cantidad de detalles
de una aplicacin mvil, PhoneGap Build solo soporta un
nmero limitado de propiedades, las principales son:
icon file: Debes incluir un archivo que ser el icono de tu
aplicacin, esta imagen se mostrar en el sistema
operativo y ser la forma en que los usuarios identificarn
tu aplicacin. El formato de este archivo debe ser PNG y
tiene soporte para canal Alpha.
Name: El ttulo de tu aplicacin, este ser el nombre con
Publicar aplicaciones en
Android
Todas las aplicaciones de Android necesitan estar
firmadas con un certificado de seguridad antes de
publicarse en la tienda Google Play.
El certificado de seguridad en android es muy sencillo de
crear y el proceso es totalmente gratuito. Para crear el
certificado solo debes insertar este comando en consola
de tu sistema operativo
keytool -genkey -v -keystore
keyParaPublicar.keystore -alias mi_alias -keyalg RSA
-keysize 2048 -validity 10000
En el cdigo que aparece anteriormente, se va a crear un
archivo llamado keyParaPublicar.keystore y le asigna el
alias "mi_alias". El alias es un nombre corto que se
utilizar como identificacin del usuario.
En cuanto se inserte este comando , el sistema solicita
asignar un password y enviar algunos datos personales
nombre, organizacin, ciudad y codigo de pais, en este
ltimo caso se debe usar el cdigo standard de dos letras
para su pas, por ejemplo Estados unidos (US), Mexico
de Android:
http://developer.android.com/intl/es/tools/publishing/appsigning.html
Una vez finalizado el proceso antes mencionado, se crea
el archivo keyParaPublicar.keystore que ser el
encargado de encriptar tus aplicaciones.
El siguiente paso es subir este archivo a la nube para
encriptar todas tus aplicaciones . En el sitio de PhoneGap
Build, selecciona tu aplicacin y busca el apartado de
Android en la seccin "Builds". Selecciona la opcin
"add a key..."
Depuracin de aplicaciones
en la nube
Phonegap build tiene servicio de depuracin muy
completo llamado weinre, con este sistema es posible
enviar y recibir informacin de cualquier terminal que
descargue la aplicacin.
Para activar el modo de depuracin es necesario activarlo
haciendo clic en el botn debug
arbitrario de javascript.
function enviarDatos(){
console.log("Datos Enviados desde el
movil")
}
</script>
</body>
</html>
Una vez instalado el programa e, PhoneGap build puede
detectar que hay un dispositivo conectado en modo de
depuracin y recibir los datos del equipo. En este ejemplo
cada vez que se presione el botn "enviar datos al
depurador" se reciben datos en tiempo real en la consola
de depuracion de PhoneGap Build.