PhoneGap
PhoneGap의 기본컨셉은 대부분의 모바일 플랫폼이 WebView를 가지고 있기 때문에 기본적인 기능들은 HTML과 CSS, Javascript로 만들어서 WebView에서 동작하게 하고 Device(Native)의 도움이 필요한 영역은 PhoneGap framework가 도움을 줘서 설치되어 동작하는 어플리케이션을 만들수 있는 방법을 제공 하는 것이다.
Apache Cordova
Adobe가 PhoneGap을 인수한 뒤에 PhoneGap을 Apache재단에 기부하였다. 그래서 Opensource가 되었고, PhoneGap 1.5 (Cordova) 버전부터 클래스 이름이 죄다 바뀌어 버렸다.
PhoneGap에서 제공하는 것들
WebView만으로는 구현이 어렵거나, Native의 도움이 필요한 기본 기능들은 PhoneGap API을 통해 사용 가능하다.
지원하는 API 는 다음과 같다.
- 각각의 기능별로 예제 코드와 함께 정리가 잘되어 있어서 쉽게 적응할 수 있다.
- 각 API별로 지원하는 플랫폼이 명시 되어 있다. (iOS와 Android는 대부분 지원)
Accelerometer : Tap into the device's motion sensor.
Camera : Capture a photo using the device's camera.
Capture : Capture media files using device's media capture applications.
Compass : Obtain the direction that the device is pointing.
Connection : Quickly check the network state, and cellular network information.
Contacts : Work with the devices contact database.
Device : Gather device specific information.
Events : Hook into native events through JavaScript.
File : Hook into native file system through JavaScript.
Geolocation : Make your application location aware.
Media : Record and play back audio files.
Notification : Visual, audible, and tactile device notifications.
Storage : Hook into the devices native storage options.
PhoneGap을 Native에서 동작하는 코드들과 (각각 플랫폼 마다 별개) cordova.js 과의 통신을 통해 동작한다. (Plugin이 있다면 Plugin을 제어 하는 코드들도 함께 동작)
각각의 플랫폼마다 WebView와의 통신 방법이 다르므로 모두 언급할 수 없기에 대표적으로 iOS와 Android를 설명하면 다음과 같다. 더 자세한 내용은 여기를 참고하라.
IOS
Custom Scheme 이란? (예제)
tel: 01012341234 |
kakaolink: //sendurl?msg=[message]&url=[url]&appid=[appid]&appver=[appver] |
gap: //ready |
yourscheme:
//<class>.<command>/[<arguments>][?<dictionary>]
반대로 Native Code에서 WebView로 명령은 iOS SDK의 stringByEvaluatingJavaScriptFromString를 이용한다.
"Native To WebView!" ; |
[webView stringByEvaluatingJavaScriptFromString:status]; |
Android
WebView에 있는 addJavascriptInterface를 통해 Javascript가 호출할 수 있는 코드정보를 미리 등록해서 이를 이용해서 WebView에서 Native코드를 실행한다.
등록
webView.addJavascriptInterface( new MyNativeAPI(), "MyNativeAPI" ); |
Class MyNativeAPI { |
public String whereAmI() { |
return "I am in Native" ; |
} |
} |
호출
MyNativeAPI.whereAmI();
반대로 Native Code에서 WebView로 명령은 WebView클래스의 loadUrl() 을 이용한다.
webView.loadUrl(
"javascript:alert('I am in WebView')"
);
PhoneGap을 사용하면 위에서 언급한 제공하는 API 만으로 어플리케이션을 구현하는데 부족함이 많다. 그래서 PhoneGap에서는 이 부족한 기능을 특정 플랫폼에 맞게 PhoneGap Plugin을 개발하여 사용할수 있다. (Adobe AIR의 Native Extention 이라 생각하면 되겠다) PhoneGap의 근본 취지와는 다르게 Plugin은 특정 플랫폼에 맞춰서 따로 따로 개발해 줘야한다. 2번째 문서에서는 간단히 PhoneGap Plugin을 개발하는 방법에 대해 다룰 것이다.
'Programming' 카테고리의 다른 글
PhoneGap의 모든것 - 프로젝트 셋팅 (2) (0) | 2012.05.07 |
---|---|
Sublime Text 2 에서 Nodejs 셋팅하기 (0) | 2012.02.14 |
Facebook actionscript API (0) | 2011.11.27 |