Your SlideShare is downloading. ×
Phonegap deep-dive
Upcoming SlideShare
Loading in...5

Thanks for flagging this SlideShare!

Oops! An error has occurred.

Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

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,