들어가기 전
'엄빠도 어렸다'라는 서비스를 만들면서 겪은 kakao login api 트러블 슈팅에 대해 포스팅하고자 한다.
문제 설명
우리 팀은 릴리즈를 앞두고 안드로이드 디버그 apk와 릴리즈 apk를 추출했다.
이 apk 파일을 설치 후 어플에 접속 했을 때 애뮬레이터에서는 잘 돌아가던 kakao login이 안되는 문제가 발생하였다.
error description을 보면 401 auth error, 즉 kakao 키해시 등록이 안 된 키해시가 들어왔다는 의미이다.
키해시 확인
error descption을 바탕으로 알맞는 키해시를 찾기 위해 노력했다.
https://developers.kakao.com/docs/latest/ko/getting-started/sdk-android#add-key-hash
해당 글을 보면 키해시를 뽑을 수 있는 여러 방법들을 소개하고있다.
카카오 Developer 문서대로 해보자
터미널에서 릴리즈와 디버그 키를 뽑고, kakao sdk를 활용한 getHashKey() 함수로도 뽑았다.
그리고 그 값을 kakao developer 안드로이드 플랫폼 키해시에 넣어도 여전히 kakao login이 실행되지 않았다.
해시키를 뽑는 여러 방법들을 사용해봐도 동일한 해시키만 나올 뿐 다른 해시키는 나오지 않았다.
결국 카카오 devTalk에 문의를 했다. 하지만 돌아온 답변은 알맞는 keyHash값을 플랫폼에 등록하지 않았다는 답변 뿐이였다. 디버그 apk는 알맞는 key값을 넣어서 해결했으나, 릴리즈 apk는 여전히 keyHash 문제로 카카오 로그인이 실행되지 않았다. 그렇다면 현재 넣은 keyHash 값들이 맞지 않는다는 건데.. 위 방법들은 다 했고.. 어떻게 하면 알맞는 키 해시를 찾을 수 있을까?
KeyHash는 어떻게 구하는 걸까?
알맞는 KeyHash를 찾기 위해서 KeyHash가 어떻게 추출되는지를 탐색했다.
위 방법들에 소개된 명령어들을 보면 키 해시를 구하는 과정은 OpenSSL을 이용해 sha-1(keytool로 얻은) 값을 base64로 전환하는 것이였다. 즉 SHA-1 값을 Base64로 전환한 값이 플랫폼에 등록해야하는 KeyHash 값인거다.
여러 cmd 명령어나, kakao sdk의 getHashKey()로 나온 값이 잘못된 것 같아서 직접 sha-1를 뽑아 base64 전환 사이트에서 전환해 값을 넣었다. 사이트는 아래와 같다.
https://base64.guru/converter/encode/hex
Android Studio에서 SHA-1 값 추출하기
안드로이드 스튜디오에서 sha-1 값을 추출하는 방법은 아래와 같다.
프로젝트의 오른쪽에 코끼리 아이콘과 함께있는 gradle 창을 누른다.
그러면 아래와 같이 tasks other 등이 보이는 창이 뜨는데, 이 때 터미널처럼 생긴 아이콘을 클릭한다 (화살표가 가리키는)
그러면 왼쪽과같이 검색 창이 뜨고 여기에 signingReport를 입력하면 된다.
이렇게 터미널에 sha1 값이 뜨게된다. 릴리즈 Apk에서 카카오로그인이 안되는걸 이를 이용해보자라는 생각이 들었다.
BuildType 릴리즈(Release) 로 변경
Apk도 디버그용, 릴리즈용이 있다면 현재 프로젝트도 릴리즈용 디버그용이 있지 않을까? 라는 생각이 갑자기 들었다.
찾아보니 AndroidStudio에 BuildType이라는게 존재했다. BuildType 도 debug, release로 구분되어있었고, debug에서는 앱 테스트, 버그 찾고 수정 등의 작업을 진행한다. release 타입은 실제 제출한 앱처럼 keystore 비번, alias 등을 요구하는 프로젝트이다. 앱 출시를 위해서는 release 타입을 제출한다.
따라서 현재 프로젝트의 타입을 release로 변경하고 sha-1 값을 뽑아서 이를 base64로 전환하고 그 값을 플랫폼에 등록해보자! 라는 결론에 도달했다.
프로젝트 타입을 release로 바꾸는 방법은 아래와 같다.
Active Build Variant 아래에 있는 debug를 눌러 release로 변경하면 BuildType이 release인 프로젝트가 된다.
그리고 위에 설명한 같은 방법으로 sha-1 값을 뽑았고.. base64로 변경하니 새로운 keyHash 값이 나왔다.
이 값을 카카오 플랫폼에 등록하고 릴리즈 apk를 실행하니 카카오 로그인 에러가 해결되었다 !!!!!
마치며
해당 에러가 발생하고 예상했던 릴리즈 날짜도 일주일이나 미뤄졌다. keyHash 문제는 하라는대로 했고, 값을 뽑아 넣었는데 이 값이 안맞다고하니 도저히 뭘 더 해야할지 매일 막막했다. 그 속에서 어떻게든 새로운 방법을 찾으려고 노력했고, 이런 과정에서 buildType, keyStore, keyHash 등 여러 개념들을 알 수 있었다.
이 포스팅이 우리팀과같은 어려움을 겪는 앱 출시 예정자들에게 도움이 되길 바란다!
'Android > 트러블슈팅' 카테고리의 다른 글
[Android/트러블슈팅] 앱을 삭제했는데 데이터가 남아있다고요? (2) | 2023.09.11 |
---|---|
[Android/트러블슈팅] Keystore 정보 확인하는 법 (0) | 2023.09.07 |
[Android/트러블 슈팅] Multiple Gradle daemons might be spawned because the Gradle JDK and JAVA_HOME locations are different. / 안드로이드 스튜디오 자동완성 에러 안뜨는 오류 (0) | 2023.09.05 |
[Android 오류] Button Style 적용 안됨/색상변경 안됨 (0) | 2022.10.25 |
[Android 오류] JAVA.LANG.CLASSCASTEXCEPTION 에러 발생 (0) | 2022.10.12 |