본문 바로가기
Android

카카오 API, Android] 키 해시 부여받기

by 김마리님 2021. 8. 31.

카카오 API를 사용할때, 안드로이드 개발자이며 막 개발을 시작한 사람들의 머리를 부여잡게 하는 골치아픈 문제가 있다.

바로 키 해시.............. 근데 개발자인 나도 헛갈림 ㅠㅠㅠㅠㅋㅋㅋㅋㅋㅋㅋㅋㅋ

 

이것이 무엇이냐 하면....... SHA-1 지문을 Base64로 인코딩 한 것이다.

그러니까, 세 가지 SHA-1 지문이 나오게 된다.

1) 디버그

2) 릴리즈

3) 구글 개발자 콘솔

 

하나하나...... 어떻게 부여받는지 봅시다.

아.. 2~3을 위해서 다운로드 받을 것이 두 가지가 있습니다. Git과 OpenSSL 입니다.

 

1) Git

깃이야 뭐..... 개발할 사람들이면 웬만하면 다 있겠지.. Git이 싫으면 window bash를 까시면 됩니다. 근데 전 귀찮아서 ㅎㅎ

https://git-scm.com/downloads

 

Git - Downloads

Downloads macOS Windows Linux/Unix Older releases are available and the Git source repository is on GitHub. GUI Clients Git comes with built-in GUI tools (git-gui, gitk), but there are several third-party tools for users looking for a platform-specific exp

git-scm.com

 

2) OpenSSL

OpenSSL이 없으면 암호화가 불가능합니다 ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ 대체 불능의 프로그램입니다..

http://slproweb.com/products/Win32OpenSSL.html

 

Win32/Win64 OpenSSL Installer for Windows - Shining Light Productions

Minimum system requirements: Windows XP or later 32MB RAM 200MHz CPU 30MB hard drive space Recommended system requirements: Windows XP or later 128MB RAM 500MHz CPU 50MB hard drive space April 21, 2020 - All users and applications should be using the OpenS

slproweb.com

 

 

이 두개를 다운로드 받고 나서 하나씩.. 해봅니다.

 

1. 디버그 키 해시

디버그 키 해시를 받는 법은 다양합니다.

 

1) cmd를 이용하기

안드로이드 스튜디오는 설치할 때 개발용 키 해시를 하나씩 부여받고 시작합니다. 그럼 개발 키 해시가 어딨겠어요! 안드로이드 파일 내에 있습니다! 

그리고 이 말은 무슨 말이겠어요! 개발 컴퓨터가 바뀌면 그 컴퓨터마다 디버그 해시를 다 따로 부여받아야 합니다!

저 파일입니다. 저 파일을 ssl로 변환하면 되는데요

 

cmd를 켜고, 

cd C:\Program Files\Android\Android Studio\jre\bin

를 입력합니다. cd 명령어는 해당 폴더로 이동하는 명령어입니다.

이동되었으면 

이렇게 변경되는데요(리눅스처럼 그냥 아무런 반응이 없는 것이 cmd에선 최고입니다.) 그 후에 다음 명령어를 써주시면 됩니다.

 

keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore -storepass android -keypass android | openssl sha1 -binary | openssl base64

 

 

2) 코드로 발급 받기(코틀린 환경임)

 

다음과 같은 방법으로 해시키를 부여받을 수 있습니다.

(ILog는 로그를 부여받는 커스텀 코드이므로, 커스텀 로그 코드가 없는 분은 logD 등으로 로그 찍으세용)

    private fun getHashKey() {
        var packageInfo: PackageInfo? = null
        try {
            packageInfo = packageManager.getPackageInfo(packageName, PackageManager.GET_SIGNATURES)
        } catch (e: PackageManager.NameNotFoundException) {
            e.printStackTrace()
        }
        if (packageInfo == null) Log.e("KeyHash", "KeyHash:null")
        for (signature in packageInfo!!.signatures) {
            try {
                val md: MessageDigest = MessageDigest.getInstance("SHA")
                md.update(signature.toByteArray())
                //Log.d("KeyHash", Base64.encodeToString(md.digest(), Base64.DEFAULT))
                ILog.iLogDebug("KeyHash", Base64.getEncoder().encodeToString(md.digest()))
            } catch (e: NoSuchAlgorithmException) {
                ILog.iLogDebug("KeyHash", "Unable to get MessageDigest. signature=$signature")

            }
        }

    }

 

근데 이거보다 더 간단한 방법이 있는데, 카카오때문에 해시 키를 찾는 분은 카카오가 그냥 디버그 해시를 바로 찾아줍니다. ㄹㅇ 카카오 api에 그냥 있는 매서드입니다. 아, 혹시나 액티비티 아니고 다른 뷰홀더에서 받으실 분들을 위해, this는 context입니다.

        var keyHash = Utility.getKeyHash(this)
        ILog.iLogDebug(TAG, "keyhash : $keyHash")

 

 

2) 릴리즈 키 해시 부여받기

 

릴리즈 키 해시는 cmd를 통해 부여받습니다.

릴리즈를 하게 되면 내가 keystore을 따로 만들게 됩니다. 그 따로 만들어진 키스토어를 이용하여 키 해시를 부여받습니다. 일단 해당 키가 있는 경로를 먼저 기억하고,

keytool -exportcert -alias <RELEASE_KEY_ALIAS> -keystore <RELEASE_KEY_PATH> | openssl sha1 -binary | openssl base64

다음과 같은 명령어를 통해 부여받습니다. 이 때, <RELEASE_KEY_ALIAS>는 키스토어의 이름, <RELEASE_KEY_PATH>는 키스토어의 경로를 넣으시면 됩니다.

 

 

3) 구글 플레이스토어 키 해시 부여받기.

구글 플레이스토어에 앱을 올리면, 앱을 따로 google signing을 통해 승인 받는데요, 이러면서 또 SHA-1 이 변경됩니다.

다음과 같이 설정 - 앱 무결성을 통해 SHA-1 인증서 지문을 찾을 수 있는데, 이것으로 키해시를 만듭니다.

그리고 git bash를 열어서

echo <SHA-1> | xxd -r -p | openssl base64

을 입력하면 됩니다. 이 때, <SHA-1>는 본인이 복사한 지문입니다.

 

이렇게 카카오 키 해시를 부여받고, 

 

이렇게 앱설정- 플랫폼에 키해시를 입력하면 카카오 로그인 구현하면서

invalid android_key_hash or ios_bundle_id or web_site_url 오류는 맞이하지 않을 수 있습니다.

반응형