안드로이드 AUTHORIZATION_FAILED: invalid android_key_hash or ios_bundle_id or web_site_url

프로그래밍/Android 관련2018. 3. 25. 17:04

안녕하세요. 개발자 드리머즈입니다.

안드로이드 개발 중에 발생한 이슈 정리합니다.


문제 현상


저는 카카오 계정으로 로그인하기 기능을 이용하여 앱을 개발하고 있습니다. 카카오 계정으로 로그인하기 기능이 디버그 버전에서는 잘 동작했었는데 릴리즈 버전에서는 아래와 같이 에러가 뜨면서 카카오 계정으로 로그인하기 기능이 동작하지 않아 로그인이 되지 않았습니다.




1
2
3
4
5
6
7
8
9
10
11
03-25 15:48:31.582 19786-19786/? E/kakao.sdk: AUTHORIZATION_FAILED: invalid android_key_hash or ios_bundle_id or web_site_url
                                                  at com.kakao.auth.AccessTokenCallback.onFailure(AccessTokenCallback.java:42)
                                                  at com.kakao.network.callback.ResponseCallback.onFailureForUiThread(ResponseCallback.java:67)
                                                  at com.kakao.network.tasks.KakaoResultTask$1$1.run(KakaoResultTask.java:79)
                                                  at android.os.Handler.handleCallback(Handler.java:751)
                                                  at android.os.Handler.dispatchMessage(Handler.java:95)
                                                  at android.os.Looper.loop(Looper.java:154)
                                                  at android.app.ActivityThread.main(ActivityThread.java:6247)
                                                  at java.lang.reflect.Method.invoke(Native Method)
                                                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:872)
                                                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:762)
cs




문제 원인

예전 기억을 떠올려보면 카카오 계정으로 로그인하기 기능을 사용하기 위해 카카오 디벨로퍼 사이트에서 몇 가지 설정이 필요했습니다.


이 중에서 키 해시를 설정했던게 떠오릅니다.

키 해시에 대한 설명은 위와 같습니다. 그런데 이해가 잘 안가네요.

저는 아래의 코드로 캐 해시를 구해서 카카오 디벨로퍼 사이트에서 키 해시를 등록했었습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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;
}
cs


그렇게 등록을 했지만 키 해시가 무엇인지 잘 몰라서 찾아봤습니다.


key hash(키 해시)는 앱을 사이닝 하는 와 관련 있습니다.

지금까지는 계속 디버그 버전에서 테스트를 했기에 안드로이드 스튜디오에서 사용하는 디버그 키가 사용됐었습니다. 그리고 저는 그 디버그 키의 키 해시를 카카오 디벨로퍼 사이트에 등록했었습니다. 그래서 카카오 SDK의 API를 사용하는 앱의 키 해시를 검사하여 동일한 키로 사이닝 된 앱(=동일한 키 해시)은 문제없이 실행됐습니다.

그런데 제가 릴리즈 키를 사용하여 릴리즈 버전을 만들었기에 이 앱은 키 해시가 달라져버렸습니다. 이 변경된 키 해시는 카카오 디벨로퍼에 등록되지 않은 값이기 때문에 카카오 SDK에서 위의 에러를 발생시킨 것입니다.


결국 카카오 디벨로퍼에서 키 해시를 설정하는 목적은

특별한 키로 사이닝이 앱(=등록한 키 해시)에서만 '나'의 카카오 SDK API를 호출할 수 있게 하기 위함입니다. 이는 다른 사람이 만든 app에서 '내'가 사용하는 카카오 SDK의 API를 사용하지 못하도록 합니다.

해결 방법

위의 키 해시 구하는 함수를 릴리즈 키로 사이닝 된 앱을 실행하여 릴리즈 키의 키 해시(key hash)를 구합니다.

그리고 그 구한 값을 카카오 디벨로퍼 사이트의 키 해시 부분에 추가하면 됩니다.



작성자

Posted by 드리머즈

관련 글

댓글 영역