본문 바로가기
Mobile App/Android

[안드로이드] SMS Retriever API 내부앱공유에서 안되는 이유 (Debug Hash 값, Release Hash 값)

by Jman 2024. 4. 3.

SMS Retriever API 를 이용하여 본인인증 인증번호를 App 에서 Callback 받는 로직을 만든 적이 있다.

https://devnuts.tistory.com/253

 

[안드로이드] SMS Retriever API 자동입력하는 방법은? (*Android Hash Key 가져오기 *KMC 등 본인확인 기관

SMS Retriever API 를 이용하여 본인인증 인증번호를 App 에서 문자로 받은 인증번호를 Callback 받아 화면에 바로 노출시킬 수 있다. 아래 링크에 사용 방법이 잘 설명되어 있으니, 보면 좋을 것 같다. ht

devnuts.tistory.com

 

위와 같이 만들었고, 테스트를 하려고 했는데 이상하게 내부 앱공유에서 수신문자 Text 가 콜백이 들어오질 않는다.

어? 왜그럴까?

 

분명 나는 Android Studio 디버깅 모드에서도 잘 동작했고, Release 로 말아서 adb install 을 통해 앱 설치를 했을 때도 정상적을 콜백이 됐지만, Release 로 앱을 만 뒤, 사업팀에 테스트 목적으로 전달할 때 이러한 이슈가 발생했다.

 

일단, 내가 시도했던 방법은 이곳저곳 찾아보니 Debug 용 Hash 값과 Release 용 Hash 값이 다르다는 말을 보았다.

그래서 생각했던 건, 내가 뽑아낸 Hash 값이 Debug 모드라서 콜백으로 텍스트가 안 들어오는 걸까?

(e.g 나는 구글 Doc 에서 제공해준 AppSignatureHelper 를 이용하여 Hash 값을 추출했다.)

 

그래서 시도한 방법은 아래와 같다.

https://stackoverflow.com/questions/51365778/how-to-generate-11-char-hash-key-for-sms-retriever-with-google-app-signing/55829661#55829661

 

How to generate 11 char hash key for Sms Retriever with Google App signing

I had generated the 11 char hash using the AppSignatureHelper class. But after uploading the apk to play store, they hash doesn't work anymore. And I found out that Play replaces the key with anoth...

stackoverflow.com

 

아래 stackoverflow.com 에서 알려준대로 하면 release Hash 값을 뽑아낼 수 있다고해서 내가 뽑아 놓은 Hash 값과 비교를 해보았다.

일단 위 링크를 타고 들어가면 되겠지만, 간략하게 아래에 정리를 해두겠다.

 

Release Hash 값 추출하는 순서 (구글스토어에 앱 출시가 된 상태)

  1. Google console 로 들어가 '앱 서명' 카테고리에 진입
  2. 앱 서명 인증서(.der 파일) 다운로드
  3. .der 파일을 .jks 파일로 변환하는 작업을 거쳐야 함.
  4. .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 를 전달하는 방식을 택했고,

정상 동작하는 걸 확인했다.