FirefoxOS Desarrollando Apps Moviles con HTML5

Transcripción

FirefoxOS Desarrollando Apps Moviles con HTML5
FirefoxOS
La Web es la Plataforma
Desarrollando Apps Móviles con HTML5
Indice de temas
La Era de las WebApps
La Web es la Plataforma
Desarrollando una WebApp Móvil
Referencias
HTML5: La era de las WebApps
Semántica
Multimedia
Conectividad
APIs
CSS3
Offline
Dispositivo
Gráficos
HTML5: La era de las WebApps
Semántica
● Nuevos elementos para definir
claramente las diferentes partes
de la página.
● Mejores algoritmos de parseo
(ej: web crawlers)
HTML5: La era de las WebApps
Semántica
● <nav>
Define un conjunto de links de navegación.
● <section>
Define un agrupamiento temático de contenido, típicamente con un
encabezado.
● <article>
Define una sección independiente y autocontenida, con entidad
propia.
HTML5: La era de las WebApps
Semántica
● <header>
Define encabezado para una sección del documento. Contenedor
de contenido introductorio.
● <aside>
Define contenido relacionado a un artículo o a la página (Ej:
Glosario).
● <footer>
Define información relacionada al elemento contenedor.
HTML5: La era de las WebApps
Mutimedia
● En la versión anterior de HTML los Browsers se valían
de plugins para reproducir ciertos formatos multimedia.
● HTML5 incluye dos elementos nuevos para reproducir
contenido multimedia directo en el Browser: <audio> y
<video>
HTML5: La era de las WebApps
Mutimedia
● <video>
<video width="320" height="240" controls>
<source src="movie.mp4" type="video/mp4">
<source src="movie.ogg" type="video/ogg">
Su Navegador no soporta el tag video.
</video>
Ver ejemplo:
http://www.w3schools.com/html/tryit.asp?filename=tryhtml5_video_js_prop
HTML5: La era de las WebApps
Mutimedia
● <audio>
<audio controls>
<source src="horse.ogg" type="audio/ogg">
<source src="horse.mp3" type="audio/mpeg">
Su navegador no soporta el tag audio.
</audio>
HTML5: La era de las WebApps
Conectividad
● HTML5 permite conectarse con el servidor en formas
novedosas e innovadoras.
○ WebSockets: Conexión permanente página/servidor e
intercambio de datos no-HTML.
○ Server-sent events: Permite al servidor enviar eventos
(push) al cliente.
○ WebRTC: Comunicación en tiempo real (videoconferencia)
HTML5: La era de las WebApps
Conectividad
● WebSockets
○ Canal de comunicación full-duplex (bi-direccional).
○ Es un gran avance para transmisión de datos en tiempo
real. Orientada a eventos.
○ Reduce el overhead dramáticamente. Optimiza ancho
de banda y latencia de red.
HTML5: La era de las WebApps
Conectividad
● WebSockets: Handshake
○ Una vez que cliente y servidor intercambian el primer
mensaje del protocolo handshake se establece una
conexión por WebSocket.
○ A partir del Handshake exitoso los mensajes sólo tienen
un overhead de 2 bytes!.
HTML5: La era de las WebApps
Conectividad
● WebSockets: Comparativa Overhead
○ Polling: Request+Response Header = 871 bytes por
request.
■ Cada cliente hace 1 request segundo.
○ WebSocket: 2 bytes por mensaje.
■ Cada cliente recibe 1 mensaje por segundo
HTML5: La era de las WebApps
Conectividad
● WebSockets: Comparativa Overhead
Fuente::
http://www.websocket.org/quantum.html
HTML5: La era de las WebApps
Conectividad
● WebSockets
○ Ejemplo en Server Java: http://blog.idrsolutions.
com/2013/12/websockets-an-introduction/
○ Ejemplo con Server PHP: Librerías
PHP WebSocket: https://code.google.com/p/phpwebsocket/
Ratchet: http://socketo.me/
HTML5: La era de las WebApps
Conectividad
● Server-sent events
○ El servidor inicia la comunicación enviando
eventos+datos (se invierte la comunicacion
tradicional cliente/servidor).
○ Orientado a eventos
HTML5: La era de las WebApps
Conectividad
● Server-sent events: Cliente
Creando conexión
Escuchando todos lo
mensajes
var evtSource = new
evtSource.onmessage =
EventSource("serverside.php"); function(e) {
//CODIGO JavaScript aqui
}
Escuchando un evento
evtSource.addEventListener
("ping", function(e) {
//CODIGO JavaScript aqui
}, false);
HTML5: La era de las WebApps
Conectividad
● Server-sent events: Servidor
○ El formato del stream del Evento es un string con
el siguiente formato, ej:
event: userconnect
data: {"username": "bobby", "time": "02:33:48"}
event: usermessage
data: {"username": "bobby", "time": "02:34:11", "text": "Hi
everyone."}
HTML5: La era de las WebApps
APIs
● WebWorkers: Concurrencia en JavaScript
○ Proveen una manera sencilla de ejecutar scripts en
background en otro hilo (thread) de ejecución.
○ Mecanismo de pase de mensajes para intercambiar
información con la página.
○ Permiten construir WebApps escalables y responsivas.
HTML5: La era de las WebApps
APIs
● WebWorkers: Iniciando un Worker
var myWorker = new Worker("my_task.js");
myWorker.addEventListener('message', function(e) {
//Recibo info del Worker
console.log(e.data);
}, false);
myWorker.postMessage("datos enviados el worker"); //Inicia el Worker
HTML5: La era de las WebApps
APIs
● WebWorkers: Worker (my_task.js)
function procesar() {
//Codigo JavaScript
}
self.addEventListener('message', function(e) {
// Send the message back.
self.postMessage('You said: ' + e.data);
}, false);
HTML5: La era de las WebApps
APIs
● Manipulando el Historial del Navegador
○ window.history nos dá acceso al historial de navegación.
Podemos ir hacia atrás, adelante y manipular el contenido
del historial de usuario.
○ Algunos métodos: back, forward, go, pushState,
replaceState.
HTML5: La era de las WebApps
APIs
● Content Editable
○ HTML5 permite a la mayoría de los elementos ser editables
con el atributo contentEditable.
○ Ejemplo:
<div contenteditable="true">
Este contenido puede ser editado por el usuario.
</div>
HTML5: La era de las WebApps
APIs
● Drag and Drop
○ Los elementos se pueden marcar como draggables.
○ Eventos para controlar el proceso de drag and drop:
dragstart, dragenter, dragover, dragleave, drag, drop,
dragend.
○ Objeto DataTransfer para transportar datos.
HTML5: La era de las WebApps
APIs
● Eventos Online y Offline
○ Para hacer una WebApp Offline necesitamos saber cuando
se está en modo offline u online.
○ navigator.onLine (true/false): Indica si estamos en modo
online o no.
○ window.addEventListener('online', updateOnlineStatus);
HTML5: La era de las WebApps
CSS3
●
●
●
●
●
●
●
●
Selectores
Box Model
Backgrounds y Bordes
Efectos de texto
Transformaciones 2D/3D
Animaciones
Layout de Multiples Columnas
Interface de Usuario
Ver http://www.css3.com
HTML5: La era de las WebApps
Offline
● App Cache:
○ Mecanismo de AppCache para correr WebApps en forma
Offline.
○ Para habilitar AppCache se debe poner el atributo
manifest en las paginas de la aplicación:
■ <html manifest="example.appcache">...</html>
HTML5: La era de las WebApps
Offline
● App Cache:
○ El archivo manifest de cache es un archivo de texto que
lista los recursos que el Browser debe hacer caching.
CACHE MANIFEST
# v1 - 2011-08-13
# This is a comment.
http://www.example.com/index.html
http://www.example.com/header.png
HTML5: La era de las WebApps
Offline
● sessionStorage:
○ Almacenamiento clave/valor que dura la sesión de la
página.
● localStorage:
○ Almacenamiento por clave/valor como sessionStorage
pero persistente.
HTML5: La era de las WebApps
Offline
● IndexedDB:
○ Web Standard que permite almacenar grandes
cantidades de datos estructurados.
○ Se pueden almacenar datos Blobs (binarios).
○ Se suele utilizar el protocolo Asincrónico para operar con
la Base de datos.
HTML5: La era de las WebApps
Dispositivo
● API de la Camara:
a. <input type="file" id="take-picture" accept="image/*">
b. var takePicture = document.querySelector("#take-picture");
takePicture.onchange = function (event) {
//Obtener referencia foto obtenida con camara o archivo elegido.
var files = event.target.files, file;
if (files && files.length > 0) {
file = files[0];
} };
HTML5: La era de las WebApps
Dispositivo
● Eventos Touch:
○ TouchEvent: touchstart, touchend, touchleave, touchcancel,
touchmove.
○ Touch: Punto de contacto del usuario con la superficie.
○ TouchList: Lista de Touch (ej: multi-touch).
HTML5: La era de las WebApps
Dispositivo
● Geolocalizacion:
○ La API de Geolocalizacion permite al usuario proveer su
ubicación a las WebApps.
Ejemplo de uso:
navigator.geolocation.getCurrentPosition(function(position) {
do_something(position.coords.latitude, position.coords.longitude);
});
HTML5: La era de las WebApps
Gráficos
● Canvas:
○ Elemento HTML que permite hacer dibujos, manejar
imágenes y animaciones básicas.
● WebGL:
○ APi JavaScript para renderizar gráficos 2D/3D
● SVG:
○ Lenguaje XML para describir gráficos vectoriales.
HTML5: La era de las WebApps
Apps DEMO’s:
● Juegos:
○ Cut the rope: http://ctr.clay.io/
○ FlappyBird: http://flappybird.io/
○ HTML5 GameDev: http://www.html5gamedevelopment.com
● Mozilla Demo Studio:
○ https://developer.mozilla.org/es/demos/
FirefoxOS: La Web es la Plataforma
● Misión y Objetivos.
○ Mozilla. Acuerdos/Partners.
● Arquitectura de la Plataforma.
● Marketplace.
● FirefoxOS Simulator.
FirefoxOS: La Web es la Plataforma
● Misión y Objetivos:
○ Inclusión. Feature Phones -> Smartphones
FirefoxOS: La Web es la Plataforma
● Misión y Objetivos:
○ Poner al usuario primero. Sistema Operativo
abierto y libre.
FirefoxOS: La Web es la Plataforma
● Misión y Objetivos:
○ Lenguaje de la web como plataforma de
construcción de apps (HTML+CSS+JS).
○ Open Web. Llevar la Web al móvil.
FirefoxOS: La Web es la Plataforma
● Arquitectura de la Plataforma.
●
Gaia: Interfaz de usuario, controla
todo lo que se dibuja en pantalla.
●
Gecko: Motor del Web Browser
(implementa los standards HTML,
CSS, JavaScript).
●
Gonk: Kernel Linux y capa de
abstracción de hardware (Comparte
con Android).
FirefoxOS: La Web es la Plataforma
● Mozilla. Acuerdos/Partners
○ ¿Que Gana Mozilla?
■ Tracción
■ Fabricantes: Construcción de Dispositivos.
■ Operadoras: Infraestructura de comunicación, llegada
al usuario final.
■ Lenguaje de la web: Gran base de desarrolladores
experimentados.
FirefoxOS: La Web es la Plataforma
● Mozilla. Acuerdos/Partners
○ ¿Que Ganan las Operadoras?
■ Retoman control de parte del ecosistema que habían
perdido (Apps y Servicios)
FirefoxOS: La Web es la Plataforma
● Mozilla. Acuerdos/Partners
○ ¿Que Ganan los Fabricantes?
■ No depender de un solo proveedor de software
(Google: Android)
FirefoxOS: La Web es la Plataforma
● Mozilla. Acuerdos/Partners
○ Oportunidad para Desarrolladores
■ Mercados emergentes: Muchas personas con feature
phones.
■ Nuevo ecosistema. Posicionarse al inicio de la ola.
■ Poca competencia.
■ Lenguaje de la Web (HTML+CSS+JS).
FirefoxOS: La Web es la Plataforma
● Marketplace: ¿Como publicar la App?.
○ Elegir entre Hosted o Packaged
○ Ingresar en el Marketplace (https://marketplace.firefox.com/)
■
■
Ingresar/Registrarse como usuario
Ingresar datos de la aplicación, screenshots, videos, modelo de
pago
○ Mainfest App file (manifest.webapp)
FirefoxOS: La Web es la Plataforma
● Marketplace: ¿Como publicar la App?.
○ Mainfest App file (manifest.webapp), JSON
{ "name": "MiSitio Mobile",
"description": "MiSitio slogan!",
"launch_path": "http://misitio.com/index.html",
"icons": { “60": "http://misitio.com/icon.png",
"128": "http://misitio.com/icon-128.png" },
"developer": { "name": "MiSitio Team", ”url": "http://misitio.com" },
"default_locale": "es" }
FirefoxOS: La Web es la Plataforma
● Marketplace: Apps Empaquetadas vs Alojadas.
○ App Alojadas (Hosted):
■ Corren en un servidor como cualquier sitio web.
■ No tienen acceso a APIs del dispositivo.
○ App Empaquetada (Packaged):
■ Se empaquetan en archivos .zip con los recursos.
■ Pueden ser: web app, privileged app, certified app.
■ privileged y certified apps tienen acceso a APIs del
dispositivo
FirefoxOS: La Web es la Plataforma
● Marketplace: Monetización
○ Firefox Marketplace soporta 3 modelos de pago
■ App Pagas o Freemium.
■ Suscripción (planificado)
■ Pagos In-App.
○ Market propios o de terceros:
■ Se puede descargar el Market libremente.
■ Una empresa u organismo puede tener su propio
Market.
FirefoxOS: La Web es la Plataforma
● FirefoxOS Simultator
○ Complemento de Firefox para simular un dispositivo
movil con FirefoxOS
○ Permite hacer Debugging
Desarrollando una WebApp Móvil
● Baabler: ¿Qué es Baabler?.
Se puede acceder al video en: http://baabler.com/que
Desarrollando una WebApp Móvil
● Baabler: ¿Qué es Baabler?.
○ Comunidad de personas que convierten páginas web
a audio para aprovechar tiempos improductivos.
○ Necesitamos App para dispositivos No-Android:
HTML5 como solución multi-plataforma.
○
“HTML5 should not be considered as a whole. Cherry-pick the
technology that suits the solution”
Desarrollando una WebApp Móvil
● Baabler: Requerimientos y Desafíos
1. Slide Menu.
2. Leer RSS Feeds.
3. Mochila: Almacenamiento Offline.
4. No Bloquear UI.
Desarrollando una WebApp Móvil
● Baabler: (1) Slide Menu
○ JQuery Mobile:
■ Eventos swipeleft, swiperight (animate)
○ Muchas vistas en la misma página o una página por
vista. (Problema WebWorkers dejan de funcionar
cuando cambia página)
Desarrollando una WebApp Móvil
● Baabler: (2) Leer RSS Feeds
○ Parsing del XML y convertir cada item en HTML
<item>
<title>Titulo1</title>
<link>...</link>
<description>...</description>
<enclosure url="http://URL/archivo.mp3" />
<itunes:author />
<pubDate>...</pubDate>
</item>
<p>
Titulo1<br><br>
<audio controls="">
<source src="http://URL/archivo.mp3"></source>
</audio>
<a href="javascript:agregarMochila
('$link','$title','http://URL/archivo.mp3');">
</p>
Desarrollando una WebApp Móvil
● Baabler: (3) Mochila: Almacenamiento Offline.
○ IndexedDB:
■ Permite volumen de datos considerable del lado
cliente, permite datos binarios (mp3).
■ Operaciones Asincrónicas
○ Reproducir audio en modo Offline:
■ Atributo “src” del tag audio => blob en IndexedDB
Desarrollando una WebApp Móvil
● Baabler: (5) No Bloquear UI.
○ WebWorkers para Syncronizar Mochila:
■ Acceso a IndexedDB aun no disponible => Pasar Mochila
como Array y luego el Worker devuelve el array con el dato
binario a la página.
■ Si cambia la página termina el Worker (Single Page App?)
○ Descargas de MP3 vía AJAX (async).
Referencias
●
FirefoxOS:
○ Guias de diseño, gooides y más: http://buildingfirefoxos.com/
○ Doc: https://developer.mozilla.org/es/Firefox_OS
○ Video & Presentations: https://hacks.mozilla.org/2012/11/firefox-os-video-presentationsand-slides-on-the-os-webapis-hacking-and-writing-apps/
○ http://www.mozilla.org/es-ES/firefox/os/
●
HTML5:
○ HTML5 Rocks: http://www.html5rocks.com/es/
○ ¿Can I Use? Tabla de soporte y compatibilidad: http://caniuse.com/
○ Doc en Mozilla, guías y más: https://developer.mozilla.org/es/docs/HTML/HTML5
○ W3Schools, test de snipets de codigo, etc.: http://www.w3schools.com
¡GRACIAS!
● Lic. Matías Basilico
○ Blog: http://mbasilico.com.ar
○ E-Mail: [email protected]
○ Twitter: @mbasilico

Documentos relacionados