alagoas dev day

98
#FirefoxOS Alagoas Dev Day

Upload: fabio-magnoni

Post on 16-Apr-2017

810 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Alagoas Dev Day

!

#FirefoxOS

Alagoas Dev Day !

Page 2: Alagoas Dev Day

Fábio Magnoni

@FabioMagnoni

#FirefoxOS

Page 3: Alagoas Dev Day
Page 4: Alagoas Dev Day
Page 5: Alagoas Dev Day

http://www.unrealengine.com/html5/

Page 6: Alagoas Dev Day
Page 7: Alagoas Dev Day
Page 8: Alagoas Dev Day
Page 9: Alagoas Dev Day
Page 10: Alagoas Dev Day
Page 11: Alagoas Dev Day
Page 12: Alagoas Dev Day

Meidin Camelô…

Page 13: Alagoas Dev Day
Page 14: Alagoas Dev Day

38 bilhões de dispositivos !conectamos !

em 2020

ABI Research - 2013-05-09 - http://j.mp/38billion!

Page 15: Alagoas Dev Day

Você deveria começar com a web…

Page 16: Alagoas Dev Day
Page 17: Alagoas Dev Day
Page 18: Alagoas Dev Day

Mobile Internet Users Desktop

Page 19: Alagoas Dev Day

Plataformas !

Page 20: Alagoas Dev Day

A Web está ganhando!!!

Page 21: Alagoas Dev Day

A Web é a Plataforma

Page 22: Alagoas Dev Day

Vamos começar com o que você merece!

Page 23: Alagoas Dev Day
Page 24: Alagoas Dev Day

Feito com a Web

Usando HTML5, CSS3 e JavaScript!Com uma série de APIs!para desenvolver apps.!

Page 25: Alagoas Dev Day
Page 26: Alagoas Dev Day

É open source

Page 27: Alagoas Dev Day
Page 28: Alagoas Dev Day

GONK

Page 29: Alagoas Dev Day

Infrastructure Layer (Gonk)

RILd

AccelGPSCamera

Power Mgt

Audio /

Video

Open GLES

Input / Touch

Open Source Libraries

Bluetooth USB

LEDs HW

Buttons

Vibrator

OEM Libs

Device’s Operationg System

Linux Kernel OEM Drivers OEM Modem Firmware

Page 30: Alagoas Dev Day

GECKO

Page 31: Alagoas Dev Day

Open Web Platform Interface

Contacts

Sensors GeoLocation

Battery Vibration

Camera Media

Storage WebRTC

Alarms System

Messages

System XHR

NFC Bluetooth

WebTelephony WebSMS/MMSSettings

Gecko Engine

Security

Web APIs

Open WebApps APIs

Network Connections

/ UICC

mozPay /Trusted

UI

WebActivities

HTML5 APIs

Page 32: Alagoas Dev Day

GAIA

Page 33: Alagoas Dev Day

JS Libraries For Developers

Core - Certified

Apps System

AppUtility

Libraries Building Blocks

GaiaHosted Apps

Trusted Packed Apps

Application Layer HTML5 / JS / CSS

Page 34: Alagoas Dev Day

