Your SlideShare is downloading. ×

Phonegap deep-dive


Published on

Published in: Technology, News & Politics

  • Be the first to comment

No Downloads
Total Views
On Slideshare
From Embeds
Number of Embeds
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

No notes for slide


  • 1. PhoneGap API Deep Dive Andrew Lunny, Nitobi, July 8 2010
  • 2. PhoneGap Goal A set of consistent cross-platform APIs for accessing native device capabilities through JavaScript This is possible for a large subset of PhoneGap APIs
  • 3. However • Some functionality is not present on all hardware o Accelerometer, Compass • Some features aren't exposed by all platforms o SMS, Telephony, File System • Some features are exposed in varying ways o Camera, Contacts • Some features are platform specific o notification.activityStart, KeyEvent
  • 4. PhoneGap 1.0 • Consistent Core API • Plugins for majority of platform specific code • Platform specific functionality for exceptional purposes Documentation Push • Reworking phonegap-docs o o rework • Better expose and fix inconsistencies When in doubt, check mobile-spec
  • 5. API Outline D evic e N etwork B asic Notific ation D e bug C onsole A c c elerometer C omp ass Sensors G eoloc ation Orientation C amera C onta cts File User D ata / File Stora g e Me dia (Audio) Stora g e/Store SMS/Tele phony
  • 6. Basics Device, Network, Notification, Debug o Fundamentals for mobile apps and development o Well-supported on all platforms o Consistent core, with platform specific extensions
  • 7. Device iPhone, Android, BlackBerry, Palm, Symbian.wrt A JS Object with String/Boolean fields Everywhere: navigator.device.uuid navigator.device.platform except Palm: navigator.device.version except Palm || and Symbian: navigator.device.gapVersion = iPhone and BlackBerry device.gapVersion = Android
  • 8. Network iPhone, Android, BlackBerry, Palm, Symbian.wrt One common public function: isReachable BlackBerry also has Network.XHR since the BlackBerry webview doesn't give us an XMLHttpRequest by default Android 2.2: ononline and onoffline events
  • 9., callback, options); The callback function is called with the parameter foo, which is used to compare the NetworkStatus against the NetworkStatus constants (for example, NetworkStatus.NOT_REACHABLE) Palm/Symbian (what we want going forward) foo != NetworkStatus.NOT_REACHABLE iPhone foo.remoteHostStatus != NetworkStatus.NOT_REACHABLE Android/BlackBerry foo.code != NetworkStatus.NOT_REACHABLE
  • 10. Notification iPhone, Android, BlackBerry, Palm, Symbian.wrt Common navigator.notification.alert Not on Symbian navigator.notification.beep Not on Palm navigator.notification.vibrate BlackBerry only navigator.notification.blink iPhone only confirm activityStart, activityStop loadingStart, loadingStop
  • 11. DebugConsole iPhone, Android, BlackBerry, Palm, Symbian.wrt debug.log(msg) debug.warn(msg) debug.error(msg) Android currently uses console.log Both Android and BlackBerry should and will implement these
  • 12. Sensors Accelerometer, Compass, Geolocation, Orientation o All related to physical state of device o Time sensitive and liable to change o Consistent between platforms and consistent between environment modules o Moving into the browser • Google I/O Keynote promises all of these in Browser soon: • • cf. orientation.html
  • 13. Sensor APIs navigator.sensor.getCurrentVariable(success, error, options); • asynchronously calls success with the current reading/status navigator.sensor.watchVariable(success, error, options); • calls getCurrentVariable repeatedly, at frequency specified in options parameter; returns a watch id navigator.sensor.clearWatch(watchId); • cancels the watch set by watchVariable
  • 14. Accelerometer iPhone, Android, BlackBerry, Palm, Symbian.wrt navigator.accelerometer.getCurrentAcceleration navigator.accelerometer.watchAcceleration navigator.accelerometer.clearWatch Not supported on BlackBerry because the hardware has limited support (depending on the handset)
  • 15. Compass iPhone, Android, BlackBerry, Palm, Symbian.wrt navigator.compass.getCurrentHeading navigator.compass.watchHeading navigator.compass.clearWatch Palm and Symbian: no hardware support BlackBerry: depends on the device, not implemented yet
  • 16. Geolocation iPhone, Android, BlackBerry, Palm, Symbian.wrt navigator.geolocation.getCurrentPosition navigator.geolocation.watchPosition navigator.geolocation.clearWatch Where available (iPhone, Android 2.0+), PhoneGap uses the browser's geolocation API, rather than implementing our own
  • 17. Orientation iPhone, Android, BlackBerry, Palm, Symbian.wrt navigator.orientation.getCurrentOrientation navigator.orientation.watchOrientation navigator.orientation.clearWatch Unlikely for BlackBerry (only makes sense on certain handsets) Android: probably wait for Browser implementation iPhone fires orientationChange event automagically; you can use window.orientation instead of the PhoneGap method CSS3 media queries can also be used
  • 18. User Data / File Storage Camera, Contacts, File, Media (Audio), Storage/Store, SMS/Telephony o Reading and writing what's normally inaccessible o Most prone to inconsistency • between platforms • between device models/OS versions o Least settled PhoneGap APIs
  • 19. Camera iPhone, Android, BlackBerry, Palm, Symbian.wrt, error, options); Android, iPhone success is passed a base-64 string of image data BlackBerry, Palm success is passed a file path to the image Symbian.wrt success is passed an array of file paths
  • 20. Contacts iPhone, Android, BlackBerry, Palm, Symbian.wrt Android, Blackberry, navigator.contacts.find Symbian (filter, success, error, options); filter is an object of type Contact iPhone getAllContacts newContact chooseContact displayContact removeContact contactsCount
  • 21. Contacts o The most inconsistent between platforms o Test on devices, not just simulators!
  • 22. File iPhone, Android, BlackBerry, Palm, Symbian.wrt navigator.fileMgr FileReader object FileWriter object Palm webOS does not allow File I/O is implemented with an XHR BlackBerry should be implemented... • use Store (see later slide) instead Android & iPhone: based loosely on W3C file spec: example API usage:
  • 23. Media (Audio) iPhone, Android, BlackBerry, Palm, Symbian.wrt var mySong = new Media ("urthebest.mp3",success,error);; mySong.pause(); mySong.stop(); Blackberry, Palm and Symbian as Audio, not Media iPhone and Android can record audio also • iPhone: startAudioRecord, stopAudioRecord • Android: startRecord, stopRecordingAudio
  • 24. Storage/Store iPhone, Android, BlackBerry, Palm, Symbian.wrt iPhone/Android 2.0+/Palm: unneeded - use localStorage or HTML5 db Android < 2.0: sets up an SQLite database, accessed through window.openDatabase • Unstable: use with caution Symbian: key/value store: BlackBerry: key/value store:
  • 25. SMS/Telephony iPhone, Android, BlackBerry, Palm, Symbian.wrt navigator.sms.send(number, message, success, error, options); navigator.telephony.send(number); To be implemented on iPhone/Android Any platform: set link HREF to sms: or tel: In all cases, the user must confirm before the call or message is placed
  • 26. Questions or Feedback @alunny,