3. Web-app Hibrída Nativa
Se ejecuta en
navegador.
HTML,CSS,Javascript
Se ejecuta en el componente
webview de cada plataforma
HTML,CSS,Javascript
ObjetiveC for IOS
Java for Android
Acceso por url Se distribuyen en el market
como apps nativas
Se distribuyen en el
market como apps nativas
Limitado acceso a
HW
Acceso completo a HW y
API nativa mediante
javascript
Acceso completo a HW y
API nativa
Jquery Mobile PhoneGap+JavaScript
framework
Titanium
iOS SDK
Android SDK
Rápido Rapidez depende del
framework
Muy Rápido
Introducción
4. PhoneGap
• Phonegap es un wrapper alrededor del navegador del dispositivo que permite
acceder a los recursos del mismo
• Pertenece a Adobe
• Liberado como projecto open source por la fundación apache bajo el nombre de
cordova
• Acualmente van por la versión 3.0
• Hay 2 formas para crear el fichero binario de la app
Entornos desarrollo para cada plataforma
PhoneGap Build
• No tiene UI. Será necesario emplear alguno de los frameworks javacript
(jQuery Mobile, Sencha, Backbone)
http://phonegap.com/
http://www.phonegapspain.com/
20. Eventos
• pageinit
• pagebeforeshow
• pagebeforehide
• pageshow
• pagehide
//Se ejecuta una vez para el documento entero
$(document).ready(function() {
//personalizar el mensaje que sale cuando se esperan datos AJAX
$.mobile.loadingMessage = "Cargando datos"
//personalizar el texto del botón para ir a la página anterior
$.mobile.page.prototype.options.backBtnText = "Atrás"
})
//Se ejecuta una vez para cada página
$('#pagBusqueda').bind('pageinit', function() {
$('#botonBuscar').click(buscar)
})
// Se ejecuta antes de mostrar una página
$('#pagDetalles').bind('pagebeforeshow', function() {
...
})
22. Ventajas & Desventajas
Ventajas
• Desarrollo rápido de interfaces.
• Elementos de interfaz adaptado a móviles
• Sintaxis sencilla.
• Efectos prediseñados
• Manejo de eventos.
• Baja curva de aprendizaje.
• Personalización del estilo visual (temas)
Desventajas
• Agrega peso extra a la aplicación.
• Manejo complejo de CSS.
• Los efectos como transiciones no funcionan fluidamente en equipos de baja gama.
• Las aplicaciones más grandes pueden hacer lenta la carga por trabajar en un solo
archivo.
• Menos control general del código.
25. Sencha Touch
• Sencha Touch es un framework para el desarrollo de aplicaciones móviles
centrado en WebKit
• Basado en EXTJS
• La apariencia es similar al de las aplicaciones nativas en Android, iOS y
BlackBerry
• Implementa el patrón de diseño MVC en el lado del cliente
• Permite leer datos directamente a través de AJAX, JSON o la capacidad local
storage de HTML5
Instalación
• Descargar el SDK desde su página web
• http://www.sencha.com/products/touch/download
Navegadores compatibles
• Basados en WebKit: Safari, Chrome, Opera,Epiphany
27. Arquitectura
Model: Los modelos representan objetos lógicos con lo que trabaja nuestra
aplicación, donde definiremos qué campos tiene y qué métodos actuarán sobre
ellos.
View: Permiten visualizar los datos en los componentes que ofrece la arquitectura.
Controller: Permite interactuar con las acciones del usuario.Responde a los eventos
que se producen en las vistas y manejan el traspaso de datos entre Model y Store.
Store: Son colecciones de modelos, y serán utilizados por varios componentes.
Profile: Permite customizar los elementos UI.
28. MVC
var App=new Ext.Application({
name: ‘MyApp‘ //variable global
});
Modelo
Ext.regModel(‘MyApp.models.MyModel', { fields:
[ ] });
Vista
MyApp.views.viewport = new Ext.Panel( {
layout:’fit’ //disposición elementos
});
Store
MyApp.stores.MyStore= new Ext.data.Store({
model: ‘myModel',
proxy: {} });
MyApp.views.*
MyApp.controllers.*
MyApp.models.*
MyApp.stores.*
Controlador
Ext.define('MyApp.controllers.MyContoller',
{
extend: 'Ext.app.Controller',
config: {
models: [‘ MyApp.models.MyModel '],
stores: [' MyApp.stores.MyStore '],
views: [ ‘MyApp.views.viewport ’],
}
33. Listeners
listeners:{
itemtap: function(record,index){
//index es el índice de la fila seleccionada
//record representa el objeto
//carga el registro en un formulario
MyApp.views.myForm.load(record);
}
itemdoubletap: function(record,index){
}
discloure: function(index,record){
}
}
34. Ext.Map
var mapdemo = Ext.create('Ext.Map', {
mapOptions : {
center : new google.maps.LatLng(40.3908, -3.6300),
zoom : 16,
mapTypeId : google.maps.MapTypeId.ROADMAP,
navigationControl: true,
navigationControlOptions: {
style: google.maps.NavigationControlStyle.DEFAULT
}},
listeners: {
maprender: function(comp, map) {
var marker = new google.maps.Marker({
position: new google.maps.LatLng(40.3908, -3.6300),
title : 'Campus UPM',
map: map
});
google.maps.event.addListener(marker, 'click', function()
{
new google.maps.InfoWindow({
content: 'Campus UPM‘
}).open(map, marker);
});
setTimeout(function() {
map.panTo(position);
}, 500);}}});
35. Browser support / S.O/ Connection
<script type="text/javascript">
if (!Ext.browser.is.WebKit) {
alert("The current browser is
unsupported.nnSupported browsers:n" +
"Google Chromen" +
"Apple Safarin" +
"Mobile Safari (iOS)n" +
"Android Browsern" +
"BlackBerry Browser"
);
}
</script>
if (Ext.os.is.Android){
Ext.Msg.alert("INFO", "Android user");
}
else if (Ext.os.is.Blackberry){
Ext.Msg.alert("INFO", "Blackberry user");
}
else if (Ext.os.is.iPad){
Ext.Msg.alert("INFO", "iPad user");
}
else if (Ext.os.is.Windows) {
Ext.Msg.alert("INFO"," Win user ");
}
<script type="text/javascript">
Ext.device.Connection.isOnline();
Ext.device.Connection.getType();
</script>
36. Demos && API Docs
http://dev.sencha.com/deploy/touch/examples/production/index.html
http://docs-origin.sencha.com/touch/2.2.1/
http://docs.sencha.com/touch/2.2.1/#!/example/kitchen-sink
37. Sencha Touch vs Jquery Mobile
Sencha Touch:
• API más potente. Todo es personalizable.
• Mayor número de controles IU,transiciones y animaciones
• Rendimiento en iOS es superior con respecto al resto de librerías
• Patrón MVC
• Mayor potencia de configuración
• Mayor curva de aprendizaje. Más tiempo de desarrollo.
• Se necesitan unos conocimientos más avanzados de Javascript
• En iOS hay limitaciones como el acceso a la cámara y contactos
Jquery Mobile:
• Muy sencillo de aprender si ya se conoce jquery
• Compatible con mayor número de dispositivos
• No emplea ningún patrón. Es necesario utilizar otro framework como Backbone
• Rendimiento suele ser inferior
• No dispone de muchos controles para el diseño de la interfaz
39. • http://backbonejs.org/
• Permite implementar la lógica a nivel de navegación siguiendo un patrón
similar a MVC / MVVM. La vista actúa también de controlador.
• Perfecto para usarlo con Jquery Mobile
• Pesa muy poco(6 Kb la versión minimizada)
• Dependencias:Underscore.js && (Zepto.js || JQuery.js)
• Se integra con la mayoría de frameworks javascript para el manejo del DOM
• LinedkIn, Soundcloud, Basecamp, Codiqa
Backbone
Vista
HTML + CSS+ Template
Controlador
Backbone.View
Modelo
Backbone.Model
Manipulación
del DOM con
Jquery y
templates
DOM View Events
El modelo se
actualiza con la
interacción del
usuario
Model Events
41. Backbone
• Deshabilitar navegación con Jquery Mobile
<script src="js/jqm-config.js"></script>
$(document).bind("mobileinit", function () {
$.mobile.ajaxEnabled = false;
$.mobile.linkBindingEnabled = false;
$.mobile.hashListeningEnabled = false;
$.mobile.pushStateEnabled = false;
// Elimina del DOM aquellos elementos que contengan
// data-role=page
$('div[data-role="page"]').live('pagehide', function (event, ui)
{
$(event.currentTarget).remove();
});
});
42. Appcelerator titanium
• FrameWork para crear aplicaciones nativas únicamente con JavaScript
• Soporta Android, iOS ,BlackBerry,Tizen
• Open source(Apache License 2.0).Soporte de pago
• http://appcelerator.com
• https://github.com/appcelerator
• http://www.appsdev-es.com/
• http://docs.appcelerator.com/titanium/3.0/
Características
• Interactuar con audio y video mediante streaming
• Interactuar con la cámara
• Geolocalización y mapas
• Interacción con Redes sociales
• Acceso al sistema de ficheros y base de datos
43. Arquitectura
La clave reside en la capa titanium bridge que será la encargada de traducir el
javascript en código nativo(Java para el caso de android y objetive-c para el caso de
iphone/ios).El resultado es una app completamente nativa.
UI API
Componentes de UI nativos Navbar,
Tabbar, Toolbar,Menus
Phone API
Componentes para las capacidades
nativas del teléfono geolocalización,
acelerómetro, mapas, sonido ,DB,
sistema de ficheros, red
49. Tianium vs PhoneGap
Titanium:
• Ejecuta la aplicación de forma nativa
• API más potente. Todo es personalizable.
• Mayor número de controles IU, transición y animaciones
• Patrón MVC mediante Alloy
• Native GUI.Look and Feel de forma nativa
• Mayor curva de aprendizaje
• Aplicaciones más pesadas(>=5MB)
• No soporta HTML5,CSS3,librerías Javascript.
• No acceso al DOM.
PhoneGap:
• Más fácil de aprender con conocimientos básicos de JavaScript
• Soporte HTML5,CSS3,librerías Javascript
• Debug es más sencillo al poder utilizar herramientas de desarrollo web
• Rendimiento suele ser inferior
• Ejecuta la aplicación dentro de componente WebView
50. Recomendaciones interfaz usuario
Responsive web design- CSS media queries
/* on mobile */
//para resoluciones menores o iguales a 480px de ancho
<link type="text/css" rel="stylesheet" media="only screen
and (max-device-width:480px)" href="mobile.css" />
/*on tablet */
//para resoluciones mayores a 480px de ancho
<link media="screen and (min-device-width: 481px)"
href=“tablet.css" type="text/css" rel="stylesheet" />
Viewport optimizado para móviles
<head>
<meta name="viewport" content="width=device-width; initial-scale=1.0;
maximum-scale=1.0; user-scalable=no;" />
</head>
51. Modernizr
Permite detectar la presencia de prácticamente cualquier funcionalidad de HTML5 y
CSS3 en nuestro navegador
Modernizr.load([ {
load: '//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.js',
complete: function () {
if ( !window.jQuery ) { //si jquery no se ha cargado correctamente
Modernizr.load('js/libs/jquery-1.7.1.min.js'); } } }, {
// This will wait for the fallback to load and execute if it needs to.
load: 'needs-jQuery.js' } ]);
http://modernizr.com/download/
56. Bibliografia
Jquery mobile
jQuery Mobile Up and
Running
Oreilly 2012
jQuery Mobile
O'Reilly 2011
jQuery Mobile First
Look
Packt 2011
Teach Yourself
jQuery Mobile In 24
Hours
SAMS