Web APIs & Apps - Mozilla

116
WebAPIs & Apps FIREFOX OS

Transcript of Web APIs & Apps - Mozilla

Page 1: Web APIs & Apps - Mozilla

WebAPIs & AppsFIREFOX OS

Page 2: Web APIs & Apps - Mozilla
Page 6: Web APIs & Apps - Mozilla
Page 8: Web APIs & Apps - Mozilla

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

Page 12: Web APIs & Apps - Mozilla

Open Web Apps

Page 13: Web APIs & Apps - Mozilla

Web apps are apps built using standard Web technologies. They work in any modern Web browser.

The Open Web apps project proposes some small additions to existing sites to turn them into apps.

These apps run on desktop browsers and mobile devices.

Page 16: Web APIs & Apps - Mozilla

Steps to Take

Page 17: Web APIs & Apps - Mozilla
Page 18: Web APIs & Apps - Mozilla

Develop Web App using HTML5, CSS, & Javascript1.

Create an app manifest file2.

Publish/install the app3.

Page 19: Web APIs & Apps - Mozilla

1. Develop Web App using HTML5, CSS & JavaScript

Page 20: Web APIs & Apps - Mozilla

Reuse any existing web site/app or develop from scratch with open web standards.

Utilize HTML5 features such as localStorage, offline manifest, IndexedDB and access Web APIs for more options.

Responsive web design for adapting to varying resolutions and screen orientation.

Page 21: Web APIs & Apps - Mozilla
Page 22: Web APIs & Apps - Mozilla

2. Create an app manifest file

Page 23: Web APIs & Apps - Mozilla

Create a file with a .webapp extension

Page 24: Web APIs & Apps - Mozilla

