SMS Retriever API 를 이용하여 본인인증 인증번호를 App 에서 Callback 받는 로직을 만든 적이 있다.
https://devnuts.tistory.com/253
위와 같이 만들었고, 테스트를 하려고 했는데 이상하게 내부 앱공유에서 수신문자 Text 가 콜백이 들어오질 않는다.
어? 왜그럴까?
분명 나는 Android Studio 디버깅 모드에서도 잘 동작했고, Release 로 말아서 adb install 을 통해 앱 설치를 했을 때도 정상적을 콜백이 됐지만, Release 로 앱을 만 뒤, 사업팀에 테스트 목적으로 전달할 때 이러한 이슈가 발생했다.
일단, 내가 시도했던 방법은 이곳저곳 찾아보니 Debug 용 Hash 값과 Release 용 Hash 값이 다르다는 말을 보았다.
그래서 생각했던 건, 내가 뽑아낸 Hash 값이 Debug 모드라서 콜백으로 텍스트가 안 들어오는 걸까?
(e.g 나는 구글 Doc 에서 제공해준 AppSignatureHelper 를 이용하여 Hash 값을 추출했다.)
그래서 시도한 방법은 아래와 같다.
아래 stackoverflow.com 에서 알려준대로 하면 release Hash 값을 뽑아낼 수 있다고해서 내가 뽑아 놓은 Hash 값과 비교를 해보았다.
일단 위 링크를 타고 들어가면 되겠지만, 간략하게 아래에 정리를 해두겠다.
Release Hash 값 추출하는 순서 (구글스토어에 앱 출시가 된 상태)
- Google console 로 들어가 '앱 서명' 카테고리에 진입
- 앱 서명 인증서(.der 파일) 다운로드
- .der 파일을 .jks 파일로 변환하는 작업을 거쳐야 함.
- .jks Keystore 를 가지고 앱 사이닝 작업
- 끝
.der file > .jks file 변환
keytool -importcert -alias YOUR_ALIAS -file deployment_cert.der -keystore certificate.jks -storepass YOUR_PASSWORD
.jks Keystore 로 사이닝 진행
keytool -exportcert -alias YOUR_ALIAS -keystore certificate.jks | xxd -p | tr -d "[:space:]" | xargs echo -n YOUR_APP_PACKAGE_NAME | shasum -a 256 | tr -d "[:space:]-" | xxd -r -p | base64 | cut -c1-11
.jks Keystore 터미널 명령어가 다른 거랑 많이 다를 것이다. 몇 군데 수정해서 내가 다시 짠 코드니, 참고하면 좋을 것 같다.
일단 나는 Mac 유저이고, 다양한 블로그에서 안내해준 명령어를 쳐도 아래와 같이 나왔기 때문에 몇 군데 수정을 한 것이다.
But? Hash 값이 동일하게 나오잖아?
Hash 값이 동일하게 나온다... 그러면 이게 문제가 아니잖아? 혼란에 빠졌다.
하지만, 결국 해결했다.
여기서 내가 간과한게 있다.
Google console 에 대한 지식이 많이 부족했다..
사실 앱을 개발 후, 테스트를 위해 전달하는 방식이 여러가지라는 것을 알 것이다.
예를 들어, 비공개 테스트, 내부테스트, 내부앱공유, apk 로 전달, IDC 에 업로드하여 link 전달 등등
그런데 나는 내부앱공유를 주로 사용해왔지만 자세히 몰랐던 것이다.
내부 앱공유는 앱 Signing 을 진행할 때, 새로운 keystore 를 이용하여 매번 사이닝을 진행할 때마다 Keystore 값이 달라진다는 사실
위 사진을 보면 저렇게 나와있었고, Doc 을 꼼꼼히 읽어야한다는 사실을 이번에 또 느꼈다.
나는 내부 테스트를 IDC 에 업로드하여 Link 를 전달하는 방식을 택했고,
정상 동작하는 걸 확인했다.