12-12-12 에 진짜 세계를 뒤 흔든 건 아이폰에 새 Google Maps app이 릴리즈 된 겁니다. 별로 신통치 않은 애플 맵을 대신 할 수 있게 됐죠. 구글은 turn-by-turn direction, vector based map tiles, 개선된 인터페이스 등을 새로 선보였습니다.
The URL Scheme
먼저 URL scheme의 origin 에 대해 알아보죠. WWW(World wide Web)이 처음 선보인 1990년대로 돌아가보죠. 개발자들은 뭔가 인터넷에서 어떤 것을 참조할 필요가 있었습니다. 그래서 그 참조할 정보의 위치를 간단하게 URL( Uniform Resource Locator)을 이용해서 찾아갔죠.
인터넷 상에서 access 할 수 있는 방법은 여러가지가 있습니다. 그리고 그것들은 단지 web page나 이미지들만이 아닙니다. terminal session을 열어서 Gopher 서비스에 연결할 수도 있고 FTP 서버로부터 파일을 다운로드 받을 수도있고 이메일 메세지를 보내고 하는 것들을 인터넷으로 할 수 있습니다.
colon 전의 URL 부분을 URL scheme이라고 합니다. 그 종류는 아래와 같습니다.
- http: — a file from a web server
- https: — a file from an encrypted web server
- mailto: — send an email message
- ftp: — access a file via FTP
- telnet: — open terminal sessions to a server
iOS 에서는 이메일 안에 있는 전화번호를 touch 해서 dialer 를 열고 전화를 걸 수가 있습니다. 이런 기능들은 아래와 같은 URL schemes 를 사용해서 구현 합니다.
- tel: — make a phone call
- sms: — send a text message
- itms-apps: — opens the app store
- music: — go to the current playing song in the music app
애플은 애플리케이션이 자기 자신만의 scheme 을 define 하도록 합니다. 그래서 다른 앱에서 그 앱을 열수 있도록 허용합니다. Corona Labs 는 1년전에 이 기능을 제공했습니다. 이와 관련 된 글을 보시려면 여기를 클릭하세요.
Google Maps URL Scheme
Maps app 에 빠르게 접근하도록 하기 위해 Google 은 여러분 앱이 접근 가능하도록 URL scheme 을 사용합니다.
comgooglemaps:
물론 URL scheme 은 URL 의 일 부분입니다. 여기에 추가로 host 이름과 호스트상의 리소스들을 가집니다. 앱이 실제로 host name 이 없고 개별 파일로 접근할 필요가 없으면 full URL 은 아래와 같습니다.
comgooglemaps://
코로나에서는 이 API 를 아래와 같이 사용하시면 됩니다.
system.openURL("comgooglemaps://")
여러분의 앱은 suspend 상태가 되고 구글 맵이 시작될 겁니다. 간단하죠? 구글 맵에서 근처 피자가게를 찾고 싶으세요? 혹은 구글 맵에서 할 수 있는 다른 것을 여러분 앱에서 directly 하고 싶으세요?
URL scheme 에 다른 추가적인 정보를 덧붙이면 여러분 앱 안에서 그런 특정 기능을 사용하도록 하실 수 있습니다.
1. Map Coordinates and Traffic View
아래의 코드가 기본 형식입니다.
system.openURL("comgooglemaps://?center=40.765819,-73.975866&zoom=14&
views=traffic")
이렇게 하면 맵을 열고 traffic 상태를 보여 줍니다. 그리고 zoom level 은 14 이고 위도 경도는 40.7N and 73.9W 인 지점이 화면 가운데에 위치할 겁니다. 이 에제는 뉴욕의 센트럴 파크의 위치를 보여 줄 겁니다.
잘 보시면 첫번째 파라미터 전에 물음표가 있는것을 알아 채셨을 겁니다. 그리고 각 파라미터 사이는 &로 구분하구요. 그러니까 이 파라미터들을 분해하면 아래와 같이 되겠죠.
?center=40.765819,-73.975866 --center map at these coordinates &zoom=14 --zoom to level 14 &views=traffic --show traffic view
2. Map “Street View”
여기에 mapmode=streetview parameter를 추가하면 street view를 보실 수 있습니다.
system.openURL("comgooglemaps://?center=40.765819,-73.975866&
zoom=14&views=traffic&mapmode=streetview")
3. Map Query
맛있는 피자를 원하세요? 그러면은 q=pizza를 다른 파라미터 전에 추가히세요.
system.openURL("comgooglemaps://?q=pizza¢er=40.765819,-73.975866")
4. Driving Directions
A 지점에서 B 지점까지의 경로는 어떻게 알 수 있을 까요?
system.openURL("comgooglemaps://?saddr=Google+Inc,+8th+Avenue,+New+York,+NY&
daddr=John+F.+Kennedy+International+Airport,+Van+Wyck+Expressway,
+Jamaica,+New+York&directionsmode=transit")
딱 보면 무지 복잡해 보이죠? 근데 자세히 보면 그냥 위와 같이 파라미터를 사용했을 뿐이예요.
?saddr=... --"s" for "starting address" &daddr=... --"d" for "destination address" &directionsmode=
+ 부호는 전부 다 뭘까요? 여기서 space 를 사용하면 문제가 발생할 수 있습니다. 그 space 를 + 부호로 대신 사용하는 겁니다. 아니면 hex code %20를 사용하셔도 됩니다.
근데 진짜 + 부호를 넣어야 되면 어떻게 할까요? 그럴 때는 hex code %2B 을 사용하셔야 됩니다.
Convenience Function
이렇게 파라미터를 추가하는게 짜증나시면 URL 을 encode 하는 함수를 사용하실 수도 있습니다.
|
system.openURL("comgooglemaps://?saddr=" ..
urlencode("Google Inc., 8th Avenue, New York, NY") ..
"?daddr=" .. urlencode("John F. Kennedy International Airport,
Van Wyck Expressway, Jamaica, NY") .. "?directionsmode=transit")
보시듯이 openURL 안에 들어가는 것들을 함수로 간단하게 encoding 할 수 있습니다.
Maps App Installed or Not Installed?
URL scheme 에서 발생할 수 있는 문제는 디바이스에 구글앱이 깔려있지 않을 경우가 되겠죠? 깔려 있지 않으면 그 앱을 열 수가 없을 테니까요. 현재의 Corona Public Release(#971) 에서는 이럴 경우 화면과 같은 에러 메세지가 뜹니다. 아니면 그냥 silent fail 되던가요. 이건 바람직한 해결 방법이 아니죠.
Corona Daily Build #986부터 system.openURL() API를 call 했을 때 true/false를 리턴하기 때문에 이에 대해 대처할 수 있습니다.
|
디바이스에 구글 맵이 깔려 있으면 didOpenGoogleMaps 변수(변수명은 여러분이 정하실 수 있습니다)가 true 가 될 것이고 깔려있지 않으면 false
가 될 겁니다. 이렇게 되면 target 앱이 깔려 있지 않을 경우 개발자는 특정 메세지나 특정 action 을 구현할 수 있게 되죠. 이 기능은 Daily Build #986 부터 사용 가능합니다. 유료 사용자일 경우 여기에서 다운 받으세요.
Ready to Begin?
여러분이 보셨듯이 코로나에서 구글 맵을 implementation 하는 것은 URL scheme 을 사용해서 아주 간단하게 처리하실 수 있습니다. 구글 맵이 제공하는 모든 기능을 살펴 보시려면 구글 맵 URL Scheme 웹사이트로 가셔서 보실 수 있습니다. 만약 애플 맵을 사용하시거나 구글 맵의 백업기능 지원으로 애플 맵 기능을 지원하시려면 이 문서를 참조하세요.
'Corona SDK > Corona Doc' 카테고리의 다른 글
Pinch Zoom Rotate 구현하기 - 1/11 - (0) | 2013.01.26 |
---|---|
코로나에서 time, date 다루기 (0) | 2013.01.18 |
Multi-Element Physics Body 다루기 (0) | 2013.01.11 |
내 앱에 애플의 iAds 광고 달기 (0) | 2013.01.03 |
코로나의 Holiday Gifts : Android Push Notification 등 등 (0) | 2012.12.30 |
간단하게 Device 분별하는 예제 (0) | 2012.12.13 |
다양한 디바이스 해상도에 맞게 이미지 표시하기 - config.lua file- (0) | 2012.12.06 |
physics engine (물리엔진)의 새로운 기능 event.contact 소개 (0) | 2012.11.29 |
새 위젯 사용하기 Part 1 (0) | 2012.11.08 |
Blend Modes 사용해서 Creative Effects 내기 (1) | 2012.11.01 |