본문 바로가기
안드로이드

[카카오API] 마켓 앱버전에서 지도가 표시되지 않는 현상 해결!

by 디지털노마더 2020. 6. 28.

 

개인 프로젝트에서 카카오 Map API를 이용하여 지도를 표시하는 기능이 있었다.

분명히 안드로이드 스튜디오 상에서 Debug모드와 Release모드에서는 지도가 정상적으로 표시되었는데

실제로 마켓 앱 서비스에서는 아래와 같이 지도 화면이 회색으로 정상 동작을 안 하는 것이다.

 

 

카카오 Develper 사이트에 접속해서 혹시나 API Key 값이 틀렸는지 확인해보았으나, 정확히 일치해서 원인을 찾고자

Q&A 사이트에서 열심히 나와 비슷한 문제를 겪고 있는 사람은 없는지 확인해보았다.

 

다행히도 비슷한 고민을 하는 사람이 있었다.

 

 

위 글은 결론은 keyHash 값이 카카오 API 상에 등록한 값과 일치하지 않아서 생겨나는 문제점이라는 것이다.

 

자 여기서 KeyHash 가 무엇이길래 이렇게 날 힘들게 하는것인가?

 

도대체 Key Hash라는 놈이 뭐길래..

 

# 키해시(Hash Key)란? 

오픈 API (카카오맵, FCM, Facebook 로그인 등)를 사용하려면 해시키를 등록해야 하고, Key Hash가 등록된 앱만 SDK를 이용해 API를 호출할 수 있다고 합니다.

키 해시는 특정 데이터(data)를 해시 함수(hash function)에 입력한 결과로 받은 리턴값을 말합니다. key hash를 이해하기 위해서는 이를 생성하는 해시 함수에 대해 이해해야 합니다.

 

출처: https://manorgass.tistory.com/76 [생각하는 개발자]

 

# 해시 함수의 정의

위키백과에서는 해시함수에 대해 아래와 같이 정의하고 있습니다.

해시 함수(hash function)는 임의의 길이의 데이터를 고정된 길이의 데이터로 매핑하는 함수이다. 해시 함수에 의해 얻어지는 값은 해시 값, 해시 코드, 해시 체크섬 또는 간단하게 해시라고 한다.

해시 함수의 특징은 크게 2가지로 정리할 수 있습니다.

  • 데이터의 길이가 랜덤해도 리턴값의 길이는 일정하다.
  • 입력값이 같으면 리턴값도 언제나 동일하다.

# Key Hash의 활용

API Provider(카카오, 구글 등)는 민감한 정보일 수도 있는 앱의 사이닝 키(signing key)값이 아닌 그 값을 해시한(특히 SHA-1 함수를 통해) hash key를 통해 인증된 사용자인지 여부를 판단합니다. 해시를 통한 사용자 인증의 장점은 해시값이 노출되어도 피해가 전혀 없다는 것입니다. 해시값만 가지고는 원본 데이터를 추론할 수 없기 때문입니다. 따라서 hash key가 노출되어도 입력값인 signing key는 안전합니다.

 

그럼 API Provider는 왜 해시가 등록된 앱에 대해서만 API 요청을 허용하는 것일까요? 그 이유는 바로 무분별한 트래픽을 방지하기 위해서입니다. 일반적으로 무료로 공개되어있는 API는 하루 1천 건, 2천 건 등의 요청수 제한을 두고 있습니다. 또한 제한이 있는 무료 사용자와 요청 제한이 없는 유료 사용자를 구분하는 용도로도 쓰일 수 있습니다.

 

자 이렇게 우리는 정상적으로 마켓 앱에서 지도를 표시하기 위해서는 Google Console 사이트에 접근하여 서명키 값을 확인해야 합니다.

 

아래는 Google Developer 사이트에서 캡처한 이미지로 최근에 보완된 서비스키 등록 방식입니다.

과거에는 개발자가 직접 서명키를 가지고 APK 파일을 추출해서 마켓에 업로드하는 방식이었습니다.

하지만 현재는 개발자는 업로드키로 AAB, APK 파일을 추출해서 Google Console에 업로드를 하면, 구글 서버에서

자체적으로 관리하는 서명키로 한번 더 등록을 하는 방식입니다.

 

한마디로, 최종적인 서명키는 구글에서 관리되고 있는 서명키이기 때문에 오픈 API에 등록하는 키해시 값은

구글의 서명키에 등록된 키해시값을 알아야 합니다.

 

구글 Developer 사이트에는 답이 다 있었구나..

 

우선 구글 콘솔에 로그인한 이후, 출시 관리 > 앱 서명 탭을 클릭합니다.

보시면 앱 서명 인증서(MD5, SHA-1,SHA-25)들이 있는데 이 중에서 "SHA-1인증서 지문"을 복사합니다.

 

참고로 아래의 표시처럼 'SHA1: '을 제외한 나머지 값을 복사해야 한다.

SHA1: AD:1E:57:D9:39~~~~~~

 

 

SHA1값을 Base64로 변환사이트에 접속해서 SHA1 값을 base64 값으로 변경한다.

아래 빨간 테두리에 SHA-1 인증서 복사 텍스트를 붙여놓고 [Convert] 버튼을 누르면 변환값이 표시된다.

 

 

이제 남은 건, 카카오 Developer 사이트에서 내가 등록한 애플리케이션에 서명키 키해시 값만 등록하면 된다.

 

[내 애플리케이션] 클릭 - 내가 등록한 애플리케이션을 클릭하여 상세페이지로 이동한다.

 

 

상세페이지 왼쪽 메뉴 탭 [앱 설정] - [플랫폼] 메뉴를 클릭하면, 키 해시를 등록할 수 있습니다.

[수정] 버튼을 클릭하여, 위에서 발급한 서명키 해시값을 등록하면 이제 정상적으로 카카오 Map API를 이용하실 수 있습니다.

 

 

 

정상적으로 지도가 보이는지 확인해보면, 아래와 같이 정상적으로 보입니다.

저와 비슷한 문제로 고민이셨던 분들에게 참고가 된다면 좋겠네요.^-^

 

[알아두면 좋은 Tip] - Android Stuiod 캡쳐기능 (이제 손쉽게 캡쳐를 바로 확인하자!)

 

 

 

 

 

 

댓글