- 인쇄
- PDF
지도앱 연동 URL Scheme
- 인쇄
- PDF
URL Scheme 소개
네이버 지도 앱 URL Scheme을 사용하면 외부 앱이나 웹 페이지에서 네이버 지도 앱을 실행해 장소 표시, 검색, 길찾기, 내비게이션 등 다양한 지도 기능을 수행할 수 있습니다.
URL Scheme 사용하기
기본 정보
네이버 지도 앱 URL Scheme은 nmap://
으로 시작하며, 기본 구조는 다음과 같습니다.
nmap://actionPath?parameter=value&appname={YOUR_APP_NAME}
actionPath
부분에는 호출 기능의 유형을, parameter=value
부분에는 각 기능별로 필요한 파라미터를 지정합니다. 자세한 내용은 기능별 파라미터 설명을 참고하세요.
appname
appname
은 URL Scheme을 사용하는 앱 또는 웹 페이지를 식별하는 문자열입니다. 모든 URL에는 appname
파라미터가 반드시 포함되어야 합니다. 다음과 같은 값을 지정합니다.
- Android: 앱의
applicationId
- iOS: 앱의 번들 ID
- 웹 페이지: 웹 페이지의 URL
지도 메인 표시
지도 앱의 메인 화면을 보여줍니다.
액션 경로
/map
파라미터
파라미터 | 타입 | 필수 여부 | 설명 |
---|---|---|---|
lat | double | N | 지도의 중심 위도. -입력값: 31.43 ~44.35 -기본값: 앱의 기존 상태 유지 |
lng | double | N | 지도의 중심 경도. -입력값: 122.37 ~132.00 -기본값: 앱의 기존 상태 유지 |
zoom | double | N | 지도의 줌 레벨. -입력값: 4 ~20 -기본값: 앱의 기존 상태 유지 |
예제
다음은 별도의 파라미터 없이 지도 앱의 메인 화면을 표시하는 예제입니다.
nmap://map?&appname=com.example.myapp
호출 결과는 다음과 같습니다.
다음은 지도의 중심점을 (37.4979502, 127.0276368)
, 줌 레벨을 20으로 지정해 지도 앱의 메인 화면을 표시하는 예제입니다.
nmap://map?lat=37.4979502&lng=127.0276368&zoom=20&appname=com.example.myapp
호출 결과는 다음과 같습니다.
검색
통합 검색
검색어에 맞는 지도 검색 결과를 보여줍니다.
액션 경로
/search
파라미터
파라미터 | 타입 | 필수 여부 | 설명 |
---|---|---|---|
query | string | Y | 검색어. -입력값: URL 인코딩된 문자열 |
예제
다음은 "강남역"을 검색어로 넣어 지도를 검색하는 예제입니다.
nmap://search?query=%EA%B0%95%EB%82%A8%EC%97%AD&appname=com.example.myapp
호출 결과는 다음과 같습니다.
버스 검색
검색어에 맞는 버스 검색 결과를 보여줍니다.
액션 경로
/search/bus
파라미터
파라미터 | 타입 | 필수 여부 | 설명 |
---|---|---|---|
query | string | Y | 버스 번호. -입력값: URL 인코딩된 문자열 |
예제
다음은 "222"번 버스를 검색하는 예제입니다.
nmap://search/bus?query=222&appname=com.example.myapp
호출 결과는 다음과 같습니다.
장소 표시
지정된 좌표에 마커를 표시합니다.
액션 경로
/place
파라미터
파라미터 | 타입 | 필수 여부 | 설명 |
---|---|---|---|
lat | double | Y | 위도. -입력값: 31.43 ~44.35 |
lng | double | Y | 경도. -입력값: 122.37 ~132.00 |
name | string | Y | 이름. -입력값: URL 인코딩된 문자열 |
예제
다음은 (37.4979502, 127.0276368)
위치에 "경기도 성남시 분당구 정자동" 마커를 표시하는 예제입니다.
호출 결과는 다음과 같습니다.
길찾기
대중교통 길찾기
대중교통 길찾기를 수행합니다.
액션 경로
/route/public
파라미터
경로 탐색 공통 파라미터 항목을 참고하세요.
예제
다음은 서울대학교에서 올림픽 공원까지 대중교통으로 가는 경로를 탐색하는 예제입니다.
호출 결과는 다음과 같습니다.
자동차 길찾기
자동차 길찾기를 수행합니다.
액션 경로
/route/car
파라미터
경로 탐색 공통 파라미터 항목을 참고하세요.
예제
다음은 서울대학교에서 올림픽 공원까지 자동차로 가는 경로를 탐색하는 예제입니다.
호출 결과는 다음과 같습니다.
다음은 그린팩토리에서 서울대학교를 경유해 성남시청까지 자동차로 가는 경로를 탐색하는 예제입니다.
호출 결과는 다음과 같습니다.
도보 길찾기
도보 길찾기를 수행합니다.
액션 경로
/route/walk
파라미터
경로 탐색 공통 파라미터 항목을 참고하세요.
예제
다음은 서울대학교에서 동원 낙성대 아파트까지 도보로 가는 경로를 탐색하는 예제입니다.
호출 결과는 다음과 같습니다.
자전거 길찾기
자전거 길찾기를 수행합니다.
액션 경로
/route/bicycle
파라미터
경로 탐색 공통 파라미터 항목을 참고하세요.
예제
다음은 서울대학교에서 올림픽 공원까지 자전거로 가는 경로를 탐색하는 예제입니다.
호출 결과는 다음과 같습니다.
내비게이션
내비게이션 경로를 탐색합니다.
액션 경로
/navigation
파라미터
경로 탐색 공통 파라미터 항목을 참고하세요.
예제
다음은 안전 운행 모드로 내비게이션 화면을 표시하는 예제입니다.
nmap://navigation?&appname=com.example.myapp
호출 결과는 다음과 같습니다.
다음은 사용자의 현재 위치로부터 올림픽 공원까지 내비게이션 경로를 탐색하는 예제입니다.
호출 결과는 다음과 같습니다.
경로 탐색 공통 파라미터
길찾기(/route
)와 내비게이션(/navigation
)에서 사용하는 공통 파라미터입니다.
파라미터 | 타입 | 필수 여부 | 설명 |
---|---|---|---|
slat | double | N | 출발지 위도. -입력값: 31.43 ~44.35 -기본값: 사용자의 현 위치 사용 |
slng | double | N | 출발지 경도. -입력값: 122.37 ~132.00 -기본값: 사용자의 현 위치 사용 |
sname | string | N | 출발지 이름. -입력값: URL 인코딩된 문자열 -기본값: 사용자의 현 위치 사용 |
dlat | double | Y | 도착지 위도. -입력값: 31.43 ~44.35 |
dlng | double | Y | 도착지 경도. -입력값: 122.37 ~132.00 |
dname | string | N | 도착지 이름. -입력값: URL 인코딩된 문자열 -기본값: 도착지 주소 표시 |
v1lat | double | N | 경유지 1 위도. -입력값: 31.43 ~44.35 -기본값: 경유지 없음 |
v1lng | double | N | 경유지 1 경도. -입력값: 122.37 ~132.00 -기본값: 경유지 없음 |
v1name | string | N | 경유지 1 이름. -입력값: URL 인코딩된 문자열 -기본값: 경유지 없음 |
v2lat | double | N | 경유지 2 위도. -입력값: 31.43 ~44.35 -기본값: 경유지 없음 |
v2lng | double | N | 경유지 2 경도. -입력값: 122.37 ~132.00 -기본값: 경유지 없음 |
v2name | string | N | 경유지 2 이름. -입력값: URL 인코딩된 문자열 -기본값: 경유지 없음 |
v3lat | double | N | 경유지 3 위도. -입력값: 31.43 ~44.35 -기본값: 경유지 없음 |
v3lng | double | N | 경유지 3 경도. -입력값: 122.37 ~132.00 -기본값: 경유지 없음 |
v3name | string | N | 경유지 3 이름. -입력값: URL 인코딩된 문자열 -기본값: 경유지 없음 |
v4lat | double | N | 경유지 4 위도. -입력값: 31.43 ~44.35 -기본값: 경유지 없음 |
v4lng | double | N | 경유지 4 경도. -입력값: 122.37 ~132.00 -기본값: 경유지 없음 |
v4name | string | N | 경유지 4 이름. -입력값: URL 인코딩된 문자열 -기본값: 경유지 없음 |
v5lat | double | N | 경유지 5 위도. -입력값: 31.43 ~44.35 -기본값: 경유지 없음 |
v5lng | double | N | 경유지 5 경도. -입력값: 122.37 ~132.00 -기본값: 경유지 없음 |
v5name | string | N | 경유지 5 이름. -입력값: URL 인코딩된 문자열 -기본값: 경유지 없음 |
URL Scheme 사용 시 처리 사항
웹 페이지나 앱에서 네이버 지도 URL Scheme을 호출하면 네이버 지도 앱이 열리면서 URL Scheme이 처리됩니다. 이때, 사용자의 기기에 네이버 지도 앱이 설치되어 있지 않으면 App Store나 Google Play의 네이버 지도 앱 설치 페이지로 연결해 사용자가 앱을 설치할 수 있도록 해야 합니다.
모바일 앱
Android
다음과 같이 queryIntentActivities
를 호출해 네이버 지도 앱이 설치되어 있는지 확인하고, 설치되어 있지 않으면 Google Play로 이동합니다.
String url = "nmap://actionPath?parameter=value&appname={YOUR_APP_NAME}";
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
intent.addCategory(Intent.CATEGORY_BROWSABLE);
List<ResolveInfo> list = getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
if (list == null || list.isEmpty()) {
context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=com.nhn.android.nmap")));
} else {
context.startActivity(intent);
}
iOS
info.plist에 LSApplicationQueriesSchemes
를 생성하고 nmap
을 추가합니다.
<key>LSApplicationQueriesSchemes</key>
<array>
<string>nmap</string>
</array>
다음과 같이 canOpenURL
을 호출해 네이버 지도 앱이 설치되어 있는지 확인하고, 설치되어 있지 않으면 App Store로 이동합니다.
let url = URL(string: "nmap://actionPath?parameter=value&appname={YOUR_APP_NAME}")!
let appStoreURL = URL(string: "http://itunes.apple.com/app/id311867728?mt=8")!
if UIApplication.shared.canOpenURL(url) {
UIApplication.shared.open(url)
} else {
UIApplication.shared.open(appStoreURL)
}
모바일 웹 페이지
Android
인텐트 URL을 사용하면 앱이 설치되어 있지 않은 경우 자동으로 Google Play 스토어로 이동합니다. 인텐트 URL의 구조는 다음과 같습니다.
intent://actionPath?parameter=value&appname={YOUR_APP_NAME}#Intent;scheme=nmap;action=android.intent.action.VIEW;category=android.intent.category.BROWSABLE;package=com.nhn.android.nmap;end
다음은 (37.4979502, 127.0276368)
위치에 "경기도 성남시 분당구 정자동" 마커를 표시하는 URL Scheme을 인텐트 URL로 나타낸 예제입니다.
intent://place?lat=37.4979502&lng=127.0276368&name=%EA%B2%BD%EA%B8%B0%EB%8F%84%20%EC%84%B1%EB%82%A8%EC%8B%9C%20%EB%B6%84%EB%8B%B9%EA%B5%AC%20%EC%A0%95%EC%9E%90%EB%8F%99&appname=com.example.myapp#Intent;scheme=nmap;action=android.intent.action.VIEW;category=android.intent.category.BROWSABLE;package=com.nhn.android.nmap;end
iOS
다음과 같이 웹 페이지에서 JavaScript 타이머를 이용해 App Store로 분기시키는 방법을 사용합니다.
<script>
function openNaverMapApp(url) {
var clickedAt = +new Date();
location.href = url;
setTimeout(function() {
if (+new Date() - clickedAt < 2000) {
location.href = 'http://itunes.apple.com/app/id311867728?mt=8';
}
}, 1500);
}
window.onload = function() {
openNaverMapApp("nmap://actionPath?parameter=value&appname={YOUR_APP_NAME}");
};
</script>
인앱 브라우저
인앱 브라우저에서 URL Scheme을 처리하려면 추가 작업이 필요합니다.
Android
다음과 같이 WebViewClient의 shouldOverrideUrlLoading
을 오버라이드해 URL Scheme 처리 코드를 추가합니다.
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.startsWith("intent:")) {
Intent intent;
try {
intent = Intent.parseUri(url, Intent.URI_INTENT_SCHEME);
} catch (URISyntaxException e) {
return false;
}
if (TextUtils.isEmpty(intent.getPackage())) {
return false;
}
List<ResolveInfo> list = getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
if (list == null || list.isEmpty()) {
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + intent.getPackage())));
} else {
startActivity(intent);
}
return true;
}
return false;
}
iOS
다음과 같이 WKWebview의 decidePolicyFor
에 URL Scheme 처리 코드를 추가합니다.
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
if let url = navigationAction.request.url {
if url.scheme == "nmap" {
UIApplication.shared.open(url)
decisionHandler(.cancel)
return
}
}
decisionHandler(.allow)
}