바르고 뜨겁게

[안드로이드] 키해시 얻는 방법 (debug keyhash, release keyhash, googlePlay keyhash) 본문

안드로이드

[안드로이드] 키해시 얻는 방법 (debug keyhash, release keyhash, googlePlay keyhash)

RightHot 2019. 1. 28. 18:52

안드로이드에서 카카오톡 로그인이라던가 페이스북로그인 등 API를 사용하기 위해선

키해시를 해당 사이트에 넣어줘야 한다.


키해시 얻는 방법 (debug keyhash, release keyhash, googlePlay keyhash)


디버그 키해시

1. IDE 사용

    public String getKeyHash(final Context context) {
      PackageInfo packageInfo = Utility.getPackageInfo(context, PackageManager.GET_SIGNATURES);
      if (packageInfo == null)
          return null;

      for (Signature signature : packageInfo.signatures) {
          try {
              MessageDigest md = MessageDigest.getInstance("SHA");
              md.update(signature.toByteArray());

              return Base64.encodeToString(md.digest(), Base64.NO_WRAP);
          } catch (NoSuchAlgorithmException e) {
              Log.w(TAG, "디버그 keyHash" + signature, e);
          }
      }
      return null;
  }

2. cmd 사용

keytool -exportcert -alias androiddebugkey -keystore <debug_keystore_path> -storepass android -keypass android | openssl sha1 -binary | openssl base64

릴리즈 키해시

1. cmd 사용
keytool -exportcert -alias key0 -keystore <키스토어 경로>\KeyStore.jks | openssl sha1 -binary | openssl base64

만약 환경변수에 keytool이 추가되지 않았다면 jre가 깔린 폴더로 이동해서 사용하자.

ex) 

cd C:\Program Files\Java\jdk1.8.0_171\bin

구글플레이 키해시

오늘 포스팅을 하게 만든 주범이다. 일단 카카오톡디벨롭스에서는 아래와 같이 설명하고있다.

만약 구글 플레이 개발자 콘솔에서 Google play app signing 기능을 활성화시키셨다면 구글 플레이에 앱이 릴리즈되기 전에 개발자의 로컬 개발 환경에서 릴리즈 키스토어의 시그너쳐가 삭제되고 구글 서버에 저장되어 있는 사이닝키의 시그너쳐로 교체됩니다. 그렇기 때문에 이 사이닝키로 생성한 키해시 또한 등록해줘야 합니다.
무슨말인지 1도 모르겠다.

위의 말을 무시하고 릴리즈된 apk를 마켓에 올리면 
com.kakao.util.exception.KakaoException: AUTHORIZATION_FAILED : 
invalid android_key_hash or ios_bundle_id or web_site_url

와 같은 에러를 발생시킨다. 분명 잘되던 놈이 말이다.


분명 릴리즈키해시까지 잘 등록했는데 왜 그럴까?


개발자가 APK 배포 시 앱 서명을 하던 기존 방식과 달리 구글 플레이 앱 서명은 업로드 키로 서명된 APK를 구글 플레이에 업로드하면 구글이 업로드 인증서를 확인 후 앱 서명 키로 재서명을 합니다. 업로드 서명은 이름 그대로 업로드 시 검증을 위해서만 사용되며 앱 서명 키로 서명되기 전 삭제됩니다. 이제 개발자는 로컬에 앱 서명 키가 아닌 업로드 키를 보관하면 되고, 앱 서명 키는 구글의 인프라를 통해 관리되므로 앱 서명 키를 분실하는 문제로부터 자유로워질 수 있습니다. 다만 마음의 준비가 필요한 부분이라면 개발자가 배포용으로 빌드 한 APK와 구글 플레이에 배포한 APK의 서명이 다름으로 발생하는 일련의 현상들입니다. (https://medium.com/@jungil.han)


라고 한다.


그렇기 때문에 구글 플레이 콘솔에 접속한다음 아래와 같은 화면에서 인증서 지문을 들고와야 된다.



그런데 문제는 저 인증서지문을 그대로 올리면 또 안된다. base64(?) 형태로 변환을 시켜줘야하는데 

윈도우에서는 아무리 찾아봐도 방법이 나오지 않는다.


그래서 결국 크롬에 있는 리눅스 가상머신 TermLinux 앱을 사용해서 아래와 같이 입력 후 해결했다.

echo <구글플레이 SHA-1 인증서지문 입력> | xxd -r -p | openssl base64




Comments