안드로이드 카카오로그인 오류 엡 사이닝 관련 버그인가요?

구글이 기존 앱들은 이미 사용하던 릴리즈 사이닝키를 업로드할 수 있는 방법을 제공하고 새로운 앱들은 제공하지 않는 것 같네요… 앱 서명 인증서에 있는 SHA-1 인증서 지문으로 키해시를 알아낼 수 있을 것 같아요 :slight_smile: 기본적으로 키해시는 다음과 같은 절차를 거져 생성됩니다.

    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 패키지에 있는 클래스이구요. 이렇게 출력된 값을 한번 개발자 사이트에 등록해보신 후 로그인 시도해 보시겠어요?

2개의 좋아요