{ "version": "1.0", "name": “Mozilla", "description": "Exciting Open Web development action!", "icons": { "16": "/img/icon-16.png", "48": "/img/icon-48.png", "128": "/img/icon-128.png" }, "developer": { "name": "Mozilla Labs", "url": "http://mozillalabs.com" }, "installs_allowed_from": ["*"], "appcache_path": "/cache.manifest", "locales": { "es": { "description": "¡Acción abierta emocionante del desarrollo del Web!", "developer": { "url": "http://es.mozillalabs.com/" } }, "pt-BR": { "description": "Descrição da sua aplicação!", "developer": { "url": "http://pt-BR.mozillalabs.com/" } } }, "default_locale": "en" }

Page 35: Alagoas Dev Day

Verificador de Manifestohttp://appmanifest.org/

Page 36: Alagoas Dev Day

Empacotadas vs. Hospedadas

Page 37: Alagoas Dev Day

Segurança

Page 38: Alagoas Dev Day

Apps

Conteúdo Web

Conteúdos Web Padrão

Web Apps Privilegiadas

Mais acesso, mais responsabilidade

Web Apps Instaladas

Web App Normal

Web App Certificada

Apps Críticas ao dispositivo

Page 39: Alagoas Dev Day

Permissões

https://developer.mozilla.org/en-US/Apps/Developing/App_permissions

Page 40: Alagoas Dev Day

"permissions": { "contacts": { "description": "Required for autocompletion in the share screen", "access": "readcreate" }, "alarms": { "description": "Required to schedule notifications" } }

Page 41: Alagoas Dev Day
Page 42: Alagoas Dev Day

WEB APIs

Page 43: Alagoas Dev Day

Vibration API (W3C)

Screen Orientation

Geolocation API

Mouse Lock API (W3C)

Open WebApps

Network Information API (W3C)

Battery Status API (W3C)

Alarm API

Web Activities

Push Notifications API

WebFM API

WebPayment

IndexedDB (W3C)

Ambient light sensor

Proximity sensor

Notification

WEB APIS (PRA GALERA)

Page 44: Alagoas Dev Day

API STATUS DA BATERIA

Page 45: Alagoas Dev Day

var battery = navigator.battery; if (battery) { var batteryLevel = Math.round(battery.level * 100) + "%", charging = (battery.charging)? "" : "not ", chargingTime = parseInt(battery.chargingTime / 60, 10, dischargingTime = parseInt(battery.dischargingTime / 60, 10); // Set events battery.addEventListener("levelchange", setStatus, false); battery.addEventListener("chargingchange", setStatus, false); battery.addEventListener("chargingtimechange", setStatus, false); battery.addEventListener("dischargingtimechange", setStatus, false); }

Page 46: Alagoas Dev Day

NOTIFICAÇÃO

Page 47: Alagoas Dev Day

var notification = navigator.mozNotification; notification.createNotification( "See this", "This is a notification", iconURL );

Page 48: Alagoas Dev Day

API ORIENTAÇÃO DE TELA

Page 49: Alagoas Dev Day

// Portrait mode: screen.mozLockOrientation("portrait"); /* Possible values: "landscape" "portrait" "landscape-primary" "landscape-secondary" "portrait-primary" "portrait-secondary" */

Page 50: Alagoas Dev Day

API VIRAÇÃO

Page 51: Alagoas Dev Day

// Vibrate for one second navigator.vibrate(1000); // Vibration pattern [vibrationTime, pause,…] navigator.vibrate([200, 100, 200, 100]); // Vibrate for 5 seconds navigator.vibrate(5000); // Turn off vibration navigator.vibrate(0);

Page 52: Alagoas Dev Day

API INFO DE REDE

Page 53: Alagoas Dev Day

var connection = window.navigator.mozConnection, online = connection.bandwidth > 0, metered = connection.metered;

Page 54: Alagoas Dev Day

API DE PROXIMIDADE

Page 55: Alagoas Dev Day

window.addEventListener("deviceproximity", function (event) { // Current device proximity, in centimeters console.log(event.value); // The maximum sensing distance the sensor is // able to report, in centimeters console.log(event.max); // The minimum sensing distance the sensor is // able to report, in centimeters console.log(event.min); });

Page 56: Alagoas Dev Day

API EVENTOS ILUMINAÇÃO

Page 57: Alagoas Dev Day

window.addEventListener("devicelight", function (event) { // The level of the ambient light in lux console.log(event.value); });

Page 58: Alagoas Dev Day

window.addEventListener("devicelight", function (event) { // The lux values for "dim" typically begin below 50, // and the values for "bright" begin above 10000 console.log(event.value); });

Page 59: Alagoas Dev Day

Device Storage API

Browser API

TCP Socket API

Contacts API

systemXHR

WEB APIS (PRIVILEGIADAS)

Page 60: Alagoas Dev Day

DEVICE STORAGE

Page 61: Alagoas Dev Day

var deviceStorage = navigator.getDeviceStorage("videos");

Page 62: Alagoas Dev Day

// "external", "shared", or "default". deviceStorage.type; // Add a file - returns DOMRequest with file name deviceStorage.add(blob); // Same as .add, with provided name deviceStorage.addNamed(blob, name); // Returns DOMRequest/non-editable File object deviceStorage.get(name); // Returns editable FileHandle object deviceStorage.getEditable(name); // Returns DOMRequest with success or failure deviceStorage.delete(name); // Enumerates files deviceStorage.enumerate([directory]); // Enumerates files as FileHandles deviceStorage.enumerateEditable([directory]);

Page 63: Alagoas Dev Day

var storage = navigator.getDeviceStorage("videos"), cursor = storage.enumerate(); cursor.onerror = function() { console.error("Error in DeviceStorage.enumerate()", cursor.error.name); }; cursor.onsuccess = function() { if (!cursor.result) return; var file = cursor.result; // If this isn't a video, skip it if (file.type.substring(0, 6) !== "video/") { cursor.continue(); return; } // If it isn't playable, skip it var testplayer = document.createElement("video"); if (!testplayer.canPlayType(file.type)) { cursor.continue(); return; } };

Page 64: Alagoas Dev Day

API DE CONTATO

Page 65: Alagoas Dev Day

var addContact = document.querySelector("#add-contact"); if (addContact) { addContact.onclick = function () { var newContact = new MozActivity({ name: "new", // Possibly add-contact in future versions data: { type: "webcontacts/contact", params: { // Will possibly move to be direct properties under "data" giveName: "Fabio", familyName: "Magnoni", tel: "+5519988013586", email: "[email protected]", address: "Campinas", note: “Se tiver cerveja envolvida, pode entrar em contato :)”, company: "Mozilla" } } }); } }

Page 66: Alagoas Dev Day

Apps Certificadas = Apps SO

Page 67: Alagoas Dev Day

Dialer !Contacts !Settings !SMS !Web browser !Gallery !Video Player !Music Player !E-mail (POP, IMAP) !Calendar

Alarm Clock !Camera !Notes !First Run Experience !Notifications !Home Screen !Mozilla Marketplace !System Updater !Localization Support

Page 68: Alagoas Dev Day

WEB ACTIVITIES

Page 69: Alagoas Dev Day
Page 70: Alagoas Dev Day

var activity = new MozActivity({ name: "view", data: { type: "image/png", url: ... } });

activity.onsuccess = function () { console.log("Showing the image!"); };activity.onerror = function () { console.log("Can't view the image!"); };

Page 71: Alagoas Dev Day

{ "activities": { "share": { "filters": { "type": ["image/png", "image/gif"] } "href": "sharing.html", "disposition": "window" } } }

Page 72: Alagoas Dev Day

var register = navigator.mozRegisterActivityHandler({ name: "view", disposition: "inline", filters: { type: "image/png" } }); register.onerror = function () { console.log("Failed to register activity"); }

Page 73: Alagoas Dev Day

navigator.mozSetMessageHandler("activity", function (a) { var img = getImageObject(); img.src = a.source.url; // Call a.postResult() or a.postError() if // the activity should return a value });

Page 74: Alagoas Dev Day

Como instalar App da Web

var install app = navigator.mozApps.install(manifestURL); installapp.onsucess = function(data) { //App is installed };installapp.onerror = function() { //App wasn’t installed, info is in // installapp.error.name};

Page 75: Alagoas Dev Day

Cordova & Phonegap

Page 76: Alagoas Dev Day

Implementação das APIs

• Câmera • Contatos • Dispositivo • Device-motion • Geolocation • Orientação • Vibração

Page 77: Alagoas Dev Day

Se preparando

$ sudo npm install -g cordova$ cordova create hello com.example.hello HelloWorld$ cd hello$ cordova platform add firefoxos$ cordova prepare firefoxos

Page 78: Alagoas Dev Day

API de Camera

$ cordova plugin add org.apache.cordova.camera!!//Cordova codenavigator.camera.getPicture(function (src) { var img = document.createElement('img'); img.id = 'slide'; img.src = src; }, function () {}, { destinationType: 1});!

Page 79: Alagoas Dev Day

Firefox OS App Manager + Simulador (1.2+)

Page 80: Alagoas Dev Day

Firefox Developer Tools

Page 81: Alagoas Dev Day

\o/ Documentos e Ferramentas \o/

developer.mozilla.org

Page 82: Alagoas Dev Day

https://developer.mozilla.org/en-US/docs/WebAPI

Page 83: Alagoas Dev Day

FIREFOX OS BOILERPLATE APP

https://github.com/robnyman/Firefox-OS-Boilerplate-App

Page 84: Alagoas Dev Day

https://hacks.mozilla.org

Mozilla Developer Blog

Page 86: Alagoas Dev Day

Prototipe com JSFiddle• Insira /webapp.manifest

para instalar o app no simulador do Firefox OS

!

• Insira /fxos.html para ter uma página de instalação como um app Firefox OS hospedado

Page 87: Alagoas Dev Day

http://buildingfirefoxos.com/

Page 88: Alagoas Dev Day

http://mozilla.github.io/brick/docs.html

Page 89: Alagoas Dev Day

ComponentesAppbar !Calendar !Deck !Flipbox !Layout !Slideshow !Slider !Tabbar !Toggle !Tooltip

Page 90: Alagoas Dev Day

https://marketplace.firefox.com/

Page 91: Alagoas Dev Day

https://appmaker.mozillalabs.com/

App Maker

Page 92: Alagoas Dev Day
Page 93: Alagoas Dev Day
Page 94: Alagoas Dev Day
Page 95: Alagoas Dev Day

https://lists.mozilla.org/listinfo/dev-webapps

irc://irc.mozilla.org/ #openwebapps

Page 97: Alagoas Dev Day
Page 98: Alagoas Dev Day

Fábio Magnoni

@FabioMagnoni

@mozhacks