구글이 기존 앱들은 이미 사용하던 릴리즈 사이닝키를 업로드할 수 있는 방법을 제공하고 새로운 앱들은 제공하지 않는 것 같네요… 앱 서명 인증서에 있는 SHA-1 인증서 지문으로 키해시를 알아낼 수 있을 것 같아요 기본적으로 키해시는 다음과 같은 절차를 거져 생성됩니다.
public static String getKeyHash(final Context context) {
PackageInfo packageInfo = 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, "Unable to get MessageDigest. signature=" + signature, e);
}
}
return null;
}
여기서 보시게 되면 SHA-1 인증서 지문을 Base64 인코드하는걸 보실 수 있습니다. 자바 코드에서 위의 SHA-1 인증서 지문을 byte array 로 만드셔서 똑같은 절차를 거치시면 키해시를 얻으실 수 있을 것 같아요.
위의 SHA-1 인증서 지문을 다음과 같이 byte array로 만들어 주신 다음에 Base64 인코딩 해보세요.
byte[] sha1 = {
0x3B, (byte)0xDA, (byte)0xA0, 0x5B, 0x4F, 0x35, 0x71, 0x02, 0x4E, 0x27, 0x22, (byte)0xB9, (byte)0xAc, (byte)0xB2, 0x77, 0x2F, (byte)0x9D, (byte)0xA9, (byte)0x9B, (byte)0xD9
};
Logger.e("keyHash: " + Base64.encodeToString(sha1, Base64.NO_WRAP));
byte의 범위를 넘어가는 값들이 있는데 이 값들은 byte로 캐스트해주셔야 합니다. Base64는 java.util 패키지에 있는 클래스이구요. 이렇게 출력된 값을 한번 개발자 사이트에 등록해보신 후 로그인 시도해 보시겠어요?