SlideShare una empresa de Scribd logo
1 de 67
Descargar para leer sin conexión
(Mobile) Device APIs
          James Pearce
         @jamespearce
     http://tripleodeon.com
What are Device APIs?
 “Client-side APIs that enable the
 development of Web Applications that
 interact with device hardware”


 ...and other capabilities outside of the
 browser’s traditional remit
Why are they important?
• They’re not...
    ...if you’re happy with a web of documents


• They are...
    ... if you want the the web to be
        competitive with native app platforms
History
Current Work
 Use Cases
WTAI Make Call
<a	
  href="wtai://wp/mc;16505551234">
	
  	
  Call	
  us
</a>

<a	
  href="call.wmls#makeCall()">
	
  	
  Call	
  us
</a>

//	
  call.wmls
extern	
  function	
  makeCall()	
  {
	
  	
  WTAPublic.makeCall("16505551234");
}
                       http://www.wapforum.org/what/technical/wtai-30-apr-98.pdf
WTAI Call Control
<a	
  href="calls.wmls#setupCall()">Call	
  us!</a>
<a	
  href="calls.wmls#acceptCall()">Brring!</a>

<a	
  href="wtai://cc/sd;1*2*3456">Enter	
  code</a>

//	
  calls.wmls
extern	
  function	
  setupCall()	
  {
	
  	
  WTACallCont.setup("16505551234",	
  1);
}
extern	
  function	
  acceptCall()	
  {
	
  	
  WTACallCont.accept("1",	
  1);
}
WTAI Messaging
//	
  sms.wmls