{ "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 26: Web APIs & Apps - Mozilla

Serve with Content-type/MIME type:

application/x-web-app-manifest+json

Page 27: Web APIs & Apps - Mozilla

Apache - in mime.types:

application/x-web-app-manifest+json webapp

Apache - in .htaccess:

AddType application/x-web-app-manifest+json webapp

NGinx - in mime.types:

types { text/html html htm shtml; text/css css; text/xml xml; application/x-web-app-manifest+json webapp;}

Page 28: Web APIs & Apps - Mozilla

IIS:

In IIS Manager, right-click the local computer, and click Properties.

Click the MIME Types button.

Click New.

In the Extension box, type the file name extension.

In the MIME type box, type a description that exactly matches the file type defined on the computer.

Click OK.

Page 29: Web APIs & Apps - Mozilla

curl -I http://mozillalabs.com/manifest.webapp

Page 30: Web APIs & Apps - Mozilla

3. Publish/install the app

Page 31: Web APIs & Apps - Mozilla

Firefox Marketplace

Page 34: Web APIs & Apps - Mozilla

Installing/hosting the app

Page 35: Web APIs & Apps - Mozilla

var request = navigator.mozApps.install( "http://mozillalabs.com/MozillaBall.webapp", { user_id: "some_user" });

request.onsuccess = function() { // Success! Notification, launch page etc}

request.onerror = function() { // Failed. this.error.name has details}

Page 36: Web APIs & Apps - Mozilla

var request = navigator.mozApps.installPackage( "http://mozillalabs.com/manifest.webapp");

request.onsuccess = function() { // Success!}

request.onerror = function() { // Failed.}

Page 37: Web APIs & Apps - Mozilla

Packaged vs. Hosted Apps

Page 38: Web APIs & Apps - Mozilla

A packaged app is an Open Web App that has all of its resources (HTML, CSS, JavaScript, app manifest, and so on) contained in a zip

file, instead of having its resources on a Web server.

A packaged app is simply a zip file with the app manifest in its root directory. The manifest must be named manifest.webapp.

Page 39: Web APIs & Apps - Mozilla

Can be privileged apps with more API access than hosted apps

Special protocol internal to the zip file: app://<uuid>

Manifest file must be named manifest.webapp

Resources are accessed from the zip file, which is stored on the device where the app is installed

Installed with a different mozApps API function: installPackage()

Enforce a specific Content Security Policy for all application content

Can embed remote content in iframes, but that content will not have access to privileged APIs nor will it have the default CSP applied to it

Have an update process for getting new versions of the app to users. Hosted apps do not need this process.

Page 41: Web APIs & Apps - Mozilla

WebAPIs

Page 42: Web APIs & Apps - Mozilla

The Mozilla WebAPI team is pushing the envelope of the web to include --- and in places exceed --- the capabilities of competing stacks.

Page 44: Web APIs & Apps - Mozilla

Security Levels

Page 45: Web APIs & Apps - Mozilla

Granted by default

Safe web APIs that don’t expose privacy sensitive data. WebGL, fullscreen, audio, etc.

Granted by user

location, camera, file system access

Granted when installed

No quota for localStorage, IndexedDB, offline cache

Granted by authorized store

Privacy and security sensitive APIs such as Contacts API

Verified by signature

Highly privileged APIs such as radio access (dialer)

Page 46: Web APIs & Apps - Mozilla

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 48: Web APIs & Apps - Mozilla

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

Page 49: Web APIs & Apps - Mozilla

AlarmAPI

BrowserAPI

Contacts

device-storage:music/device-storage:videos/device-storage:pictures/device-storage:sdcard:

Add, read, or modify files stored at a central location on the device. access property required: one of readonly, readwrite, readcreate, or createonly.

FMRadio

geolocation

systemXHR

TCP Socket API

wake-lock-screen

NEED PERMISSION

Page 51: Web APIs & Apps - Mozilla

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 52: Web APIs & Apps - Mozilla

BATTERY STATUS API

Page 53: Web APIs & Apps - Mozilla

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 54: Web APIs & Apps - Mozilla

NOTIFICATION

Page 55: Web APIs & Apps - Mozilla

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

Page 56: Web APIs & Apps - Mozilla

SCREENORIENTATION API

Page 57: Web APIs & Apps - Mozilla

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

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

Page 58: Web APIs & Apps - Mozilla

WEB ACTIVITIES

Page 59: Web APIs & Apps - Mozilla

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

Page 60: Web APIs & Apps - Mozilla

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: Web APIs & Apps - Mozilla

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

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

Page 62: Web APIs & Apps - Mozilla

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: Web APIs & Apps - Mozilla

VIBRATION API

Page 64: Web APIs & Apps - Mozilla

// 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 65: Web APIs & Apps - Mozilla

WEB PAYMENTS

Page 66: Web APIs & Apps - Mozilla

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

Page 67: Web APIs & Apps - Mozilla
Page 68: Web APIs & Apps - Mozilla

NETWORK INFORMATION API

Page 69: Web APIs & Apps - Mozilla

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

Page 70: Web APIs & Apps - Mozilla

ALARM API

Page 71: Web APIs & Apps - Mozilla

var alarmId1, request = navigator.mozAlarms.add( new Date("May 15, 2012 16:20:00"), "honorTimezone", { mydata: "my event" } ); request.onsuccess = function (event) { alarmId1 = event.target.result;};

request.onerror = function (event) { console.log(event.target.error.name);};

Page 72: Web APIs & Apps - Mozilla

var request = navigator.mozAlarms.getAll();

request.onsuccess = function (event) { console.log(JSON.stringify(event.target.result));};

request.onerror = function (event) { console.log(event.target.error.name);};

Page 73: Web APIs & Apps - Mozilla

navigator.mozAlarms.remove(alarmId1);

Page 74: Web APIs & Apps - Mozilla

navigator.mozSetMessageHandler( "alarm", function (message) { // Note: message has to be set in the manifest file console.log("Alarm fired: " + JSON.stringify(message)); });

Page 75: Web APIs & Apps - Mozilla

{ "messages": ["alarm"]}

Page 76: Web APIs & Apps - Mozilla

DEVICEPROXIMITY

Page 77: Web APIs & Apps - Mozilla

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 78: Web APIs & Apps - Mozilla

AMBIENT LIGHT EVENTS

Page 79: Web APIs & Apps - Mozilla

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

Page 80: Web APIs & Apps - Mozilla

window.addEventListener("lightlevel", function (event) { // Possible values: "normal", "bright", "dim" console.log(event.value);});

Page 81: Web APIs & Apps - Mozilla

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 82: Web APIs & Apps - Mozilla

Device Storage API

Browser API

TCP Socket API

Contacts API

systemXHR

PRIVILEGED APIS

Page 83: Web APIs & Apps - Mozilla

DEVICE STORAGE API

Page 84: Web APIs & Apps - Mozilla

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

Page 85: Web APIs & Apps - Mozilla

// "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 86: Web APIs & Apps - Mozilla

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 87: Web APIs & Apps - Mozilla

CONTACTS API

Page 88: Web APIs & Apps - Mozilla

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 89: Web APIs & Apps - Mozilla

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 90: Web APIs & Apps - Mozilla

WEBTELEPHONY

Page 91: Web APIs & Apps - Mozilla

// 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 92: Web APIs & Apps - Mozilla

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

Page 93: Web APIs & Apps - Mozilla

// Events for that callcall.onstatechange = function (event) { /* Possible values for state: "dialing", "ringing", "busy", "connecting", "connected", "disconnecting", "disconnected", "incoming" */ console.log(event.state);};

// Above options as direct eventscall.onconnected = function () { // Call was connected};

call.ondisconnected = function () { // Call was disconnected};

Page 94: Web APIs & Apps - Mozilla

// 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 95: Web APIs & Apps - Mozilla

WEBSMS

Page 96: Web APIs & Apps - Mozilla

// SMS objectvar sms = navigator.mozSMS;

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

Page 97: Web APIs & Apps - Mozilla

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

Page 98: Web APIs & Apps - Mozilla

SETTINGS API

Page 99: Web APIs & Apps - Mozilla

var settings = navigator.mozSettings;settings.getLock().set({"background": "pretty.png"});

Page 100: Web APIs & Apps - Mozilla
Page 101: Web APIs & Apps - Mozilla

Future APIs

Page 102: Web APIs & Apps - Mozilla
Page 103: Web APIs & Apps - Mozilla

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 104: Web APIs & Apps - Mozilla

Web Apps from Mozilla

Page 105: Web APIs & Apps - Mozilla
Page 106: Web APIs & Apps - Mozilla

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 108: Web APIs & Apps - Mozilla

Getting help

Page 109: Web APIs & Apps - Mozilla
Page 110: Web APIs & Apps - Mozilla

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

Page 112: Web APIs & Apps - Mozilla

Trying things out

Page 113: Web APIs & Apps - Mozilla
Page 114: Web APIs & Apps - Mozilla