URL Schemeのご紹介
NAVER MapアプリのURL Schemeを利用すれば、外部のアプリやウェブページからNAVER Mapアプリを実行し、場所表示、検索、経路検索、ナビゲーションなどの様々な地図機能を実行することができます。
URL Schemeの使用
基本情報
NAVER Mapアプリの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の使用における処理
ウェブページやアプリでNAVER Map URL Schemeを呼び出すと、NAVER Mapアプリが開かれ、URL Schemeが処理されます。この際、ユーザーの機器にNAVER Mapアプリがインストールされていない場合は、App StoreあるいはGoogle PlayのNAVER Mapアプリインストールページに移動してユーザーがアプリをインストールできるようにしなければなりません。
モバイルアプリ
Android
次のようにqueryIntentActivities
)を呼び出してNAVER Mapアプリがインストールされているかを確認し、インストールされていない場合は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
を呼び出してNAVER Mapアプリがインストールされているかを確認し、インストールされていない場合は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)
}