์๋ ํ์ธ์
์ค๋์ ์นด์นด์ค ๋งต API๋ฅผ ํ์ฉํ๋ ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ๋ฒ์ ๋ํด
ํฌ์คํ ํด๋ณด๋ ค ํฉ๋๋ค.

์์น์ ๋ณด๋ฅผ ์ด์ฉํ ์ ์๋ API๋ ๋ง์ง๋ง ์ ๋ ๊ฐ์ธ์ ์ผ๋ก ์นด์นด์ค ๋งต์ด ๋ฌธ์๊ฐ ์ ์ ๋ฆฌ๋์ด์๋ค๊ณ
์๊ฐํ์ฌ ์ฌ์ฉํ๊ฒ ๋์์ต๋๋ค.
๊ทธ๋ผ ๋ฐ๋ก ์ฌ์ฉ๋ฐฉ๋ฒ์ ์์๋ณผ๊น์??
API ์ค์
1. ๋จผ์ Kakao Developers๋ก ๊ฐ์ ๋ก๊ทธ์ธ์ ํด์ค๋๋ค.
Kakao Developers
์นด์นด์ค API๋ฅผ ํ์ฉํ์ฌ ๋ค์ํ ์ดํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํด๋ณด์ธ์. ์นด์นด์ค ๋ก๊ทธ์ธ, ๋ฉ์์ง ๋ณด๋ด๊ธฐ, ์น๊ตฌ API, ์ธ๊ณต์ง๋ฅ API ๋ฑ์ ์ ๊ณตํฉ๋๋ค.
developers.kakao.com
2. ๋ด ์ ํ๋ฆฌ์ผ์ด์ ์ผ๋ก ๋ค์ด๊ฐ ์ฑ์ ์ถ๊ฐํด์ค๋๋ค.
3. ์์ฑ๋ ์ฑ์์ ํ๋ซํผ์ ๋ฑ๋กํด์ค๋๋ค.
ํ๋ซํผ ๋ฑ๋ก์์ ํจํค์ง๋ช ์ AndroidManifestํ์ผ์ package๋ช ์ ๋ณต์ฌํด์ ๋ถ์ฌ ๋ฃ์ผ์๋ฉด ๋ฉ๋๋ค.
๋ง์ผ URL์ ๋ฐฐํฌ์์ ์ ๊ณต๋ URL์ ์ ๋ ฅํ๋ฉด ๋๊ณ ๋ฐฐํฌ๋ฅผ ํ์ง ์์ ๊ฒฝ์ฐ ์๋ต ๊ฐ๋ฅํฉ๋๋ค.
๋ง์ง๋ง์ผ๋ก ํค ํด์๋ฅผ ์ ๋ ฅํด์ผ ํ๋๋ฐ ํด๋น ๊ฐ์ ์๋ ์ฝ๋๋ฅผ ์ ๋ ฅ ํ ๋ก๊ทธ์ ์ถ๋ ฅ๋ ํด์ฌ ํค๋ฅผ ๋ถ์ฌ ๋ฃ์ผ์๋ฉด ๋ฉ๋๋ค.
private fun getHashKey() {
var packageInfo : PackageInfo = PackageInfo()
try {
packageInfo = packageManager.getPackageInfo(packageName, PackageManager.GET_SIGNATURES)
} catch (e: PackageManager.NameNotFoundException){
e.printStackTrace()
}
for (signature: Signature in packageInfo.signatures){
try{
var md: MessageDigest = MessageDigest.getInstance("SHA")
md.update(signature.toByteArray())
Log.e("KEY_HASH", Base64.encodeToString(md.digest(), Base64.DEFAULT))
} catch(e: NoSuchAlgorithmException){
Log.e("KEY_HASH", "Unable to get MessageDigest. signature = " + signature, e)
}
}
}
APP ์ค์
apis.map.kakao.com/android/guide/
์ ๋งํฌ์ ์ ์ํ์ฌ
SDK๋ฅผ ๋ค์ด ๋ฐ์ ์ค๋๋ค. ๋ค์ด๋ก๋ํ SDK์ ์์ถ์ ํด์ ํ๊ณ
main ๋ฐ์ jniLibs์ด๋ฆ์ผ๋ก ํด๋๋ฅผ ์์ฑํ์ฌ .so ํ์ผ๋ค์ ๋ณต์ฌํด์ฃผ๊ณ
libsํด๋ ๋ฐ์ jarํ์ผ์ ๋ณต์ฌํด์ ๋ฃ์ด์ค๋๋ค.
1. build.gradle ์ค์ ํ๊ธฐ
// KakaoMap
implementation files('libs/libDaumMapAndroid.jar')
implementation fileTree(include: ['*.jar'], dir: 'libs')
2. Manifest ์ค์ ํ๊ธฐ
<application
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/beach_icon"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.BeachCongetionPJ"
android:usesCleartextTraffic="true" // http url ์ฌ์ฉ์ ์ํ ์ค์
android:networkSecurityConfig="@xml/network_security_config"
tools:targetApi="31">
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
</network-security-config>
// Manifest์ android:networkSecurityConfig๋ฅผ ์ค์
//๊ถํ ์ค์
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
// ์ฑํค ์ค์
<activity
android:name=".ui.MainActivity"
android:exported="true">
<meta-data
android:name="android.app.lib_name"
android:value="" />
</activity>
<meta-data
android:name="com.kakao.sdk.AppKey"
android:value=""
/>
</application>
์์์ AppKey๋ ๋ฐ๋์ activity์ธ๋ถ application๋ด๋ถ์ ์์ด์ผ ํฉ๋๋ค.
์์ธ๋ฌ, value์ ๋ค์ด๊ฐ ์ฑ ํค๋ ์๋ ์ค ๋ค์ดํฐ๋ธ ์ฑ ํค๋ฅผ ๋ถ์ฌ ๋ฃ์ผ์๋ฉด ๋ฉ๋๋ค.
์นด์นด์ค ๋งต ๋์ฐ๊ธฐ
๋ง์ง๋ง์ผ๋ก ์ฑ์์ ์ง๋๋ฅผ ๋์ฐ๋ ๋ฐฉ๋ฒ์ ํ์ธํด๋ณด๊ฒ ์ต๋๋ค.
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:id="@+id/map_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.lee.beachcongetion.databinding.ActivityTestBinding
import net.daum.mf.map.api.MapView
class TestActivity : AppCompatActivity(){
private lateinit var binding : ActivityTestBinding
private lateinit var mMap : MapView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityTestBinding.inflate(layoutInflater).also {
setContentView(it.root)
}
mMap = MapView(this@TestActivity) // MapView ์์ฑ
binding.mapView.addView(mMap)// FrameLayout์ MapView add
}
}
์ด์์ผ๋ก ์นด์นด์ค ๋งต API ์ฌ์ฉํ์ฌ ๋งต ๋์ฐ๋ ๋ฐฉ๋ฒ์ ๋ง์น๋๋ก ํ๊ฒ ์ต๋๋ค.
๋ค์ ํฌ์คํ ์ผ๋ก ํค์๋๋ฅผ ํตํด POI ์ ๋ณด๋ฅผ ํ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํด ํฌ์คํ ํ๋๋ก ํ๊ฒ ์ต๋๋ค. ๐
์ค๋๋ ์ฆ์ฝํ์ธ์ :)