Skip to content

๐Ÿ—บ๏ธ ๋„ค์ด๋ฒ„์ง€๋„ API ๋ฌธ์„œ ์ฝ์–ด๋ณด๊ธฐ

saeyoung Oh edited this page Nov 11, 2023 · 1 revision

ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๊ธฐ ์ „ api ๋ฌธ์„œ๋ฅผ ๋ฏธ๋ฆฌ ์ฝ์–ด๋ณด์•˜๋‹ค.


Application ๋“ฑ๋ก

๋„ค์ด๋ฒ„ ํด๋ผ์šฐ๋“œ ํ”Œ๋žซํผ์—์„œ application ์„ ๋“ฑ๋กํ•˜๋Š” ๊ณผ์ •์€ ์–ด๋ ต์ง€ ์•Š์•˜๋‹ค. ํ•„์š”ํ•œ ์„œ๋น„์Šค๋ฅผ ์„ ํƒํ•ด์„œ ์•ˆ๋“œ๋กœ์ด๋“œ์˜ ๊ฒฝ์šฐ app package name ์„ ํ†ตํ•ด์„œ ์–ดํ”Œ์„ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.



์˜์กด์„ฑ ์ถ”๊ฐ€

๋„ค์ด๋ฒ„ ์ง€๋„ sdk ๋Š” maven ์ €์žฅ์†Œ์—์„œ ๋ฐฐํฌ๋œ๋‹ค.


allprojects {
    repositories {
        google()
        mavenCentral()
        maven("https://naver.jfrog.io/artifactory/maven/")
    }
}

๊ณต์‹ ๋ฌธ์„œ์—๋Š” ์œ„์˜ ์˜์กด์„ฑ์„ ๋ฃจํŠธ ํ”„๋กœ์ ํŠธ์˜ build.gradle ์— ์ถ”๊ฐ€ํ•˜๋„๋ก ์•ˆ๋‚ดํ•˜๊ณ  ์žˆ๋Š”๋ฐ, ๊ณ„์† ๋นŒ๋“œ๊ฐ€ ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. ํ•ด๋‹น ๋ถ€๋ถ„์„ ๊ตฌ๊ธ€๋ง ํ•ด๋ณด๋‹ˆ settings.gradle ์˜ dependencyResolutionManagement ํ•˜์œ„ repositories{ } ์— ์ถ”๊ฐ€ํ•˜์—ฌ ํ•ด๊ฒฐํ–ˆ๋‹ค๋Š” ๋‚ด์šฉ์„ ๋ฐœ๊ฒฌํ•˜์—ฌ ๊ทธ ๋ฐฉ๋ฒ•์„ ์‹œ๋„ํ•ด๋ณด๋‹ˆ ์„ฑ๊ณต์ ์œผ๋กœ ๋นŒ๋“œ๋ฅผ ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.


dependencies {
    // ๋„ค์ด๋ฒ„ ์ง€๋„ SDK
    implementation("com.naver.maps:map-sdk:3.17.0")
}

์•ฑ ๋ชจ๋“ˆ์˜ build.gradle์— ๋„ค์ด๋ฒ„ ์ง€๋„ SDK์— ๋Œ€ํ•œ ์˜์กด์„ฑ์„ ์œ„์™€ ๊ฐ™์ด ์„ ์–ธํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์˜์กด์„ฑ ์ถ”๊ฐ€๋Š” ๋์ด ๋‚œ๋‹ค.



Client ID ์ง€์ •

๋„ค์ด๋ฒ„ ํด๋ผ์šฐ๋“œ ํ”Œ๋žซํผ์—์„œ application ์„ ๋“ฑ๋กํ•˜๊ณ  ๋ฐœ๊ธ‰๋ฐ›์€ client ID ๋ฅผ ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹์œผ๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • AndroidManifest.xml ์— ์ง€์ •
    <manifest>
      <application>
          <meta-data
              android:name="com.naver.maps.map.CLIENT_ID"
              android:value="YOUR_CLIENT_ID_HERE" />
      </application>
    </manifest>

  • API ๋ฅผ ํ˜ธ์ถœํ•ด ์ง€์ •
    class App : Application() {
      fun onCreate() {
          super.onCreate()
          NaverMapSdk.getInstance(this).client =
                  NaverMapSdk.NaverCloudPlatformClient("YOUR_CLIENT_ID_HERE")
      }
    }



