반응형
android 네이티브 앱 개발시에 카카오 API 를 이용하게 되면 '키 해시' 값을 요구 합니다.
카카오 API 뿐만 아니라 여러 소셜 API 에서 요구 하는 경우가 많이 있습니다.
'키 해시' : 앱의 사이닝 키 시그니처(Signing key signature)를 해시한 값
따라서 API를 호출한 서버는 등록된 '키 해시' 와 네이티브 앱 키가 매치 하는지 비교하여 악성 앱을 판별 합니다.
따라서 '키 해시'를 등록해주기 위해서 추출 하는 방법은 2 가지가 있습니다.
1. java의 keytool 명령어를 CMD 창에 입력하여 얻을수 있습니다. 이 방법은 익숙하지 않으신 분들은 조금 복잡 할수 있습니다.
2. 앱 내의 java 소스로 '키 해시'를 로그캣의 출력하여 확인 할수 있습니다.(추천)
2번 java 소스는 다음과 같습니다. HashGetter 라는 클래스를 다음과 같이 만듭니다.
import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.Signature;
import android.support.annotation.Nullable;
import android.util.Base64;
import android.util.Log;
import java.security.MessageDigest;
public class HashGetter {
@Nullable
public static String getHashKey(Context context) {
final String TAG = "KeyHash";
String keyHash = null;
try {
PackageInfo info = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md;
md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
keyHash = new String(Base64.encode(md.digest(), 0));
Log.d(TAG, keyHash);
}
} catch (Exception e) {
Log.e("name not found", e.toString());
}
if (keyHash != null) {
return keyHash;
} else {
return null;
}
}
}
로그를 출력하기 원하는 액티비티 내 에서 아래와 같이 호출 하여 로그캣의 출력 할 수 있습니다.
HashGetter.getHashKey(getApplicationContext());
카카오 개발자 문서에 1번 keytool 명령어를 이용한 방법 또한 잘 설명되어 있습니다.
아래 링크를 참고해주세요.
반응형
'Android' 카테고리의 다른 글
repo init mirror 옵션 vs reference 옵션 차이 (0) | 2024.01.31 |
---|---|
Activity orientation 상황에서 액티비티 재생성 방지 (0) | 2023.06.10 |
BaseObservable을 이용한 inverseBinding (0) | 2021.02.11 |
ViewPager2 + TabLayout + RecyclerView (2) | 2021.01.07 |
Android ConstraintLayout 사용법 (0) | 2020.10.21 |