extern	
  function	
  sendMsg()	
  {
	
  	
  WTANetText.send("16505551234",	
  "WML	
  rocks");
}

extern	
  function	
  readMsg(i)	
  {
	
  	
  var	
  sms	
  =	
  WTANetText.read(i);
	
  	
  return	
  WTANetText.getFieldValue(
	
  	
  	
  	
  sms,	
  "body"
	
  	
  );
}
WTAI Contacts
//	
  contacts.wmls
extern	
  function	
  addFriend(i,	
  num,	
  name)	
  {
	
  	
  WTAPhoneBook.write(i,	
  num,	
  name);
}

//	
  return	
  structs	
  of	
  contact	
  details
extern	
  function	
  getFriendById(i)	
  {
	
  	
  return	
  WTAPhoneBook.read("i",	
  i);
}
extern	
  function	
  getFriendByName(name)	
  {
	
  	
  return	
  WTAPhoneBook.read("t",	
  name);
}
I may be laboring the point
 But that was 1998...


 ... and you still can’t do any of this with a
 contemporary mobile browser
BONDI
“enables web based content to access native
device capability, intermediated through a
robust, but flexible security framework”




                                http://www.omtp.org/1.11
Messaging
var	
  sms	
  =	
  bondi.messaging.createSMS({
	
  	
  to:	
  ["16505551234"],
	
  	
  body:	
  "Home	
  soon"
});

var	
  mms	
  =	
  bondi.messaging.createMMS({
	
  	
  to:	
  ["16505551234"],
	
  	
  subject:	
  "I	
  will	
  be...",
	
  	
  body:	
  "...home	
  soon"
});
Messaging
bondi.messaging.sendSMS(
	
  	
  function	
  ()	
  {},	
  //	
  success
	
  	
  function	
  ()	
  {},	
  //	
  error
	
  	
  sms,	
  true
);

bondi.messaging.sendMMS(
	
  	
  function	
  ()	
  {},	
  //	
  success
	
  	
  function	
  ()	
  {},	
  //	
  error
	
  	
  mms,	
  true
);
Messaging
bondi.messaging.subscribeToSMS(
	
  	
  function	
  ()	
  {},	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  //	
  success
	
  	
  function	
  ()	
  {},	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  //	
  error
	
  	
  function	
  ()	
  {	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  //	
  listener
	
  	
  	
  	
  alert("They	
  replied!");
	
  	
  },	
  {	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  from:	
  "16505551234"	
  	
  	
  	
  	
  //	
  filter
	
  	
  },
	
  	
  true	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  //	
  exclusive
);
Contacts
bondi.pim.contact.getAddressBooks(
	
  	
  function(books)	
  {	
  //	
  success
	
  	
  	
  	
  var	
  contact	
  =	
  books[0].createContact({
	
  	
  	
  	
  	
  	
  name:	
  'James	
  Pearce',
	
  	
  	
  	
  	
  	
  emails:	
  [{email:'j@tripleodeon.com'}],
	
  	
  	
  	
  	
  	
  phoneNumbers:	
  [{number:'16505551234'}]
	
  	
  	
  	
  });
	
  	
  },	
  
	
  	
  function	
  ()	
  {}	
  	
  	
  	
  //	
  error
);
Telephony
bondi.telephonyLog.findLogEntries(
	
  	
  function	
  ()	
  {},	
  //	
  success
	
  	
  function	
  ()	
  {},	
  //	
  error,
	
  	
  [
	
  	
  	
  	
  bondi.telephonyLog.MISSED_CALLS_FOLDER,
	
  	
  	
  	
  bondi.telephonyLog.RECEIVED_CALLS_FOLDER
	
  	
  ],
	
  	
  {
	
  	
  	
  	
  phoneNumber:	
  "16505551234"
	
  	
  }
);

                           * Yes, it’s true: you can’t actually make or receive calls
App Launcher
bondi.applauncher.launchApplication(
	
  	
  function	
  ()	
  {},	
  //	
  success
	
  	
  function	
  ()	
  {},	
  //	
  error
	
  	
  "tel:16505551234"
);

//	
  mailto:...
//	
  sms:...
//	
  file:...
On one hand...
• Security-conscious architecture
• Comprehensive API support
• Consistent API patterns
• Conformance specifications
• Reasonable test coverage

                               http://www.omtp.org/1.11/apis
On the other...
bondi.*

deviceapis.*
WAC 2.0
• Accelerometer        • File system
• Calendar             • Geolocation
• Camera               • Messaging
• Contacts             • Orientation
• Core                 • Tasks
• Device interaction   • Viewport
• Device status        • Webview
                                http://specs.wacapps.net/
Which is all awesome
 Except...
Device APIs Working Group
 “to create client-side APIs that enable the
 development of Web Applications and Web
 Widgets that interact with devices services
 such as Calendar, Contacts, Camera, etc”


 Joint efforts with WebRTC Working Group,
 WebApps Working Group

                                http://www.w3.org/2009/dap/
W3C Device APIs
• Media Capture(HTML)
                        • Vibration
• Media Capture(gUM)
                        • Calendar
• Contact               • Permissions
• Messaging             • Menu
• Battery Status        • Gallery
• Network Information   • System info
• Sensor                • Media Stream
Media Capture (HTML)
<input	
  type="file"	
  accept="image/*"	
  />

<!-­‐-­‐	
  

	
  	
  The	
  accept	
  attribute	
  is	
  'a	
  hint'.

	
  	
  Specification	
  suggests	
  that	
  it	
  can	
  be
	
  	
  used	
  to	
  offer	
  alternative	
  picker	
  UIs.

-­‐-­‐>



               Public working draft, http://www.w3.org/TR/2011/WD-html-media-capture-20110414
Brad Lassey, September 2008
Media Capture (HTML)
<input	
  type="file"	
  accept="image/*"
	
  	
  capture="camera"
/>

<!-­‐-­‐	
  

	
  	
  Again,	
  a	
  hint.	
  Valid	
  options	
  are:

	
  	
  	
  	
  camera,	
  camcorder,	
  microphone,	
  filesystem

-­‐-­‐>
Media Capture (HTML)
<input	
  type="file"	
  accept="image/*"
	
  	
  capture="camera"	
  id="photo"
/>

var	
  photo	
  =	
  document.getElementById('photo');
photo.files[0].getFormatData(
	
  	
  function	
  (data)	
  {},	
  //	
  success
	
  	
  function	
  ()	
  {}	
  	
  	
  	
  	
  	
  //	
  error
);

//	
  file	
  is	
  a	
  MediaFile,	
  extending	
  File
//	
  data	
  is	
  a	
  MediaFileData
MediaFileData
interface	
  MediaFileData	
  {
	
  	
  	
  	
  attribute	
  DOMString	
  	
  	
  	
  	
  codecs;
	
  	
  	
  	
  attribute	
  unsigned	
  long	
  bitrate;
	
  	
  	
  	
  attribute	
  unsigned	
  long	
  height;
	
  	
  	
  	
  attribute	
  unsigned	
  long	
  width;
	
  	
  	
  	
  attribute	
  float	
  	
  	
  	
  	
  	
  	
  	
  	
  duration;
};




                                                                    ...seems to be under discussion
Media capture (gUM)
navigator.getUserMedia(
	
  	
  {
	
  	
  	
  	
  audio:	
  true,
	
  	
  	
  	
  video:	
  false
	
  	
  },
	
  	
  function	
  (stream)	
  {},	
  //	
  success
	
  	
  function	
  ()	
  {}	
  	
  	
  	
  	
  	
  	
  	
  //	
  error
);

//	
  stream	
  is	
  a	
  LocalMediaStream



                               Editor's draft, http://dev.w3.org/2011/webrtc/editor/getusermedia.html
LocalMediaStream
var	
  recorder	
  =	
  stream.record();

//	
  recorder	
  is	
  a	
  MediaStreamRecorder

recorder.getRecordedData(
	
  	
  function	
  (file)	
  {}	
  	
  //	
  success
);

//	
  file	
  is	
  a	
  File

URL.createObjectURL(stream);

//	
  a	
  Blob	
  URI	
  for,	
  say	
  <video	
  src='...'	
  />	
  	
  
Messaging
navigator.sendMessage(
	
  	
  "sms:16505551234?"	
  +
	
  	
  	
  	
  "body=JavaScript%20says%20hi",	
  
	
  	
  [],	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  //	
  attachments	
  as	
  File	
  array
	
  	
  function	
  ()	
  {},	
  //	
  success
	
  	
  function	
  ()	
  {}	
  	
  //	
  error
);

//	
  also	
  mms:	
  and	
  mailto:

//	
  oh...	
  were	
  you	
  looking	
  for	
  receipt?

                                                  Editor's draft, http://dev.w3.org/2009/dap/messaging/
Sensors
navigator.findSensors().onsuccess	
  =	
  function()	
  {
	
  	
  this.result.forEach(function	
  (sensor)	
  {
	
  	
  	
  	
  //	
  ...
	
  	
  });
};

var	
  sensor	
  =	
  new	
  SensorConnection('Temperature');
sensor.addEventListener('sensordata',	
  function(e)	
  {
	
  	
  if(e.data	
  >	
  20.0)	
  {
	
  	
  	
  	
  window.console.log('Hawt');
	
  	
  }
});
sensor.startWatch({	
  interval:	
  2000	
  });
                    Editor's draft, http://dev.w3.org/2009/dap/system-info/Sensors.html
Sensors
• Temperature, ºC
• AmbientLight, Lux
• AmbientNoise, dbA
• MagneticField, uTesla
• Proximity, cm
• AtmPressure, kP
• RelHumidity, %
Contacts
navigator.contacts.find(
	
  	
  [	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  //	
  fields
	
  	
  	
  	
  'name',	
  
	
  	
  	
  	
  'emails'
	
  	
  ],	
  
	
  	
  function	
  (contacts)	
  {},	
  //	
  success
	
  	
  function	
  ()	
  {},	
  	
  	
  	
  	
  	
  	
  	
  	
  //	
  error
	
  	
  {	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  //	
  find	
  options
	
  	
  	
  	
  	
  filter:	
  'James',	
  
	
  	
  	
  	
  	
  multiple:	
  true
	
  	
  }
);
                                                                            Editor's draft, http://w3c-test.org/dap/contacts/
Contact
interface	
  Contact	
  {
	
  	
  	
  	
  readonly	
  attribute	
  DOMString	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  id;
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  attribute	
  DOMString?	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  displayName;
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  attribute	
  ContactName?	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  name;
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  attribute	
  DOMString?	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  nickname;
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  attribute	
  ContactField[]?	
  	
  	
  	
  	
  	
  	
  	
  	
  phoneNumbers;
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  attribute	
  ContactField[]?	
  	
  	
  	
  	
  	
  	
  	
  	
  emails;
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  attribute	
  ContactAddress[]?	
  	
  	
  	
  	
  	
  	
  addresses;
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  attribute	
  ContactField[]?	
  	
  	
  	
  	
  	
  	
  	
  	
  ims;
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  attribute	
  ContactOrganization[]?	
  	
  organizations;
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  attribute	
  Date?	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  birthday;
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  attribute	
  DOMString?	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  note;
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  attribute	
  ContactField[]?	
  	
  	
  	
  	
  	
  	
  	
  	
  photos;
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  attribute	
  DOMString[]?	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  categories;
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  attribute	
  ContactField[]?	
  	
  	
  	
  	
  	
  	
  	
  	
  urls;
};
Cool, but...
 “The ability to add and update contact
 information is not a function of the API
 provided in this specification.”
Holy Contacts Editing WTF
var	
  vcard	
  =	
  
	
  	
  'BEGIN:VCARDrn'	
  +
	
  	
  'VERSION:3.0rn'	
  +
	
  	
  'UID:'	
  +	
  contact.id	
  +	
  'rn'	
  +	
  	
  	
  
	
  	
  'N:Pearce;Jamesrn'	
  +
	
  	
  'FN:James	
  Pearcern'	
  +
	
  	
  'END:VCARD';

document.getElementById('vcard').href	
  =
	
  	
  'data:text/x-­‐vcard;charset=utf-­‐8,'	
  +
	
  	
  encodeURIComponent(vcard);	
  
WebAPI
 “We are aiming at providing all the necessary
 APIs to build a basic HTML5 phone
 experience within the next 3-6 months”




                               https://wiki.mozilla.org/WebAPI
WebAPI
• Telephony   • Embedded browser
• Messaging   • Battery
• Contacts    • Device Status
• Camera      • Settings
• Network     • Mouse Lock
• USB         • Vibrator
Hopefully W3C++
• “Our proposal might or might not look like
  it for the moment”
Telephony!
var	
  tcall	
  =
	
  	
  navigator.telephony.dial("16505551234");

tcall.readyState;
	
  	
  //	
  dialing,	
  ringing,	
  busy,	
  connecting,
	
  	
  //	
  connected,	
  disconnecting,	
  disconnected,	
  
	
  	
  //	
  incoming

tcall.onconnected	
  =	
  function	
  ()	
  {};
	
  	
  //	
  onbusy,	
  ondisconnected	
  etc

tcall2.answer();
                             http://www.youtube.com/watch?v=RuIQskGD3u0#t=19s
Contacts
 “We need read/write”
USB
var	
  usb	
  =	
  new	
  MozUSBManager();

usb.addEventListener("attachdevice",	
  
	
  	
  function	
  ()	
  {}
);
usb.addEventListener("detachdevice",	
  
	
  	
  function	
  ()	
  {}
);

usb.claimDevice({
	
  	
  deviceClass:	
  ...,
	
  	
  deviceSubClass:	
  ...
});
We deserve Device APIs...
• As forward-looking as WTAI
• As well-structured as BONDI
• As comprehensive as WAC
• As respectable as W3C DAP
• As agile as WebAPI
And we’ve got...
PhoneGap
• Accelerometer   • Events
• Camera          • File
• Capture         • Geolocation
• Compass         • Media
• Connection      • Notification
• Contacts        • Storage
• Device
Use Cases
Useless Demos




                https://github.com/jamesgpearce/compios5
Fixing layout bugs, FML
window.addEventListener("deviceorientation",
	
  	
  function	
  (e)	
  {
	
  	
  	
  	
  orientation	
  =	
  Math.abs(w.orientation);
	
  	
  	
  	
  rotation	
  =	
  Math.abs(e.gamma);
	
  	
  	
  	
  if	
  (rotation	
  >	
  8	
  &&	
  orientation	
  ===	
  0)	
  {
	
  	
  	
  	
  	
  	
  if	
  (enabled)	
  {
	
  	
  	
  	
  	
  	
  	
  	
  disableZoom();
	
  	
  	
  	
  	
  	
  }	
  else	
  {
	
  	
  	
  	
  	
  	
  	
  	
  restoreZoom();
	
  	
  	
  	
  	
  	
  }
	
  	
  	
  	
  }
	
  	
  },	
  false
);                                                         http://vimeo.com/adactio/iosbug
                                          https://github.com/scottjehl/iOS-Orientationchange-Fix
Camera
• Profile pictures
• Review sites
• Photo sharing
• Recognition
 • Bar-codes
 • Text
 • Faces
Filters!
$('img').vintage({
	
  	
  vignette:	
  {
	
  	
  	
  	
  black:	
  0.8,
	
  	
  	
  	
  white:	
  0.2
	
  	
  },
	
  	
  noise:	
  20,
	
  	
  screen:	
  {
	
  	
  	
  	
  red:	
  12,
	
  	
  	
  	
  ...
	
  	
  },
	
  	
  desaturate:	
  0.05
});
                                 https://github.com/rendro/vintageJS
Augmented reality?




                     http://fhtr.org/JSARToolKit/
Contacts & calendaring
• Add business details to address book
• Web-based messaging
• Facial recognition again...
• Presence
• Context-sensitivity of content
Messaging
• Sharing
• Notifications
• Offline transport fallback
• Frictionless web sign-on
Expect more
I still want...
 • Audio processing
 • Bluetooth
 • RFID & NFC
 • Both cameras
 • Memory & power
 • Native recognition
window.addEventListener(
	
  	
  'appointmentdue',
	
  	
  function(appt)	
  {
	
  	
  	
  	
  if	
  (device.near(WORK))	
  {
	
  	
  	
  	
  	
  	
  siri.remind(
	
  	
  	
  	
  	
  	
  	
  	
  contacts.get('Peter'),
	
  	
  	
  	
  	
  	
  	
  	
  calendar.getDetails(appt)
	
  	
  	
  	
  	
  	
  );
	
  	
  	
  	
  }
	
  	
  },
	
  	
  false
);
                                                            PS: does not work
James Pearce
    @jamespearce
http://tripleodeon.com

Más contenido relacionado

La actualidad más candente

Phing for power users - dpc_uncon13
Phing for power users - dpc_uncon13Phing for power users - dpc_uncon13
Phing for power users - dpc_uncon13
Stephan Hochdörfer
 
Real World Dependency Injection - oscon13
Real World Dependency Injection - oscon13Real World Dependency Injection - oscon13
Real World Dependency Injection - oscon13
Stephan Hochdörfer
 
Satellite Apps around the Cloud: Integrating your infrastructure with JIRA St...
Satellite Apps around the Cloud: Integrating your infrastructure with JIRA St...Satellite Apps around the Cloud: Integrating your infrastructure with JIRA St...
Satellite Apps around the Cloud: Integrating your infrastructure with JIRA St...
Atlassian
 

La actualidad más candente (19)

Intoduction to Play Framework
Intoduction to Play FrameworkIntoduction to Play Framework
Intoduction to Play Framework
 
Phing for power users - dpc_uncon13
Phing for power users - dpc_uncon13Phing for power users - dpc_uncon13
Phing for power users - dpc_uncon13
 
Implementing Comet using PHP
Implementing Comet using PHPImplementing Comet using PHP
Implementing Comet using PHP
 
Python Code Camp for Professionals 1/4
Python Code Camp for Professionals 1/4Python Code Camp for Professionals 1/4
Python Code Camp for Professionals 1/4
 
Using Websockets with Play!
Using Websockets with Play!Using Websockets with Play!
Using Websockets with Play!
 
Real World Dependency Injection - oscon13
Real World Dependency Injection - oscon13Real World Dependency Injection - oscon13
Real World Dependency Injection - oscon13
 
APIdays Helsinki 2019 - Specification-Driven Development of REST APIs with Al...
APIdays Helsinki 2019 - Specification-Driven Development of REST APIs with Al...APIdays Helsinki 2019 - Specification-Driven Development of REST APIs with Al...
APIdays Helsinki 2019 - Specification-Driven Development of REST APIs with Al...
 
Python: the coolest is yet to come
Python: the coolest is yet to comePython: the coolest is yet to come
Python: the coolest is yet to come
 
Python Code Camp for Professionals 2/4
Python Code Camp for Professionals 2/4Python Code Camp for Professionals 2/4
Python Code Camp for Professionals 2/4
 
APIdays Helsinki 2019 - API Versioning with REST, JSON and Swagger with Thoma...
APIdays Helsinki 2019 - API Versioning with REST, JSON and Swagger with Thoma...APIdays Helsinki 2019 - API Versioning with REST, JSON and Swagger with Thoma...
APIdays Helsinki 2019 - API Versioning with REST, JSON and Swagger with Thoma...
 
Satellite Apps around the Cloud: Integrating your infrastructure with JIRA St...
Satellite Apps around the Cloud: Integrating your infrastructure with JIRA St...Satellite Apps around the Cloud: Integrating your infrastructure with JIRA St...
Satellite Apps around the Cloud: Integrating your infrastructure with JIRA St...
 
Teaching Your WAF New Tricks
Teaching Your WAF New TricksTeaching Your WAF New Tricks
Teaching Your WAF New Tricks
 
Vuejs testing
Vuejs testingVuejs testing
Vuejs testing
 
SocketStream
SocketStreamSocketStream
SocketStream
 
Symfony tips and tricks
Symfony tips and tricksSymfony tips and tricks
Symfony tips and tricks
 
Python Code Camp for Professionals 4/4
Python Code Camp for Professionals 4/4Python Code Camp for Professionals 4/4
Python Code Camp for Professionals 4/4
 
Python Code Camp for Professionals 3/4
Python Code Camp for Professionals 3/4Python Code Camp for Professionals 3/4
Python Code Camp for Professionals 3/4
 
DevOps and Chef
DevOps and ChefDevOps and Chef
DevOps and Chef
 
OSCON Google App Engine Codelab - July 2010
OSCON Google App Engine Codelab - July 2010OSCON Google App Engine Codelab - July 2010
OSCON Google App Engine Codelab - July 2010
 

Similar a Mobile Device APIs

Bringing the open web and APIs to mobile devices with Firefox OS - Whisky W...
 	Bringing the open web and APIs to mobile devices with Firefox OS - Whisky W... 	Bringing the open web and APIs to mobile devices with Firefox OS - Whisky W...
Bringing the open web and APIs to mobile devices with Firefox OS - Whisky W...
Robert Nyman
 
WebRTC & Firefox OS - presentation at Google
WebRTC & Firefox OS - presentation at GoogleWebRTC & Firefox OS - presentation at Google
WebRTC & Firefox OS - presentation at Google
Robert Nyman
 
Web APIs & Apps - Mozilla
Web APIs & Apps - MozillaWeb APIs & Apps - Mozilla
Web APIs & Apps - Mozilla
Robert Nyman
 
WebAPIs & Apps - Mozilla London
WebAPIs & Apps - Mozilla LondonWebAPIs & Apps - Mozilla London
WebAPIs & Apps - Mozilla London
Robert Nyman
 
JavaScript APIs - The Web is the Platform
JavaScript APIs - The Web is the PlatformJavaScript APIs - The Web is the Platform
JavaScript APIs - The Web is the Platform
Robert Nyman
 
Fixing the mobile web - Internet World Romania
Fixing the mobile web - Internet World RomaniaFixing the mobile web - Internet World Romania
Fixing the mobile web - Internet World Romania
Christian Heilmann
 
Mozilla, Firefox OS and the Open Web
Mozilla, Firefox OS and the Open WebMozilla, Firefox OS and the Open Web
Mozilla, Firefox OS and the Open Web
Robert Nyman
 
Empowering the "mobile web"
Empowering the "mobile web"Empowering the "mobile web"
Empowering the "mobile web"
Chris Mills
 
Firefox OS Introduction at Bontouch
Firefox OS Introduction at BontouchFirefox OS Introduction at Bontouch
Firefox OS Introduction at Bontouch
Robert Nyman
 

Similar a Mobile Device APIs (20)

Web versus Native: round 1!
Web versus Native: round 1!Web versus Native: round 1!
Web versus Native: round 1!
 
HTML5 on Mobile
HTML5 on MobileHTML5 on Mobile
HTML5 on Mobile
 
Intro To webOS
Intro To webOSIntro To webOS
Intro To webOS
 
Bringing the open web and APIs to mobile devices with Firefox OS - Whisky W...
 	Bringing the open web and APIs to mobile devices with Firefox OS - Whisky W... 	Bringing the open web and APIs to mobile devices with Firefox OS - Whisky W...
Bringing the open web and APIs to mobile devices with Firefox OS - Whisky W...
 
WebRTC & Firefox OS - presentation at Google
WebRTC & Firefox OS - presentation at GoogleWebRTC & Firefox OS - presentation at Google
WebRTC & Firefox OS - presentation at Google
 
HTML5 WebWorks
HTML5 WebWorksHTML5 WebWorks
HTML5 WebWorks
 
APIs, now and in the future
APIs, now and in the futureAPIs, now and in the future
APIs, now and in the future
 
Web APIs & Apps - Mozilla
Web APIs & Apps - MozillaWeb APIs & Apps - Mozilla
Web APIs & Apps - Mozilla
 
HTML5 for Rich User Experience
HTML5 for Rich User ExperienceHTML5 for Rich User Experience
HTML5 for Rich User Experience
 
WebAPIs & Apps - Mozilla London
WebAPIs & Apps - Mozilla LondonWebAPIs & Apps - Mozilla London
WebAPIs & Apps - Mozilla London
 
Always on! Or not?
Always on! Or not?Always on! Or not?
Always on! Or not?
 
JavaScript APIs - The Web is the Platform
JavaScript APIs - The Web is the PlatformJavaScript APIs - The Web is the Platform
JavaScript APIs - The Web is the Platform
 
CTS Conference Web 2.0 Tutorial Part 2
CTS Conference Web 2.0 Tutorial Part 2CTS Conference Web 2.0 Tutorial Part 2
CTS Conference Web 2.0 Tutorial Part 2
 
Fixing the mobile web - Internet World Romania
Fixing the mobile web - Internet World RomaniaFixing the mobile web - Internet World Romania
Fixing the mobile web - Internet World Romania
 
Mozilla, Firefox OS and the Open Web
Mozilla, Firefox OS and the Open WebMozilla, Firefox OS and the Open Web
Mozilla, Firefox OS and the Open Web
 
Empowering the “Mobile Web” with Chris Mills
Empowering the “Mobile Web” with Chris MillsEmpowering the “Mobile Web” with Chris Mills
Empowering the “Mobile Web” with Chris Mills
 
Empowering the Mobile Web - Mills
Empowering the Mobile Web - MillsEmpowering the Mobile Web - Mills
Empowering the Mobile Web - Mills
 
Empowering the "mobile web"
Empowering the "mobile web"Empowering the "mobile web"
Empowering the "mobile web"
 
Html5
Html5Html5
Html5
 
Firefox OS Introduction at Bontouch
Firefox OS Introduction at BontouchFirefox OS Introduction at Bontouch
Firefox OS Introduction at Bontouch
 

Más de James Pearce

The City Bars App with Sencha Touch 2
The City Bars App with Sencha Touch 2The City Bars App with Sencha Touch 2
The City Bars App with Sencha Touch 2
James Pearce
 
An Intro to Mobile HTML5
An Intro to Mobile HTML5An Intro to Mobile HTML5
An Intro to Mobile HTML5
James Pearce
 
HTML5 and the dawn of rich mobile web applications pt 1
HTML5 and the dawn of rich mobile web applications pt 1HTML5 and the dawn of rich mobile web applications pt 1
HTML5 and the dawn of rich mobile web applications pt 1
James Pearce
 
HTML5 and the dawn of rich mobile web applications pt 2
HTML5 and the dawn of rich mobile web applications pt 2HTML5 and the dawn of rich mobile web applications pt 2
HTML5 and the dawn of rich mobile web applications pt 2
James Pearce
 
Building a Mobile App with Sencha Touch
Building a Mobile App with Sencha TouchBuilding a Mobile App with Sencha Touch
Building a Mobile App with Sencha Touch
James Pearce
 
Create a mobile web app with Sencha Touch
Create a mobile web app with Sencha TouchCreate a mobile web app with Sencha Touch
Create a mobile web app with Sencha Touch
James Pearce
 
Cross platform mobile web apps
Cross platform mobile web appsCross platform mobile web apps
Cross platform mobile web apps
James Pearce
 
Bd conf sencha touch workshop
Bd conf sencha touch workshopBd conf sencha touch workshop
Bd conf sencha touch workshop
James Pearce
 
Building cross platform mobile web apps
Building cross platform mobile web appsBuilding cross platform mobile web apps
Building cross platform mobile web apps
James Pearce
 

Más de James Pearce (20)

The City Bars App with Sencha Touch 2
The City Bars App with Sencha Touch 2The City Bars App with Sencha Touch 2
The City Bars App with Sencha Touch 2
 
An Intro to Mobile HTML5
An Intro to Mobile HTML5An Intro to Mobile HTML5
An Intro to Mobile HTML5
 
A Snapshot of the Mobile HTML5 Revolution
A Snapshot of the Mobile HTML5 RevolutionA Snapshot of the Mobile HTML5 Revolution
A Snapshot of the Mobile HTML5 Revolution
 
A mobile web app for Android in 75 minutes
A mobile web app for Android in 75 minutesA mobile web app for Android in 75 minutes
A mobile web app for Android in 75 minutes
 
HTML5 and the dawn of rich mobile web applications pt 1
HTML5 and the dawn of rich mobile web applications pt 1HTML5 and the dawn of rich mobile web applications pt 1
HTML5 and the dawn of rich mobile web applications pt 1
 
HTML5 and the dawn of rich mobile web applications pt 2
HTML5 and the dawn of rich mobile web applications pt 2HTML5 and the dawn of rich mobile web applications pt 2
HTML5 and the dawn of rich mobile web applications pt 2
 
Building a Mobile App with Sencha Touch
Building a Mobile App with Sencha TouchBuilding a Mobile App with Sencha Touch
Building a Mobile App with Sencha Touch
 
Create a mobile web app with Sencha Touch
Create a mobile web app with Sencha TouchCreate a mobile web app with Sencha Touch
Create a mobile web app with Sencha Touch
 
Cross platform mobile web apps
Cross platform mobile web appsCross platform mobile web apps
Cross platform mobile web apps
 
Bd conf sencha touch workshop
Bd conf sencha touch workshopBd conf sencha touch workshop
Bd conf sencha touch workshop
 
City bars workshop
City bars workshopCity bars workshop
City bars workshop
 
San Diego Hackathon
San Diego HackathonSan Diego Hackathon
San Diego Hackathon
 
Building Cross Platform Mobile Web Apps
Building Cross Platform Mobile Web AppsBuilding Cross Platform Mobile Web Apps
Building Cross Platform Mobile Web Apps
 
Creating and Distributing Mobile Web Applications with PhoneGap
Creating and Distributing Mobile Web Applications with PhoneGapCreating and Distributing Mobile Web Applications with PhoneGap
Creating and Distributing Mobile Web Applications with PhoneGap
 
Theming and Sass
Theming and SassTheming and Sass
Theming and Sass
 
An Introduction to Sencha Touch
An Introduction to Sencha TouchAn Introduction to Sencha Touch
An Introduction to Sencha Touch
 
Source Dev Con Keynote
Source Dev Con KeynoteSource Dev Con Keynote
Source Dev Con Keynote
 
Building Cloud-Based Cross-Platform Mobile Web Apps
Building Cloud-Based Cross-Platform Mobile Web AppsBuilding Cloud-Based Cross-Platform Mobile Web Apps
Building Cloud-Based Cross-Platform Mobile Web Apps
 
Building cross platform mobile web apps
Building cross platform mobile web appsBuilding cross platform mobile web apps
Building cross platform mobile web apps
 
Building tomorrow's web with today's tools
Building tomorrow's web with today's toolsBuilding tomorrow's web with today's tools
Building tomorrow's web with today's tools
 

Último

Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Victor Rentea
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Victor Rentea
 

Último (20)

Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
JohnPollard-hybrid-app-RailsConf2024.pptx
JohnPollard-hybrid-app-RailsConf2024.pptxJohnPollard-hybrid-app-RailsConf2024.pptx
JohnPollard-hybrid-app-RailsConf2024.pptx
 
AI in Action: Real World Use Cases by Anitaraj
AI in Action: Real World Use Cases by AnitarajAI in Action: Real World Use Cases by Anitaraj
AI in Action: Real World Use Cases by Anitaraj
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
Introduction to use of FHIR Documents in ABDM
Introduction to use of FHIR Documents in ABDMIntroduction to use of FHIR Documents in ABDM
Introduction to use of FHIR Documents in ABDM
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontology
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering Developers
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
 

Mobile Device APIs

  • 1. (Mobile) Device APIs James Pearce @jamespearce http://tripleodeon.com
  • 2. What are Device APIs? “Client-side APIs that enable the development of Web Applications that interact with device hardware” ...and other capabilities outside of the browser’s traditional remit
  • 3. Why are they important? • They’re not... ...if you’re happy with a web of documents • They are... ... if you want the the web to be competitive with native app platforms
  • 5.
  • 6.
  • 7. WTAI Make Call <a  href="wtai://wp/mc;16505551234">    Call  us </a> <a  href="call.wmls#makeCall()">    Call  us </a> //  call.wmls extern  function  makeCall()  {    WTAPublic.makeCall("16505551234"); } http://www.wapforum.org/what/technical/wtai-30-apr-98.pdf
  • 8. WTAI Call Control <a  href="calls.wmls#setupCall()">Call  us!</a> <a  href="calls.wmls#acceptCall()">Brring!</a> <a  href="wtai://cc/sd;1*2*3456">Enter  code</a> //  calls.wmls extern  function  setupCall()  {    WTACallCont.setup("16505551234",  1); } extern  function  acceptCall()  {    WTACallCont.accept("1",  1); }
  • 9. WTAI Messaging //  sms.wmls extern  function  sendMsg()  {    WTANetText.send("16505551234",  "WML  rocks"); } extern  function  readMsg(i)  {    var  sms  =  WTANetText.read(i);    return  WTANetText.getFieldValue(        sms,  "body"    ); }
  • 10. WTAI Contacts //  contacts.wmls extern  function  addFriend(i,  num,  name)  {    WTAPhoneBook.write(i,  num,  name); } //  return  structs  of  contact  details extern  function  getFriendById(i)  {    return  WTAPhoneBook.read("i",  i); } extern  function  getFriendByName(name)  {    return  WTAPhoneBook.read("t",  name); }
  • 11. I may be laboring the point But that was 1998... ... and you still can’t do any of this with a contemporary mobile browser
  • 12.
  • 13. BONDI “enables web based content to access native device capability, intermediated through a robust, but flexible security framework” http://www.omtp.org/1.11
  • 14. Messaging var  sms  =  bondi.messaging.createSMS({    to:  ["16505551234"],    body:  "Home  soon" }); var  mms  =  bondi.messaging.createMMS({    to:  ["16505551234"],    subject:  "I  will  be...",    body:  "...home  soon" });
  • 15. Messaging bondi.messaging.sendSMS(    function  ()  {},  //  success    function  ()  {},  //  error    sms,  true ); bondi.messaging.sendMMS(    function  ()  {},  //  success    function  ()  {},  //  error    mms,  true );
  • 16. Messaging bondi.messaging.subscribeToSMS(    function  ()  {},                      //  success    function  ()  {},                      //  error    function  ()  {                          //  listener        alert("They  replied!");    },  {                                      from:  "16505551234"          //  filter    },    true                                            //  exclusive );
  • 17. Contacts bondi.pim.contact.getAddressBooks(    function(books)  {  //  success        var  contact  =  books[0].createContact({            name:  'James  Pearce',            emails:  [{email:'j@tripleodeon.com'}],            phoneNumbers:  [{number:'16505551234'}]        });    },      function  ()  {}        //  error );
  • 18. Telephony bondi.telephonyLog.findLogEntries(    function  ()  {},  //  success    function  ()  {},  //  error,    [        bondi.telephonyLog.MISSED_CALLS_FOLDER,        bondi.telephonyLog.RECEIVED_CALLS_FOLDER    ],    {        phoneNumber:  "16505551234"    } ); * Yes, it’s true: you can’t actually make or receive calls
  • 19. App Launcher bondi.applauncher.launchApplication(    function  ()  {},  //  success    function  ()  {},  //  error    "tel:16505551234" ); //  mailto:... //  sms:... //  file:...
  • 20. On one hand... • Security-conscious architecture • Comprehensive API support • Consistent API patterns • Conformance specifications • Reasonable test coverage http://www.omtp.org/1.11/apis
  • 23. WAC 2.0 • Accelerometer • File system • Calendar • Geolocation • Camera • Messaging • Contacts • Orientation • Core • Tasks • Device interaction • Viewport • Device status • Webview http://specs.wacapps.net/
  • 24. Which is all awesome Except...
  • 25.
  • 26.
  • 27. Device APIs Working Group “to create client-side APIs that enable the development of Web Applications and Web Widgets that interact with devices services such as Calendar, Contacts, Camera, etc” Joint efforts with WebRTC Working Group, WebApps Working Group http://www.w3.org/2009/dap/
  • 28. W3C Device APIs • Media Capture(HTML) • Vibration • Media Capture(gUM) • Calendar • Contact • Permissions • Messaging • Menu • Battery Status • Gallery • Network Information • System info • Sensor • Media Stream
  • 29. Media Capture (HTML) <input  type="file"  accept="image/*"  /> <!-­‐-­‐      The  accept  attribute  is  'a  hint'.    Specification  suggests  that  it  can  be    used  to  offer  alternative  picker  UIs. -­‐-­‐> Public working draft, http://www.w3.org/TR/2011/WD-html-media-capture-20110414
  • 31. Media Capture (HTML) <input  type="file"  accept="image/*"    capture="camera" /> <!-­‐-­‐      Again,  a  hint.  Valid  options  are:        camera,  camcorder,  microphone,  filesystem -­‐-­‐>
  • 32.
  • 33. Media Capture (HTML) <input  type="file"  accept="image/*"    capture="camera"  id="photo" /> var  photo  =  document.getElementById('photo'); photo.files[0].getFormatData(    function  (data)  {},  //  success    function  ()  {}            //  error ); //  file  is  a  MediaFile,  extending  File //  data  is  a  MediaFileData
  • 34. MediaFileData interface  MediaFileData  {        attribute  DOMString          codecs;        attribute  unsigned  long  bitrate;        attribute  unsigned  long  height;        attribute  unsigned  long  width;        attribute  float                  duration; }; ...seems to be under discussion
  • 35. Media capture (gUM) navigator.getUserMedia(    {        audio:  true,        video:  false    },    function  (stream)  {},  //  success    function  ()  {}                //  error ); //  stream  is  a  LocalMediaStream Editor's draft, http://dev.w3.org/2011/webrtc/editor/getusermedia.html
  • 36. LocalMediaStream var  recorder  =  stream.record(); //  recorder  is  a  MediaStreamRecorder recorder.getRecordedData(    function  (file)  {}    //  success ); //  file  is  a  File URL.createObjectURL(stream); //  a  Blob  URI  for,  say  <video  src='...'  />    
  • 37. Messaging navigator.sendMessage(    "sms:16505551234?"  +        "body=JavaScript%20says%20hi",      [],                          //  attachments  as  File  array    function  ()  {},  //  success    function  ()  {}    //  error ); //  also  mms:  and  mailto: //  oh...  were  you  looking  for  receipt? Editor's draft, http://dev.w3.org/2009/dap/messaging/
  • 38. Sensors navigator.findSensors().onsuccess  =  function()  {    this.result.forEach(function  (sensor)  {        //  ...    }); }; var  sensor  =  new  SensorConnection('Temperature'); sensor.addEventListener('sensordata',  function(e)  {    if(e.data  >  20.0)  {        window.console.log('Hawt');    } }); sensor.startWatch({  interval:  2000  }); Editor's draft, http://dev.w3.org/2009/dap/system-info/Sensors.html
  • 39. Sensors • Temperature, ºC • AmbientLight, Lux • AmbientNoise, dbA • MagneticField, uTesla • Proximity, cm • AtmPressure, kP • RelHumidity, %
  • 40. Contacts navigator.contacts.find(    [                                              //  fields        'name',          'emails'    ],      function  (contacts)  {},  //  success    function  ()  {},                  //  error    {                                              //  find  options          filter:  'James',            multiple:  true    } ); Editor's draft, http://w3c-test.org/dap/contacts/
  • 41. Contact interface  Contact  {        readonly  attribute  DOMString                              id;                          attribute  DOMString?                            displayName;                          attribute  ContactName?                        name;                          attribute  DOMString?                            nickname;                          attribute  ContactField[]?                  phoneNumbers;                          attribute  ContactField[]?                  emails;                          attribute  ContactAddress[]?              addresses;                          attribute  ContactField[]?                  ims;                          attribute  ContactOrganization[]?    organizations;                          attribute  Date?                                      birthday;                          attribute  DOMString?                            note;                          attribute  ContactField[]?                  photos;                          attribute  DOMString[]?                        categories;                          attribute  ContactField[]?                  urls; };
  • 42. Cool, but... “The ability to add and update contact information is not a function of the API provided in this specification.”
  • 43. Holy Contacts Editing WTF var  vcard  =      'BEGIN:VCARDrn'  +    'VERSION:3.0rn'  +    'UID:'  +  contact.id  +  'rn'  +          'N:Pearce;Jamesrn'  +    'FN:James  Pearcern'  +    'END:VCARD'; document.getElementById('vcard').href  =    'data:text/x-­‐vcard;charset=utf-­‐8,'  +    encodeURIComponent(vcard);  
  • 44.
  • 45.
  • 46. WebAPI “We are aiming at providing all the necessary APIs to build a basic HTML5 phone experience within the next 3-6 months” https://wiki.mozilla.org/WebAPI
  • 47. WebAPI • Telephony • Embedded browser • Messaging • Battery • Contacts • Device Status • Camera • Settings • Network • Mouse Lock • USB • Vibrator
  • 48. Hopefully W3C++ • “Our proposal might or might not look like it for the moment”
  • 49. Telephony! var  tcall  =    navigator.telephony.dial("16505551234"); tcall.readyState;    //  dialing,  ringing,  busy,  connecting,    //  connected,  disconnecting,  disconnected,      //  incoming tcall.onconnected  =  function  ()  {};    //  onbusy,  ondisconnected  etc tcall2.answer(); http://www.youtube.com/watch?v=RuIQskGD3u0#t=19s
  • 50. Contacts “We need read/write”
  • 51. USB var  usb  =  new  MozUSBManager(); usb.addEventListener("attachdevice",      function  ()  {} ); usb.addEventListener("detachdevice",      function  ()  {} ); usb.claimDevice({    deviceClass:  ...,    deviceSubClass:  ... });
  • 52.
  • 53. We deserve Device APIs... • As forward-looking as WTAI • As well-structured as BONDI • As comprehensive as WAC • As respectable as W3C DAP • As agile as WebAPI
  • 55. PhoneGap • Accelerometer • Events • Camera • File • Capture • Geolocation • Compass • Media • Connection • Notification • Contacts • Storage • Device
  • 57. Useless Demos https://github.com/jamesgpearce/compios5
  • 58. Fixing layout bugs, FML window.addEventListener("deviceorientation",    function  (e)  {        orientation  =  Math.abs(w.orientation);        rotation  =  Math.abs(e.gamma);        if  (rotation  >  8  &&  orientation  ===  0)  {            if  (enabled)  {                disableZoom();            }  else  {                restoreZoom();            }        }    },  false ); http://vimeo.com/adactio/iosbug https://github.com/scottjehl/iOS-Orientationchange-Fix
  • 59. Camera • Profile pictures • Review sites • Photo sharing • Recognition • Bar-codes • Text • Faces
  • 60. Filters! $('img').vintage({    vignette:  {        black:  0.8,        white:  0.2    },    noise:  20,    screen:  {        red:  12,        ...    },    desaturate:  0.05 }); https://github.com/rendro/vintageJS
  • 61. Augmented reality? http://fhtr.org/JSARToolKit/
  • 62. Contacts & calendaring • Add business details to address book • Web-based messaging • Facial recognition again... • Presence • Context-sensitivity of content
  • 63. Messaging • Sharing • Notifications • Offline transport fallback • Frictionless web sign-on
  • 65. I still want... • Audio processing • Bluetooth • RFID & NFC • Both cameras • Memory & power • Native recognition
  • 66. window.addEventListener(    'appointmentdue',    function(appt)  {        if  (device.near(WORK))  {            siri.remind(                contacts.get('Peter'),                calendar.getDetails(appt)            );        }    },    false ); PS: does not work
  • 67. James Pearce @jamespearce http://tripleodeon.com