카카오 로그인 API키 숨기기 (안드로이드/코틀린)

2024. 4. 14. 20:31문제 해결

 

이번 팀 프로젝트에서 카카오 로그인을 맡게 되었는데 

카카오 로그인을 할 때 필요한 API 키 값이 github에 올라가지 않게 숨겨야 한다는 것을 알게되었습니다!

 

그래서 "에이 뭐 별거 아니겠지" 라고 생각하고 다른 분들이 적어두신 블로그를 참고해서 해보았는데

계속 문제가 생겼습니다,,

아니 다들 똑같은 방식으로 API키를 숨기는데 

저만 안되다보니 "내가 뭘 잘못하고 있나..?" 라는 생각이 들었었는데

같이 스터디 하시는 분께서 자신도 안됐었다면서 새로운 방법을 알려주셨습니다!

 

 

우선 다른 분들께서 하시는 코드를 했을 때 어떤 문제가 발생하는지 보여드리겠습니다!(블로그 참고했을때)

 

 

문제 발생

 

 

 

1, local.properties에 키 값을 적어준다 (gitignore에서 안보이게 하는 부분은 대부분 되어있어서 스킵했습니다)

 

 

 

2, Build.gradle.kts(app)에 가서 이렇게 코드를 작성한다

 

Properties properties = new Properties()
Properties.load(project.rootProject.file("local.properties").newInputStream)

 

이후 defaultConfig 내부에 이렇게 코드를 작성했습니다

buildConfigField("String", "KAKAO_API_KEY", "\"${properties.getProperties["KAKAO_API_KEY"]}\"")
        buildConfigField("String", "KAKAO_API_KEY", "\"${properties.getProperties["NATIVE_APP_KEY"]}\"")

 

근데,,,, 밑에 사진을 보시면 계속 에러가 떠있습니다,,

Sync now를 해도 무한 에러가 나옵니다,,

.......

 

이후 이걸 해결해보기 위해 진짜 구글에 API 키 숨기는 블로그를 다 찾아봤는데 

대부분의 사람들이 이렇게 해결을 다 하시더라구요,,,,,

그래서 어떡하지 하다가 

스터디 같이 하시는 분께서 알려주셔서 해결할 수 있었습니다!!

 

 

해결방안!

 

 

1, 위의 코드와 같이 local.properties에 키값을 작성해줍니다

 

 

 

2, 여기서부터 달라지는데 Build.gradle.kts(app)에서 코드를 이렇게 작성해줍니다

 

val localProperties = Properties()
localProperties.load(project.rootProject.file("local.properties").inputStream())
val kakaoApiKey = localProperties.getProperty("KAKAO_API_KEY")?:""
val nativeAppKey = localProperties.getProperty("NATIVE_APP_KEY")?:""

 

이후 defaultConfig 안에서 이렇게 작성을 해줍니다

 

buildConfigField("String", "KAKAO_API_KEY", kakaoApiKey)
        //manifest에서 사용
        manifestPlaceholders["NATIVE_APP_KEY"] = nativeAppKey

 

이후 이 부분이 매우매우매우매우매우 필수인데 이 부분을 하지 않았다가 하루를 더 소비했습니다,,,

 

 

buildFeatures에서 밑줄 친 부분을 true로 해줘야하고 

이후 Sync now를 한 뒤

 

1, 안드로이드 스튜디오 좌측 상단의 햄버거 아이콘을 클릭한다

2, build에 들어간다

3, Rebuild Project를 눌러준다!

 

이렇게 하면 API키를 숨기는 세팅은 완료가 되었습니다!

 

 

이제 사용법을 봐보겠습니다!

 

 

 

어떻게 쓰는가?

 

 

1, AndroidManifest에서 사용

 

<data android:host="oauth"
                    android:scheme="${NATIVE_APP_KEY}"/>

 

이런 식으로 lacal.properties에서 정의해둔 이름으로 적어주시면 됩니다!

 

 

 

 

2, activity or Fragment에서의 사용

 

private fun kakaoLogin(){
        val TAG = "test1234"

        //kakaoSDK 초기화
        KakaoSdk.init(requireActivity(), BuildConfig.KAKAO_API_KEY)

 

이렇게 사용하면 잘 되는 걸 확인할 수 있습니다!

 

 

다른 분들의 블로그를 참고하시다가 정 안되시면 이렇게 하는 방법도 있는 거 같으니 참고 해주시면 좋겠습니다!