87
Bringing the Open Web & APIs to mobile devices with Firefox OS

Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet

Embed Size (px)

Citation preview

Page 1: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet

Bringing the Open Web & APIs to mobile devices with Firefox OS

Page 2: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet
Page 4: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet

Using HTML5, CSS and JavaScript together with a number of APIs to build apps and customize the UI.

Firefox OS

Page 5: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet

Open Web Apps

Page 6: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet
Page 7: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet

Develop Web App using HTML5, CSS, & Javascript1.

Create an app manifest file2.

Publish/install the app3.

Page 8: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet

{ "version": "1.0", "name": "MozillaBall", "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/" } }, "it": { "description": "Azione aperta emozionante di sviluppo di fotoricettore!", "developer": { "url": "http://it.mozillalabs.com/" } } }, "default_locale": "en"}

Page 9: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet

MANIFEST CHECKERhttp://appmanifest.org/

Page 10: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet

Serve with Content-type/MIME type:

application/x-web-app-manifest+json

Page 13: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet

Packaged vs. Hosted Apps

Page 16: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet

WebAPIs

Page 18: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet

Security Levels

Page 19: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet

Web Content

Regular web content

Installed Web App

A regular web app

Privileged Web App

More access, more responsibility

Certified Web App

Device-critical applications

Page 21: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet

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

Page 24: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet

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

REGULAR APIS

Page 25: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet

BATTERY STATUS API

Page 26: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet

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 27: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet

NOTIFICATION

Page 28: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet

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

Page 29: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet

SCREENORIENTATION API

Page 30: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet

// Portrait mode:screen.mozLockOrientation("portrait");

/* Possible values: "landscape" "portrait" "landscape-primary" "landscape-secondary" "portrait-primary" "portrait-secondary"*/

Page 31: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet

VIBRATION API

Page 32: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet

// Vibrate for one secondnavigator.vibrate(1000);

// Vibration pattern [vibrationTime, pause,…]navigator.vibrate([200, 100, 200, 100]);

// Vibrate for 5 secondsnavigator.vibrate(5000);

// Turn off vibrationnavigator.vibrate(0);

Page 33: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet

WEB PAYMENTS

Page 34: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet

var pay = navigator.mozPay(paymentToken);pay.onsuccess = function (event) { // Weee! Money!};

Page 35: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet

NETWORK INFORMATION API

Page 36: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet

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

Page 37: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet

DEVICEPROXIMITY

Page 38: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet

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 39: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet

AMBIENT LIGHT EVENTS

Page 40: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet

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

Page 41: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet

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 42: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet

Device Storage API

Browser API

TCP Socket API

Contacts API

systemXHR

PRIVILEGED APIS

Page 43: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet

DEVICE STORAGE API

Page 44: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet

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

Page 45: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet

// "external", "shared", or "default".deviceStorage.type;

// Add a file - returns DOMRequest with file namedeviceStorage.add(blob);

// Same as .add, with provided namedeviceStorage.addNamed(blob, name);

// Returns DOMRequest/non-editable File objectdeviceStorage.get(name);

// Returns editable FileHandle objectdeviceStorage.getEditable(name);

// Returns DOMRequest with success or failuredeviceStorage.delete(name);

// Enumerates filesdeviceStorage.enumerate([directory]);

// Enumerates files as FileHandlesdeviceStorage.enumerateEditable([directory]);

Page 46: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet

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 47: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet

CONTACTS API

Page 48: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet

var contact = new mozContact();contact.init({name: "Tom"});

var request = navigator.mozContacts.save(contact);request.onsuccess = function() { console.log("Success");};

request.onerror = function() { console.log("Error")};

Page 49: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet

WebTelephony

WebSMS

Idle API

Settings API

Power Management API

Mobile Connection API

WiFi Information API

WebBluetooth

Permissions API

Network Stats API

Camera API

Time/Clock API

Attention screen

Voicemail

CERTIFIED APIS

Page 50: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet

WEBTELEPHONY

Page 51: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet

// Telephony objectvar tel = navigator.mozTelephony;

// Check if the phone is muted (read/write property)console.log(tel.muted);

// Check if the speaker is enabled (read/write property)console.log(tel.speakerEnabled);

Page 52: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet

// Place a callvar cal = tel.dial(“123456789”);

Page 53: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet

// Receiving a calltel.onincoming = function (event) { var incomingCall = event.call;

// Get the number of the incoming call console.log(incomingCall.number);

// Answer the call incomingCall.answer();};

// Disconnect a callcall.hangUp();

// Iterating over calls, and taking action depending on their changed statustel.oncallschanged = function (event) { tel.calls.forEach(function (call) { // Log the state of each call console.log(call.state); });};

Page 54: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet

WEBSMS

Page 55: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet

// SMS objectvar sms = navigator.mozSMS;

// Send a messagesms.send("123456789", "Hello world!");

Page 56: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet

// Recieve a messagesms.onreceived = function (event) { // Read message console.log(event.message);};

Page 57: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet

WEB ACTIVITIES

Page 58: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet
Page 59: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet

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

Page 60: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet

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 61: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet

var register = navigator.mozRegisterActivityHandler({ name: "view", disposition: "inline", filters: { type: "image/png" }});

register.onerror = function () { console.log("Failed to register activity");}

Page 62: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet

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 63: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet
Page 64: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet

Future APIs

Page 65: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet
Page 66: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet

Resource lock API

UDP Datagram Socket API

Peer to Peer API

WebNFC

WebUSB

HTTP-cache API

Calendar API

Spellcheck API

LogAPI

Keyboard/IME API

WebRTC

FileHandle API

Sync API

Page 67: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet

Web Apps from Mozilla

Page 68: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet
Page 69: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet

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 72: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet

Get started

Page 75: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet

WebRTC

Page 76: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet
Page 77: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet
Page 78: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet

var video = document.querySelector('video');

navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia;window.URL = window.URL || window.webkitURL || window.mozURL || window.msURL;

// Call the getUserMedia method with our callback functionsif (navigator.getUserMedia) { navigator.getUserMedia({video: true}, successCallback, errorCallback);} else { console.log('Native web camera streaming (getUserMedia) not supported in this browser.'); // Display a friendly "sorry" message to the user}

Page 79: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet

function successCallback(stream) { // Set the source of the video element with the stream from the camera if (video.mozSrcObject !== undefined) { video.mozSrcObject = stream; } else { video.src = (window.URL && window.URL.createObjectURL(stream)) || stream; } video.play();}

Page 80: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet

Getting help

Page 81: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet
Page 82: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet

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

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

Page 83: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet

Trying things out

Page 84: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet
Page 85: Bringing the Open Web & APIs to mobile devices with Firefox OS - Geek Meet