์ง€๋„ ํ‘œ์‹œํ•˜๊ธฐ

์ง€๋„๋Š” ์œ„์˜ ์„ค์ •์„ ๋ชจ๋‘ ๋งˆ์นœ ํ›„ ์–ดํ”Œ์˜ ๋ ˆ์ด์•„์›ƒ์— mapFragment ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฐ€์žฅ ๊ถŒ์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์€ <FragmentContainerView> ๋กœ XML ๋ ˆ์ด์•„์›ƒ์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.


<androidx.fragment.app.FragmentContainerView
    android:id="@+id/map_fragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:name="com.naver.maps.map.MapFragment" />
val fm = supportFragmentManager
val mapFragment = fm.findFragmentById(R.id.map) as MapFragment?
        ?: MapFragment.newInstance().also {
            fm.beginTransaction().add(R.id.map, it).commit()
        }

ํ•˜์ง€๋งŒ MapFragment ๋ฅผ ๋‹ค๋ฅธ Fragment ๋‚ด์— ๋ฐฐ์น˜ํ•  ๊ฒฝ์šฐ ์ถ”๊ฐ€๋กœ ์ž‘์—…์„ ํ•ด์ค˜์•ผ ํ•œ๋‹ค. ์ด ๋ถ€๋ถ„์— ๋Œ€ํ•ด์„œ๋Š” ๊ตฌํ˜„ํ•˜๋ฉด์„œ ๋” ํ•™์Šตํ•  ์˜ˆ์ •์ด๋‹ค.



์ง€๋„์—์„œ ํ˜„์žฌ ์œ„์น˜ ํ‘œ์‹œํ•˜๊ธฐ

  • NaverMap ๊ฐ์ฒด ์–ป์–ด์˜ค๊ธฐ
    • ์ง€๋„๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ์—ญํ•  ์ด์™ธ์— API ๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ฐ์ฒด๊ฐ€ ํ•„์š”ํ•˜๋‹ค. OnMapReadyCallback ์„ ์ƒ์†๋ฐ›์•„ ๊ตฌํ˜„ ๊ฐ€๋Šฅํ•˜๋‹ค.

  • ํ˜„์žฌ ์œ„์น˜ ์ถ”์ ํ•˜๊ธฐ
    • ๋„ค์ด๋ฒ„ ์ง€๋„ sdk ์—์„œ๋Š” ์œ„์น˜ ์ถ”์ ๊ณผ ์ง€๋„์— ๋‚˜ํƒ€๋‚ด๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋‹ค. ์ด๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” AndroidManifest.xml ์— ๊ถŒํ•œ์„ ๋ช…์‹œํ•ด์•ผ ํ•œ๋‹ค. ํ•ด๋‹น ๊ถŒํ•œ์€ ์ตœ๋Œ€ํ•œ ์ •ํ™•ํ•œ ๊ธฐ๊ธฐ ์œ„์น˜ ์ถ”์ •์น˜๋ฅผ ์ œ๊ณตํ•˜๋„๋ก ํ•œ๋‹ค.
    <manifest>
      <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    </manifest>

  • ๋„ค์ด๋ฒ„ ์ง€๋„ sdk ๋Š” Google Play ์„œ๋น„์Šค์˜ Fused Location Provider๋ฅผ ์‚ฌ์šฉํ•˜๋Š” LocationSource ๊ตฌํ˜„์ฒด์ธ FusedLocationSource๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ์ด๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์•„๋ž˜์˜ ์˜์กด์„ฑ์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค.
    dependencies {
       // 21.0.1 ์ด์ƒ ๋ฒ„์ „์— ๋Œ€ํ•œ ์˜์กด์„ฑ ์ถ”๊ฐ€ํ•ด์•ผํ•จ.
       implementation("com.google.android.gms:play-services-location:21.0.1")
    }

  • ์•„๋ž˜์™€ ๊ฐ™์ด NaverMap ๊ฐ์ฒด๋ฅผ ์–ป์–ด์™€์„œ ํ˜„์žฌ ์œ„์น˜๋ฅผ ์„ค์ •ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ์ฝ”๋“œ๋กœ ๋Ÿฐํƒ€์ž„ ๊ถŒํ•œ ์š”์ฒญ ์ฒ˜๋ฆฌ๋Š” ๊ตฌํ˜„ํ•˜์ง€ ์•Š๋Š” ์ฝ”๋“œ์ด๋‹ค.
