Skip to content

Naver Maps Deep Links

Status: Reference

Status: Active Part of: External APIs index


Role

The "지도 보기" button in VenuePickerModal opens a court's exact location in the Naver Maps app. If the app is not installed, it falls back to Naver Maps in the browser.

No API key required. These are standard URI deep links.


URI schemes

Native app (preferred)

nmap://map?lat={lat}&lng={lng}&name={encodedName}&appname=app.twomore
ParameterExampleNotes
lat37.4687WGS84 decimal degrees
lng127.0385WGS84 decimal degrees
name양재+테니스장URL-encoded, shown as pin label
appnameapp.twomoreRequired — Naver uses this to track referrers and allow the URI scheme

appname must match a value registered in the Naver Maps developer console. Using an unknown appname causes the URL to be rejected. Use app.twomore consistently.

Web fallback

https://map.naver.com/v5/search/{encodedQuery}

Used when Linking.canOpenURL('nmap://...') returns false (Naver Maps not installed).


Code pattern

The pattern is used in VenuePickerModal:

typescript
async function openNaverMap(url: string): Promise<void> {
  const canOpen = await Linking.canOpenURL(url);
  if (canOpen) {
    await Linking.openURL(url);
  } else {
    // Naver Maps not installed — open web search
    const webUrl = `https://map.naver.com/v5/search/${encodeURIComponent('테니스')}`;
    await Linking.openURL(webUrl);
  }
}

The deep link URL is pre-built by the venue search adapter and stored in SearchedVenue.naverMapUrl.


iOS configuration

Linking.canOpenURL on iOS requires the scheme to be declared in app.json. Without this, canOpenURL always returns false regardless of whether the app is installed.

json
{
  "expo": {
    "ios": {
      "infoPlist": {
        "LSApplicationQueriesSchemes": ["nmap", "kakaokompassauth", "kakao"]
      }
    }
  }
}

kakaokompassauth and kakao are required by the Kakao SDK and are included here for completeness.

Android does not require a pre-declaration for canOpenURL — it checks the package manager at runtime.


Register the app to allow the nmap:// deep link and prevent future throttling:

  1. navermaps.github.io/android-map-sdk/guide-ko or search "네이버 지도 앱 scheme 등록"
  2. Register appname=app.twomore as an allowed client
  3. Separate registration is needed for Android and iOS

This step is optional for development but required for production to guarantee the deep link is not rejected.


Alternative: Kakao Map

If Naver Maps is unavailable or the user prefers it, the same lat/lng can open Kakao Map:

kakaomap://look?p={lat},{lng}

This is not currently implemented but is a low-effort fallback if users request it.

Markdown remains the source of truth. Run yarn docs:check before handoff.