키해시의 종류는 디버그용, 릴리즈용, 구글 플레이용으로 총 3가지이다. debug key hash는 주로 앱 개발을 할 때 디버그용으로 사용되는 키해시이다. release key hash는 앱 개발을 완료 후 apk 파일을 추출했을 때 사용되는 키해시이다. 이때, debug apk, release apk 관계없이 모두 release key hash를 사용해야한다. debug apk 파일을 뽑았는데 debug key hash만 넣으면 되는 줄 알고 고생했던 기억이 있다. 마지막으로 google play app signing key hash는 플레이 스토어에서 등록된 앱에 사용되는 키해시이다. 키해시가 다양하고 어느 경우에 어떤 키해시를 사용해야되는지 몰랐어서 답답했던 적이 있다. 이번 정리를 통해 완벽하게 학습하려 한다.
이러한 key hash를 추출하는 방법을 총 2가지가 있다.
먼저 터미널을 이용하는 방법을 알아보겠다.
mac은
homebrew
로 간단하게 설치가 가능하다.
편집
버튼을 누른다.C:\OpenSSL\bin
❗ 만약 터미널(cmd)창이 켜져있었다면 종료 후 다시 실행해야 저장한 환경변수가 다시 설정된다.
keytool -exportcert -alias androiddebugkey -keystore {path} -storepass android -keypass android | openssl sha1 -binary | openssl base64
← 명령어 입력debug.keystore
가 있는 경로를 path에 넣어준다.C:\Users\{계정이름}\.android\debug.keystore
/Users/{계정이름}/.android/debug.keystore
.android
폴더에 존재한다.keytool -exportcert -alias {key_alias} -keystore {keystore_path} | openssl sha1 -binary | openssl base64
← 명령어 입력
The operation couldn’t be completed. Unable to locate a Java Runtime.
위와 같은 오류가 뜨는 경우 java sdk 설치가 필요하다.terminal> brew install openjdk@8 terminal> sudo ln -sfn $(brew --prefix)/opt/openjdk@8/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk-8.jdk
fun getKeyHash() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
val packageInfo = requireContext().packageManager.getPackageInfo(requireContext().packageName, PackageManager.GET_SIGNING_CERTIFICATES)
for (signature in packageInfo.signingInfo.apkContentsSigners) {
try {
val md = MessageDigest.getInstance("SHA")
md.update(signature.toByteArray())
Log.d("getKeyHash", "key hash: ${Base64.encodeToString(md.digest(), Base64.NO_WRAP)}")
} catch (e: NoSuchAlgorithmException) {
Log.w("getKeyHash", "Unable to get MessageDigest. signature=$signature", e)
}
}
}
}
release key hash를 코드로 추출하진 못한다. 😥
fun getKeyHash(sha1: String) {
val sha1Arr = sha1.split(':')
var byteArr =byteArrayOf()
for (hex in sha1Arr) {
byteArr += Integer.parseInt(hex, 16).toByte()
}
Log.d("getKeyHash", "key hash: ${Base64.encodeToString(byteArr, Base64.NO_WRAP)}")
}
getKeyHash("EA:2A:...")
여러 종류의 key hash를 추출하는 여러 방식들을 알아보았다. 잘못된 key hash를 추가하는 경우 API 정보를 제대로 가져올 수 없어 어느 부분에서 오류가 났는지 찾기가 힘들다. 그렇기 때문에, 올바른 key hash를 넣는 것은 매우 중요하다. 이 글이 도움이 됐으면 좋겠다.😊