class MainActivity : AppCompatActivity(), OnMapReadyCallback {
  private lateinit var map: NaverMap
  private lateinit var location: FusedLocationSource

  override fun onCreate(savedInstanceState: Bundle?) {
      super.onCreate(savedInstanceState)
      setContentView(R.layout.activity_main)
      val fm = supportFragmentManager
      val mapFragment = fm.findFragmentById(R.id.fcv_map) as MapFragment?
          ?: MapFragment.newInstance().also {
              fm.beginTransaction().add(R.id.fcv_map, it).commit()
          }

      mapFragment.getMapAsync(this)
      location = FusedLocationSource(this, 1000)
  }

  override fun onMapReady(naverMap: NaverMap) {
      map = naverMap
      naverMap.locationSource = location
  }

}

  • locationSource ๋ฅผ ์ง€์ •ํ•˜๊ณ  ๋‚œ ํ›„ ์œ„์น˜ ์ถ”์  ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

    • None : ์œ„์น˜๋ฅผ ์ถ”์ ํ•˜์ง€ ์•Š๋Š”๋‹ค.
    • NoFollow : ์œ„์น˜ ์ถ”์ ์ด ํ™œ์„ฑํ™”๋˜๊ณ , ํ˜„ ์œ„์น˜ ํ‘œ์‹œ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋Š” ์œ„์น˜์— ๋”ฐ๋ผ ์›€์ง์ด๋ฉฐ ์ง€๋„๋Š” ์›€์ง์ด์ง€ ์•Š๋Š”๋‹ค.
    • Follow : ์œ„์น˜ ์ถ”์ ์ด ํ™œ์„ฑํ™”๋˜๊ณ , ํ˜„ ์œ„์น˜ ํ‘œ์‹œ๊ฐ€ ์‚ฌ์šฉ์ž ์œ„์น˜์— ๋”ฐ๋ผ ์›€์ง์ธ๋‹ค.
    • Face : ์œ„์น˜ ์ถ”์ ์ด ํ™œ์„ฑํ™”๋˜๊ณ , ์‚ฌ์šฉ์ž์˜ ์œ„์น˜ ๋ฐ ๋ฐฉํ–ฅ์„ ๋”ฐ๋ผ ๋ชจ๋“  ํ‘œ์‹œ ์š”์†Œ๊ฐ€ ๋”ฐ๋ผ ์›€์ง์ธ๋‹ค.
    override fun onMapReady(naverMap: NaverMap) {
          map = naverMap
          naverMap.locationSource = location
          naverMap.locationTrackingMode = LocationTrackingMode.Follow
    }



Emulator ์—์„œ ํ˜„์žฌ ์œ„์น˜ ํ‘œ์‹œ ํ™•์ธํ•˜๊ธฐ

emulator ์„ค์ •์—์„œ ์œ„์น˜๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ์›ํ•˜๋Š” ์ฃผ์†Œ๋ฅผ ๊ฒ€์ƒ‰ํ•œ ํ›„ ํ•ด๋‹น emulator ๊ฐ€ ํ˜„์žฌ ์œ„์น˜๋กœ ๊ทธ ์ฃผ์†Œ๋ฅผ ์ธ์‹ํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.

์„ค์ •์ด ๋๋‚˜๊ณ  ์–ดํ”Œ์„ ์‹คํ–‰ํ•˜๋ฉด ํ˜„์žฌ ์œ„์น˜์— ํ‘œ์‹œ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ์–ดํ”Œ์„ ์ผœ๋‘” ์ƒํƒœ๋กœ emulator ์—์„œ ์œ„์น˜ ์„ค์ •์„ ๋ณ€๊ฒฝํ•˜๋ฉด ์–ดํ”Œ ๋‚ด์˜ ์œ„์น˜ ํ‘œ์‹œ ์—ญ์‹œ ๋ณ€๊ฒฝ๋œ๋‹ค.


location 1 location 2
แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2023-11-12 แ„‹แ…ฉแ„Œแ…ฅแ†ซ 2 17 45 แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2023-11-12 แ„‹แ…ฉแ„Œแ…ฅแ†ซ 2 18 03
Clone this wiki locally