[Android] 카카오지도 연동하기

1. 준비 (1)

1. 카카오 개발자 사이트 접속

  1. 개발자 등록
  2. 앱 등록
    스크린샷 2020-07-14 오후 9 41 12

2. 안드로이드 플랫폼 등록

카카오 개발자 사이트 로그인 -> 애플리케이션 클릭 -> 앱설정 -> 플랫폼 -> Android 플랫폼 등록
스크린샷 2020-07-14 오후 9 46 49
스크린샷 2020-07-14 오후 9 47 03

  • 패키지명 : AndroidManifest.xml 에서 pachage="**<이 부분>**" <이 부분>이라고 적은 부분에 있는 값을 복사
  • 마켓 url 생성 : 패키지명 입력하면 자동 생성됨! 따로 저장해두기
  • 키해시 : 아래 5번 방법을 통해 얻은 값을 등록해주기

3. 키 해시 등록

public static void getKeyHash(Context context){
PackageManager pm = context.getPackageManager();
try{
    PackageInfo packageInfo = pm.getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES);

    for(int i = 0; i < packageInfo.signatures.length; i++){
        Signature signature = packageInfo.signatures[i];
        try {
            MessageDigest md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            Log.d("<클래스명>","keyhash="+ Base64.encodeToString(md.digest(), Base64.NO_WRAP));
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
    }
}catch(PackageManager.NameNotFoundException e){
    e.printStackTrace();
}
}

Log에서 TAG를 클래스 명으로 바꿔주고, 함수를 호출하면 된다. (예 : getKeyHash(this);)
예시 : Log.d("MainActivity","keyhash="+ Base64.encodeToString(md.digest(), Base64.NO_WRAP));
그러면 Logcat에 keyhash 가 뜬다. 이 것을 사용하면 됨 -> 마찬가지로 플랫폼에 키해시값도 등록해준다.

2. 준비 (2)

1. SDK 다운로드

Kakao 지도 API
위 페이지에 접속해서 다운받는다.

2. SDK 앱에 넣기

안드로이드스튜디오에서 좌측상단에 있는 Android를 Project로 바꾼 뒤,
스크린샷 2020-07-14 오후 11 20 20

  1. libs 폴더에 libDaumMapAndroid.jar 파일 넣기
  2. jniLibs 폴더 만든 다음 세개 폴더 채로 붙여넣기

결과 : 아래와 같은 폴더 구조가 되면 성공적
스크린샷 2020-07-14 오후 11 24 20

3. AndroidManifest.xml 에 다음 두 가지 추가

  1. permission 추가

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    • INTERNET : 인터넷 사용 허용
    • ACCESS_COARSE_LOCATION : 앱 사용중에만 위치정보 액세스 허용
      (Android 10 이상에서는 백그라운드 허용 보다 앱 사용시 허용 방식을 권장한다.)

  2. app key 추가 → [중요] application 아래에 넣기!!
    (이렇게 하지 않으면 빌드했을 때 지도가 표시되지 않고 검정화면만 뜨게된다.)

    <application
        ...
        <meta-data
            android:name="com.kakao.sdk.AppKey"
            android:value="<native-app-key>"/>
    </application>

    카카오 개발자 페이지 → 앱설정 → 요약정보 → 네이티브 앱 키 를 복사해서 붙여넣는다.

    (참고 - 지도대신 검정화면만 뜨는 모습)



4. jar 파일 프로젝트에 추가

  1. Project structure 실행
    스크린샷 2020-07-14 오후 11 53 16

  2. Jar dependencieslibDaumMapAndroid.jar 선택 → OK
    스크린샷 2020-07-14 오후 11 53 45
    스크린샷 2020-07-14 오후 11 54 04

  3. build.gradle(:app) 에 다음과 같이 생겨있으면 성공! (아래 코드를 직접 입력해서 추가해도 된다.)

    dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation files('libs/libDaumMapAndroid.jar'
    }



3. 코드를 통해 적용

1. 코드 :

  1. RelativeLayout을 선언한 뒤, map_view(가정)라는 id를 지정한다.

    <!-- activity_main.xml -->
    <?xml version="1.0" encoding="utf-8"?>
    <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">
    
        <RelativeLayout
            android:id="@+id/map_view"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />
    
        ...
    
    </androidx.constraintlayout.widget.ConstraintLayout>



  2. initView() 메서드 내부의 코드 세 줄을 추가한다. (onCreate안에 바로 코드를 추가해도 무방함)

    // MainActivity.java
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        initView();
    }
    
    private void initView() {
        MapView mapView = new MapView(this);
    
        ViewGroup mapViewContainer = (ViewGroup) findViewById(R.id.map_view);
        mapViewContainer.addView(mapView);
    }



2. 폰 연결해서 빌드..!

이런 식으로 지도가 뜨면 성공!


4. 참조

© 2020 euzl. from JunhoBaik's, Built with Gatsby